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 聚合数据。