ChainStream GraphQLのすべてのチェーングループは、どの基盤テーブルをクエリするかを制御する2つのオプションパラメータを受け付けます。これらのパラメータにより、ユースケースに応じてデータの鮮度、クエリ速度、データの完全性を最適化できます。
Datasetパラメータ
datasetパラメータはクエリされるデータの時間スコープを制御します。クエリがリアルタイムテーブル、アーカイブテーブル、または両方にアクセスするかを決定します。
| 値 | 説明 | 一般的なユースケース |
|---|
combined | リアルタイムデータとアーカイブデータの両方をクエリ (デフォルト) | 全範囲が必要な汎用クエリ |
realtime | 最新データのみ(約24時間以内) | モニタリングダッシュボード、最新トレード、リアルタイムアラート |
archive | 保持TTLまでの履歴データのみ | 過去分析、バックフィル、トレンドリサーチ |
使用方法
query {
Solana(dataset: realtime) {
DEXTrades(limit: {count: 10}, orderBy: Block_Time_DESC) {
Block { Time }
Trade { Buy { Currency { MintAddress } Amount PriceInUSD } }
}
}
}
query {
EVM(network: eth, dataset: archive) {
Transfers(
where: { Block: { Time: { after: "2026-01-01T00:00:00Z", before: "2026-02-01T00:00:00Z" } } }
limit: {count: 100}
) {
Block { Time }
Transfer { Currency { MintAddress } Amount AmountInUSD }
}
}
}
履歴データのバックフィル
データパイプラインの構築やダウンタイムからの復旧時に、dataset: archiveと時間範囲フィルタを使用して履歴データをバックフィルできます:
- 最後に処理したタイムスタンプまたはブロック高を記録
- 最後のチェックポイントから現在時刻までの
whereフィルタ付きでdataset: archiveをクエリ
- バックフィルされたデータを処理
- 継続的なモニタリングのために
dataset: realtimeに切り替え
query BackfillTrades {
Solana(dataset: archive) {
DEXTrades(
where: {
Block: {
Time: {
after: "2026-04-01T00:00:00Z"
before: "2026-04-02T00:00:00Z"
}
}
}
limit: {count: 10000}
orderBy: Block_Time_ASC
) {
Block { Time Slot }
Transaction { Hash }
Trade {
Buy { Currency { MintAddress } Amount PriceInUSD }
Sell { Currency { MintAddress } Amount }
}
}
}
}
Datasetをサポートしないテーブル
一部のCubeはdataset値に関係なく常に同じテーブルをクエリします。これには以下が含まれます:
- DWS Cube:
TokenHolders、WalletTokenPnL、DEXPools — 現在の状態スナップショットを表す
- 特殊テーブル:
TransactionBalances、PredictionTrades、PredictionManagements、PredictionSettlements
これらのCubeでは、datasetはサイレントに無視されます。
Aggregatesパラメータ
aggregatesパラメータは、クエリが生の詳細テーブル(DWDレイヤー)ではなく事前集計マテリアライズドビュー(DWMレイヤー)を使用するかどうかを制御します。事前集計テーブルには事前計算されたロールアップ(通常は分単位)が含まれ、クエリが大幅に高速になります。
| 値 | 説明 | 一般的なユースケース |
|---|
yes | 利用可能な場合、事前集計テーブルを優先 (デフォルト動作) | ほとんどの分析クエリ |
no | 生の詳細テーブルのみを使用 | イベント単位の粒度が必要な場合 |
only | 事前集計テーブルのみを使用 | 最大のクエリ速度、限定的なフィールドセットを許容 |
使用方法
query {
EVM(network: eth, aggregates: only) {
Pairs(
where: { Token: { Address: { is: "0xdac17f958d2ee523a2206206994597c13d831ec7" } } }
limit: {count: 100}
orderBy: Block_Time_DESC
) {
Interval { Time }
Price { Ohlc { Open High Low Close } }
Volume { Usd }
}
}
}
各モードの使い分け
| シナリオ | 推奨 | 理由 |
|---|
| OHLCチャートの構築 | aggregates: only | 事前計算されたローソク足データ、最速のレスポンス |
| 経時的な出来高トレンド | aggregates: yes | 事前集計された出来高統計を活用 |
| 個別のトレード分析 | aggregates: no | ロールアップでは提供されないイベント単位の詳細が必要 |
| ユニークトレーダーのカウント | aggregates: yes | 事前計算されたユニークカウントが利用可能 |
両パラメータの組み合わせ
datasetとaggregatesを一緒に使用できます:
query {
Trading(dataset: realtime, aggregates: yes) {
Tokens(
where: { Token: { Address: { is: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" } } }
limit: {count: 60}
orderBy: Block_Time_DESC
) {
Interval { Time }
Volume { Usd BuyVolumeUSD SellVolumeUSD }
Stats { TradeCount UniqueBuyers UniqueSellers }
}
}
}
このクエリは、最大速度のために事前集計テーブルを使用してリアルタイムデータから最後の約60分間のクロスチェーントークントレード統計を取得します。
パフォーマンスの考慮事項
ダッシュボードにはrealtimeを使用
dataset: realtimeはより小さいテーブルパーティションをクエリするため、モニタリングユースケースでより高速なレスポンスタイムが得られます。
分析にはaggregatesを使用
aggregates: yesまたはonlyは、生のイベントテーブルをスキャンするよりも桁違いに高速な事前計算ロールアップを活用します。
OHLCまたは出来高クエリを可能な限り高速にするには、dataset: realtimeとaggregates: onlyを組み合わせてください。最小かつ最も最適化されたデータスライスを対象にします。
関連ドキュメント
スキーマ概要
datasetとaggregatesが全体のクエリ構造にどのように組み込まれるかを確認。
データキューブ
どのCubeがdataset切り替えをサポートしているかを確認。