動的スキーマ生成
ChainStream GraphQLスキーマは、activecube-rs(Rustライブラリ)によって起動時に動的に生成されます。このライブラリはCube定義を完全に型付けされたasync-graphqlスキーマにコンパイルします。各CubeはOLAPテーブルに裏付けられた分析データモデルにマッピングされ、activecube-rsは以下を自動生成します:- CubeのトップレベルQueryフィールド(チェーングループの下にネスト)
- 選択可能なディメンションを表すRecordタイプ(
{Cube}Record) - ディメンション階層に一致するFilterインプット(
{Cube}Filter) - すべてのディメンションパスに対するASC/DESCバリアントを持つOrderBy enum(
{Cube}OrderBy)
スキーマはCube定義から生成されるため、Rustで追加された新しいデータモデルはデプロイ後に自動的にGraphQLエンドポイントに反映されます。
ルートクエリ構造
ルートクエリタイプはChainStreamです。Cubeは3つのチェーングループに整理され、それぞれがトップレベルフィールドとして公開されます:
MutationやSubscriptionタイプはありません — GraphQL APIは読み取り専用の分析クエリです。
チェーングループ
Cubeは対象とするブロックチェーンエコシステムに基づいて3つのグループに整理されています:| チェーングループ | network引数 | 利用可能なネットワーク | 説明 |
|---|---|---|---|
| EVM | 必須 | eth、bsc、polygon | すべてのEVM互換チェーンの共有Cube |
| Solana | 不要 | sol(暗黙的) | チェーン固有のCube(Instructions、DEXOrders)を含むSolana用Cube |
| Trading | 不要 | クロスチェーン(sol、eth、bsc) | chainディメンション付きの事前集計トレーディング分析(OHLCローソク足、トークン統計) |
EVMグループはクエリするチェーンを選択するために
network引数が必要です。SolanaとTradingはnetwork引数不要です — Solanaは暗黙的で、Tradingはデータ内にchainディメンションを含みます。チェーングループパラメータ
すべてのチェーングループは、データソースの動作を制御する2つのオプションパラメータを受け付けます:Dataset
datasetパラメータはクエリされるデータの時間スコープを制御します:
| 値 | 説明 |
|---|---|
combined | 全範囲 — 最新データと履歴データの両方をクエリ (デフォルト) |
realtime | 最新データのみ(約24時間以内) |
archive | 保持TTLまでの履歴データ |
Aggregates
aggregatesパラメータは事前集計(DWM/DWS)テーブルを使用するかどうかを制御します:
| 値 | 説明 |
|---|---|
yes | 利用可能な場合、事前集計テーブルを優先 (対象Cubeのデフォルト) |
no | 生の詳細テーブルのみを使用 |
only | 事前集計テーブルのみを使用(高速だがフィールドが限定) |
共通引数パターン
チェーングループ内で、すべてのCubeフィールドは同じ標準引数セットに加え、オプションのCube固有セレクターを受け付けます:| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
where | {Cube}Filter | いいえ | ディメンション階層に一致するネストされたフィルタオブジェクト |
limit | LimitInput | いいえ | ページネーション:{count: Int, offset: Int} |
orderBy | {Cube}OrderBy | いいえ | ソート順enum({Path}_ASC / {Path}_DESC) |
| セレクター | フィルタインプット | いいえ | ショートカットフィルタ(例:tokenAddress: {is: "..."}) |
LimitInput
countはCubeにより異なります(通常25)。最大値はほとんどのCubeで10,000です。
Cubeごとに生成される型
各Cubeに対して、activecube-rsは3つのコンパニオン型を生成します:Recordタイプ
{Cube}Record — すべての選択可能なディメンションとメトリクスを含む戻り値の型。フィールド構造はCubeのディメンション階層を反映します。Filterインプット
{Cube}Filter — 各ディメンションがフィルタプリミティブ(StringFilter、IntFilter、DateTimeFilterなど)にマッピングされたネストされたインプットオブジェクト。OrderBy Enum
{Cube}OrderBy — すべてのディメンションパスに対するASCとDESCの両方向のEnumバリアント(例:Block_Time_ASC、Trade_Buy_Amount_DESC)。イントロスペクション
スキーマは標準的なGraphQLイントロスペクションをサポートしています。__schemaと__typeクエリを使用して型、フィールド、引数を探索できます:
- すべてのCubeを一覧
- Cubeタイプを検査
- フィルタオペレータを一覧
次のステップ
データキューブ
25のCubeすべてのフィールド、セレクター、データウェアハウスレイヤーを探索。
チェーングループ
EVM、Solana、Tradingチェーングループとその利用可能なCubeを理解。
データセットとアグリゲート
datasetとaggregatesでデータソーススコープと事前集計動作を制御。フィルタリング
whereフィルタとセレクターショートカットでクエリを絞り込む方法を学習。ソートとページネーション
orderByとlimitで結果をソートし、大きなデータセットをページネーション。メトリクスと集計
count、sum、avg、min、max、uniqでクエリ内のデータを集計。
