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 對篩選後的資料聚合。