Skip to main content
在 ChainStream GraphQL 中筛选数据有两种方式:
  1. Selector 快捷参数——顶层参数如 tokenAddress,为常见筛选提供便捷写法
  2. where 参数——嵌套筛选对象,支持完整运算符与任意维度筛选
最佳实践:务必加上时间筛选。 对于 DWD(明细)类 Cube(如 DEXTrades、Transfers、BalanceUpdates),未带 Block.Time 筛选的查询可能扫描极大分区。请始终包含 where: {Block: {Time: {after: "..."}}} 以限制扫描范围,避免 OLAP 引擎触发内存上限。
同一查询中可以同时使用二者。

Selector 快捷参数

Selector 是 Cube 字段上的便捷参数,映射到常见的 where 筛选模式。它们接受与 where 字段相同的筛选输入类型(例如带 isinlike 等的 StringFilter),而不是裸字符串。 以下两个查询等价:
Selector 支持全部筛选运算符——不限于精确匹配。例如 tokenAddress: {in: ["ADDR_1", "ADDR_2"]} 可匹配多个代币,date: {after: "2025-01-01T00:00:00Z"} 可按时间筛选。

where 参数

where 接受嵌套输入对象,结构与 Cube 的维度层级一致。每个叶子字段对应一个筛选原语,带类型化运算符。

结构

示例——筛选区块时间在某日期之后 买入数量大于 1000 的 DEXTrades:
where 同一层级出现多个字段时,以 AND 逻辑组合。

筛选原语类型

每个叶子维度映射为以下筛选输入类型之一:

StringFilter

用于地址、哈希、协议名称等文本字段。

IntFilter / FloatFilter

用于数量、价格、计数等数值字段。

DateTimeFilter

用于时间戳字段。值为 ISO 8601 字符串。
after/before不含边界(严格不等)。since/till含边界between 接受二元数组,两端均含。

BoolFilter

用于布尔字段。

使用 any 表达 OR

默认情况下,where 中所有条件以 AND 组合。若要表达 OR,使用 any 数组字段——每个元素为完整筛选对象,匹配任一条件的记录会被返回。
any 可与 where 其他顶层字段组合。any 内条件先彼此 OR,再与同层其他条件 AND。

默认筛选

部分 Cube 会自动应用默认筛选。可在 where 中显式写出筛选以覆盖。 若要包含可疑成交,请显式设置:
若不在 where 中指定 IsSuspect,默认仍为 false。若要查询全部成交(不论可疑与否),可使用 OR:

组合 Selector 与 where

Selector 与 where 以 AND 组合。便于用 Selector 锁定主体实体,用 where 做进一步细化:
该查询在 Solana 上取最近 50 笔 USDC 成交,且买入数量大于 100,按时间降序排列。

下一步

排序与分页

使用 orderBylimit 排序并分页浏览数据。

指标与聚合

使用 count、sum、avg、min、max、uniq 对筛选后的数据聚合。