Skip to main content

動態 Schema 生成

ChainStream GraphQL schema 在啟動時由 activecube-rs 動態生成。該 Rust 庫將 Cube 定義編譯為型別完整的 async-graphql schema。每個 Cube 對應由 OLAP 表支撐的分析資料模型,activecube-rs 會自動產出:
  • Cube 的頂層 Query 欄位(巢狀在其 Chain Group 下)
  • 表示可選維度的 Record 型別{Cube}Record
  • 與維度層級一致的 Filter 輸入{Cube}Filter
  • 每條維度路徑的 ASC/DESC 變體組成的 OrderBy 列舉{Cube}OrderBy
因此 schema 始終與底層資料模型一致——無需手寫 SDL 維護。
由於 schema 由 Cube 定義生成,Rust 中新增的資料模型在部署後會自動反映到 GraphQL 端點。

根查詢結構

根查詢型別名為 ChainStream。Cube 歸入三個 Chain Group,每個作為頂層欄位暴露:
不存在 MutationSubscription 型別——GraphQL API 為只讀分析查詢。

Chain Group

按目標區塊鏈生態,Cube 分為三組:
EVM 組必須傳入 network 以選擇鏈。SolanaTrading 不需要 network——Solana 為隱式,Trading 在資料內透過 chain 維度區分。
完整劃分見 Chain Groups

Chain Group 引數

每個 Chain Group 接受兩個可選引數,用於控制資料來源行為:

Dataset

dataset 控制查詢資料的時間範圍:

Aggregates

aggregates 控制是否使用預聚合(DWM/DWS)表:
詳細用法、支援的表與效能建議見 Dataset & Aggregates

通用引數模式

在 Chain Group 內,每個 Cube 欄位接受同一套標準引數,外加可選的 Cube 專屬 selector

LimitInput

預設 count 因 Cube 而異(多為 25)。多數 Cube 最大為 10,000。

每個 Cube 的生成型別

對每個 Cube,activecube-rs 會生成三類配套型別:

Record 型別

{Cube}Record — 返回值型別,包含全部可選維度與指標。欄位結構與 Cube 維度層級一致。

Filter 輸入

{Cube}Filter — 巢狀輸入物件,各維度對映到篩選原語(StringFilterIntFilterDateTimeFilter 等)。

OrderBy 列舉

{Cube}OrderBy — 每條維度路徑在升序與降序下的列舉變體(如 Block_Time_ASCTrade_Buy_Amount_DESC)。
DEXTrades 示例:

Introspection

Schema 支援標準 GraphQL introspection。可用 __schema__type 查詢探索型別、欄位與引數:
GraphQL IDE 會自動拉取 introspection schema 以驅動自動補全與內聯文件。可在介面中互動探索完整 schema,無需手寫 introspection 查詢。

下一步

資料 Cube

瀏覽全部 25 個 Cube——欄位、selector 與數倉分層。

Chain Group

瞭解 EVM、Solana、Trading 三個 Chain Group 及其可用 Cube。

Dataset 與 Aggregates

使用 datasetaggregates 控制資料來源範圍與預聚合行為。

篩選

學習如何用 where 與 selector 快捷方式收窄查詢。

排序與分頁

使用 orderBylimit 對大資料集排序與分頁。

指標與聚合

在查詢中使用 countsumavgminmaxuniq 聚合資料。