Skip to main content

動的スキーマ生成

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
スキーマは常に下位のデータモデルと一致するため、手書きの SDL を保守する必要はありません。
スキーマは Cube 定義から生成されるため、Rust で新しいデータモデルを追加するとデプロイ後に GraphQL エンドポイントへ自動的に反映されます。

ルート Query の構造

ルートのクエリ型名は ChainStream です。Cube は 3 つの Chain Group に整理され、それぞれがトップレベルフィールドとして公開されます:
Mutation 型や Subscription 型はありません — GraphQL API は読み取り専用の分析クエリです。

Chain Group

Cube は対象とするブロックチェーンエコシステムに応じて 3 グループに分かれます:
EVM グループは、問い合わせるチェーンを選ぶために network 引数が必要です。SolanaTrading には network 引数は不要です — Solana は暗黙で、Trading はデータ内に chain ディメンションがあります。
各グループにどの Cube が属するかの詳細は Chain Groups を参照してください。

Chain Group のパラメータ

すべての Chain Group は、データソースの挙動を制御する 2 つの任意パラメータを受け取ります。

Dataset

dataset パラメータは、問い合わせるデータの時間範囲を制御します:

Aggregates

aggregates パラメータは、事前集計(DWM/DWS)テーブルを使うかどうかを制御します:
利用方法、対応テーブル、性能の指針の詳細は Dataset & Aggregates を参照してください。

共通の引数パターン

Chain Group 内の各 Cube フィールドは、同じ標準引数セットに加え、Cube 固有の任意のセレクターを受け取ります:

LimitInput

既定の count は Cube により異なります(多くは 25)。最大はほとんどの Cube で 10,000 です。

Cube ごとに生成される型

各 Cube に対して activecube-rs は 3 つの関連型を生成します:

Record 型

{Cube}Record — 選択可能なすべてのディメンションとメトリクスを含む戻り値の型。フィールド構造は Cube のディメンション階層を反映します。

Filter 入力

{Cube}Filter — 各ディメンションがフィルターprimitive(StringFilterIntFilterDateTimeFilter など)にマップされるネストした入力オブジェクト。

OrderBy 列挙

{Cube}OrderBy — すべてのディメンションパスについて ASC と DESC の両方向の列挙値(例: Block_Time_ASC, Trade_Buy_Amount_DESC)。
DEXTrades の例:

イントロスペクション

スキーマは標準の GraphQL イントロスペクションをサポートします。__schema__type クエリで型・フィールド・引数を調べられます:
GraphQL IDE はイントロスペクションスキーマを自動取得し、オートコンプリートとインライン文書を提供します。イントロスペクションクエリを手で書かなくても、対話的にスキーマ全体を探索できます。

次のステップ

Data Cubes

25 の Cube — フィールド、セレクター、データウェアハウス層を確認します。

Chain Groups

EVM、Solana、Trading の Chain Group と利用可能な Cube を理解します。

Dataset & Aggregates

datasetaggregates でデータソースの範囲と事前集計の挙動を制御します。

フィルタリング

where フィルターとセレクター省略形でクエリを絞り込みます。

並び順とページネーション

orderBylimit で結果を並べ替え、大きなデータセットをページングします。

メトリクスと集計

クエリ内で countsumavgminmaxuniq を使ってデータを集計します。