動的スキーマ生成
ChainStream GraphQL スキーマは起動時に activecube-rs によって動的に生成されます。activecube-rs は Rust のライブラリで、Cube 定義を完全に型付けされた async-graphql スキーマにコンパイルします。各 Cube は OLAP テーブルに裏付けられた分析データモデルに対応し、activecube-rs が自動的に次を生成します。- Cube 用のトップレベル Query フィールド(所属する Chain Group の下にネスト)
- 選択可能なディメンションを表す Record 型(
{Cube}Record) - ディメンション階層に対応する Filter 入力(
{Cube}Filter) - すべてのディメンションパスに対する ASC/DESC バリアントを持つ OrderBy 列挙(
{Cube}OrderBy)
スキーマは Cube 定義から生成されるため、Rust で新しいデータモデルを追加するとデプロイ後に GraphQL エンドポイントへ自動的に反映されます。
ルート Query の構造
ルートのクエリ型名はChainStream です。Cube は 3 つの Chain Group に整理され、それぞれがトップレベルフィールドとして公開されます:
Mutation 型や Subscription 型はありません — GraphQL API は読み取り専用の分析クエリです。
Chain Group
Cube は対象とするブロックチェーンエコシステムに応じて 3 グループに分かれます:EVM グループは、問い合わせるチェーンを選ぶために
network 引数が必要です。Solana と Trading には network 引数は不要です — Solana は暗黙で、Trading はデータ内に chain ディメンションがあります。Chain Group のパラメータ
すべての Chain Group は、データソースの挙動を制御する 2 つの任意パラメータを受け取ります。Dataset
dataset パラメータは、問い合わせるデータの時間範囲を制御します:
Aggregates
aggregates パラメータは、事前集計(DWM/DWS)テーブルを使うかどうかを制御します:
共通の引数パターン
Chain Group 内の各 Cube フィールドは、同じ標準引数セットに加え、Cube 固有の任意のセレクターを受け取ります:LimitInput
count は Cube により異なります(多くは 25)。最大はほとんどの Cube で 10,000 です。
Cube ごとに生成される型
各 Cube に対して activecube-rs は 3 つの関連型を生成します:Record 型
{Cube}Record — 選択可能なすべてのディメンションとメトリクスを含む戻り値の型。フィールド構造は Cube のディメンション階層を反映します。Filter 入力
{Cube}Filter — 各ディメンションがフィルターprimitive(StringFilter、IntFilter、DateTimeFilter など)にマップされるネストした入力オブジェクト。OrderBy 列挙
{Cube}OrderBy — すべてのディメンションパスについて ASC と DESC の両方向の列挙値(例: Block_Time_ASC, Trade_Buy_Amount_DESC)。イントロスペクション
スキーマは標準の GraphQL イントロスペクションをサポートします。__schema と __type クエリで型・フィールド・引数を調べられます:
- すべての Cube を列挙
- Cube 型を調べる
- フィルター演算子を列挙
次のステップ
Data Cubes
25 の Cube — フィールド、セレクター、データウェアハウス層を確認します。
Chain Groups
EVM、Solana、Trading の Chain Group と利用可能な Cube を理解します。
Dataset & Aggregates
dataset と aggregates でデータソースの範囲と事前集計の挙動を制御します。フィルタリング
where フィルターとセレクター省略形でクエリを絞り込みます。並び順とページネーション
orderBy と limit で結果を並べ替え、大きなデータセットをページングします。メトリクスと集計
クエリ内で
count、sum、avg、min、max、uniq を使ってデータを集計します。
