Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

GraphQL API の結果が一致しない場合

最終更新 Markdown で表示Agent セットアップ

同じ GraphQL Analytics API クエリを何度か実行して、結果がわずかに違う場合、原因は Adaptive Bit Rate(ABR)サンプリングです。ABR はクエリの複雑さとタイミングに応じてデータの解像度を動的に調整するため、実行ごとにわずかな差が出ることがあります。

ばらつきを抑えるには、期間を短くクエリする(月単位ではなく日単位または週単位)、集計済みデータセット(Groups 接尾辞のノード)を使う、信頼区間を取得してデータの品質を把握する、といった方法があります。詳細は サンプリング を参照してください。

サンプリングとは

Cloudflare のデータパイプラインは、グローバルネットワーク全体で毎秒 7 億件を超えるイベントを処理します。このデータをすべてのクエリでリアルタイムにすべて処理すると、コストと時間がかかりすぎます。

サンプリングは、すべてのデータポイントではなく、一部のデータを分析する手法です。Cloudflare は Adaptive Bit Rate(ABR)サンプリングを使い、大規模なデータセットでもクエリがすばやく完了するようにしています。

ABR は、データを複数の解像度で保存します。

  • 100% — 全データ(小規模なデータセットで使用)
  • 10% — 10% サンプル(中程度の解像度)
  • 1% — 1% サンプル(低い解像度)

クエリを実行すると、ABR はクエリの複雑さ、指定した期間、取得する行数、現在のシステム負荷に応じて、最適な解像度を動的に選びます。

実行ごとに結果が変わる理由

結果が変わる理由はいくつかあります。

  • 動的な解像度の選択 — システムの状態によって、ABR は実行ごとに異なるサンプリング解像度を選ぶことがあります。
  • 長い期間 — 30 日分を一度にクエリすると負荷が大きく、より積極的なサンプリングがかかります。
  • クエリの複雑さ — フィルターや集計が多い複雑なクエリは、サンプリングのされ方が変わることがあります。
  • システム負荷 — トラフィックが多い時間帯は、リソースを公平に配分するため、より積極的なサンプリングがかかることがあります。

たとえば、同じ 30 日分のクエリを 2 回実行すると、あるときは 3,500 件、別のときは 3,600 件になることがあります。これは、異なるサンプリング解像度が使われたことを示します。

サンプリングされたデータは信頼できますか?

はい。サンプリングされたデータは信頼性が高く、全データから得た洞察と同じくらい確実な洞察を得られます。Cloudflare のサンプリング手法は、データセット全体の本質的な特徴を捉えます。

集計メトリクス(合計、平均、パーセンタイル)はサンプルサイズに基づいて外挿されるため、報告されるメトリクスはデータセット全体を正しく表します。数千行に基づく結果は、全体をよく表している可能性が高いです。

クエリ結果のばらつきを抑えるには

期間を短くクエリする

1 か月分を一度にクエリする代わりに、より短い間隔(日単位または週単位)に分けます。

変更前(ばらつきが大きい):

datetime_geq: "2024-09-01T00:00:00Z"
datetime_lt: "2024-10-01T00:00:00Z"

変更後(より安定):

datetime_geq: "2024-09-01T00:00:00Z"
datetime_lt: "2024-09-02T00:00:00Z"

その後、クライアント側で結果を集計します。短い時間窓は、積極的なサンプリングのしきい値に達しにくいです。

集計済みデータセットを使う

生の adaptive データセットよりも、Groups 接尾辞のノードを優先してください。集計済みデータは事前処理されており、サンプリングのばらつきを受けにくいです。

たとえば、生のイベントデータではなく httpRequestsAdaptiveGroups を使います。

明示的に並べ替える

結果の並びを安定させるため、クエリには必ず orderBy を含めます。

orderBy: [datetime_ASC]

信頼区間を使う

adaptive データセットでは、信頼区間 を取得してデータの品質を把握し、サンプリングを確認します。

confidence(level: 0.95) {
  count {
    estimate
    lower
    upper
    sampleSize
  }
}

sampleSize が大きいほど、結果の信頼性は高くなります。

早見表

問題 対策
実行ごとに結果が変わる 期間を短くクエリする(月単位ではなく日単位または週単位)
大きなクエリで積極的なサンプリング クエリを短い時間間隔に分け、クライアント側で集計する
並びを安定させたい すべてのクエリに orderBy 句を追加する
データの品質を確認したい confidence 区間を取得し、サンプルサイズと精度を確認する
生の adaptive データを使っている 集計済みデータセット(Groups 接尾辞のノード)に切り替える

関連リソース

役に立ちましたか?