> ## Documentation Index
> Fetch the complete documentation index at: https://docs.blockdb.chaintable.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 条件筛选与算子管道

> 使用 Column / filter 构造条件表达式，使用 Operator 构造 filter + deduplicate 预处理管道。

# 条件筛选与算子管道

SDK 提供两套表达式封装：`Column` 用 Python 运算符构造列条件，`Operator` 构造链式的过滤与去重预处理管道。它们最终都序列化为 JSON，供服务端或 BlockX 在函数执行前消费。

## Column 列表达式

`Column(name)` 表示一个列，支持比较、逻辑、集合运算，返回条件表达式：

```python theme={null}
from blockdb import Column

col = Column("value")

# 比较
col > 0
col == "Transfer"

# 逻辑组合
(col > 0) & (col < 100)
(Column("name") == "Transfer") | (Column("name") == "Deposit")

# 集合
Column("tx_id").in_(["0x...", "0x..."])
Column("addr").not_in(["0x..."])
```

## filter 序列化为条件

`filter(expr)` 把 Column 表达式序列化为条件 JSON 字符串，供下游使用：

```python theme={null}
from blockdb import Column, filter

expr = (Column("value") > 0) & (Column("name") == "Transfer")
cond = filter(expr)
# -> '{"type":"And","left":{"type":"GreaterThan",...},"right":{...}}'
```

`filter` 也接受已经是 JSON 字符串的输入并原样透传。

## Operator 算子管道

`Operator` 构造链式的 `filter` / `deduplicate` 预处理管道，序列化为结构化的执行计划：

```python theme={null}
from blockdb import Column, Operator

op = (
    Operator()
    .filter(
        (Column("value") > 0) &
        (Column("name") == "Transfer")
    )
    .deduplicate(Column("tx_id"))
)

op.to_dict()   # 结构化的执行计划 dict
op.to_json()   # JSON 字符串
```

这个管道描述了"先按条件过滤，再按 `tx_id` 去重"。它通常挂在 BlockX 任务的 `triggerSource` 上，让引擎在调用业务函数前先做预处理——源表行先被砍一刀，函数只处理真正关心的子集。

<Info>
  预处理管道是可选的：简单逻辑直接写在函数体里更直观；当行数大、过滤比例高时，用 Operator 在引擎侧先过滤去重更省。
</Info>

## 相关阅读

* [配合 BlockX 高并发计算](/zh/guides/blockx)
* [读写数据](/zh/guides/data-access)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.