メインコンテンツへスキップ

orderBy Enum

各Cubeは、すべてのソート可能なディメンションに対してASCとDESCバリアントを持つ{Cube}OrderBy enumを生成します。命名規則は、ディメンションパスをアンダースコアで結合します:
{DimensionGroup}_{DimensionField}_ASC
{DimensionGroup}_{DimensionField}_DESC
ネストされたディメンションの場合、各レベルが結合されます:
Trade_Buy_Amount_ASC
Trade_Buy_PriceInUSD_DESC
Block_Time_ASC

一般的なorderBy値

Enum値Cube説明
Block_Time_ASCDEXTrades、Transfers、BalanceUpdates、DEXPools、TokenSupplyUpdates、Pairs、Tokens古い順
Block_Time_DESCDEXTrades、Transfers、BalanceUpdates、DEXPools、TokenSupplyUpdates、Pairs、Tokens新しい順
Interval_Time_Start_ASCPairs、Tokens古い順(インターバル開始時刻)
Interval_Time_Start_DESCPairs、Tokens新しい順(インターバル開始時刻)
Trade_Buy_Amount_DESCDEXTrades最大購入金額順
Trade_Buy_PriceInUSD_DESCDEXTrades最高USD価格順
Transfer_AmountInUSD_DESCTransfers最大USDトランスファー順
LatestBalanceUSD_DESCTokenHolders最大ホルダー順
BuyVolumeUSDState_DESCWalletTokenPnL最高購入出来高順
GraphQL IDEの自動補完を使用して、Cubeの利用可能なすべてのorderBy値を発見できます — orderBy:と入力するとIDEが完全なenumを表示します。

使用方法

orderBy引数に単一のenum値を渡します:
query {
  DEXTrades(
    network: sol
    orderBy: Block_Time_DESC
    limit: { count: 10 }
  ) {
    Block { Time }
    Trade { Buy { Amount PriceInUSD } }
  }
}
orderBy単一のenum値を受け付けます。複数カラムによるソートはサポートされていません — クエリは一度に1つのディメンションでソートされます。

limit引数

limit引数は返される行数を制御し、オフセットベースのページネーションをサポートします:
input LimitInput {
  count: Int   # 返す行数
  offset: Int  # スキップする行数
}

デフォルトと最大リミット

各Cubeにはlimit引数を省略した場合に適用されるデフォルトリミットと、最大上限があります:
Cubeデフォルトcount最大count
DEXTrades2510,000
Transfers2510,000
BalanceUpdates2510,000
DEXPools2510,000
TokenSupplyUpdates2510,000
Pairs2510,000
Tokens2510,000
DEXPoolEvents2510,000
TokenHolders2510,000
WalletTokenPnL2510,000
最大値を超えるcountをリクエストした場合、サーバーはサイレントに最大値で制限します。

オフセットベースのページネーション

offsetを使用して結果セットをページングします。パターンはシンプルです:
  • ページ1: limit: { count: 50, offset: 0 }
  • ページ2: limit: { count: 50, offset: 50 }
  • ページ3: limit: { count: 50, offset: 100 }

例:ページネーション付きトークンホルダー

query {
  TokenHolders(
    network: sol
    tokenAddress: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
    orderBy: LatestBalanceUSD_DESC
    limit: { count: 20, offset: 0 }
  ) {
    Holder { Address }
    LatestBalance
    LatestBalanceUSD
  }
}

ページネーションのヒント

安定したソート順がないと、ページ間で行がシフトする可能性があります。決定的な順序を生成するorderByを常にlimitとペアにしてください。
大きなoffset値(例:50,000以上)は、データベースが行をスキャンしてスキップする必要があるため、パフォーマンスが低下する可能性があります。非常に大きなデータセットの場合、深くページネーションするのではなくwhereフィルタでクエリを絞り込んでください。
ページがリクエストしたcountより少ない行を返した場合、データセットの末尾に達しています。あるいは、countメトリクスフィールドを使用して事前に総行数を取得することもできます。

実践的な例

最新の大口トレード

Solanaで購入価格が$10,000を超える最新10件のDEXトレードを取得:
query {
  DEXTrades(
    network: sol
    where: {
      Trade: { Buy: { PriceInUSD: { gt: 10000 } } }
    }
    orderBy: Block_Time_DESC
    limit: { count: 10 }
  ) {
    Block { Time }
    Trade {
      Buy {
        Currency { MintAddress }
        Amount
        PriceInUSD
      }
      Dex { ProtocolName }
    }
  }
}

OHLCローソク足 — 直近60分

トークンの1分足ローソク足を時系列順で取得:
query {
  Trading {
    Pairs(
      where: {
        Token: { Address: { is: "So11111111111111111111111111111111111111112" } }
        Market: { Network: { is: "sol" } }
        Block: { Time: { after: "2025-03-27T09:00:00Z" } }
      }
      orderBy: Block_Time_ASC
      limit: { count: 60 }
    ) {
      Block { Time }
      Price {
        Ohlc { Open High Low Close }
      }
      Volume { Usd }
      Stats { TradeCount }
    }
  }
}

トップ50トークンホルダー

USD残高順でトップ50ホルダーを取得:
query {
  TokenHolders(
    network: sol
    tokenAddress: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"
    orderBy: LatestBalanceUSD_DESC
    limit: { count: 50 }
  ) {
    Holder { Address }
    LatestBalance
    LatestBalanceUSD
    FirstSeen
    LastSeen
  }
}

次のステップ

フィルタリング

ソートとフィルタを組み合わせて精密な分析クエリを構築。

メトリクスと集計

ソートされたデータをcount、sum、avg、min、max、uniqで集計。