よくある質問への回答をまとめます。
いいえ。インデックス値を大量に追加すると、欠点もあります。トレードオフは、多数のインデックスをまたいで読むのが遅くなることです。
実際には、ABR の仕組みにより、1 つのクエリで多数のインデックスから読むと、解像度の低いデータになります。使えないほど低くなることもあります。
一方、データの読み方に合った良いインデックスを選ぶと、クエリは速くなり、より高い解像度の結果が得られます。
インデックスフィールドに複数の値を連結できます。ユーザー ID とホスト名でインデックスを付けたい場合は、インデックスフィールドに "$userID:$hostname" のように書き込めます。
クエリのパターンによっては、同じデータセットを別のインデックスで書き出す方がよいこともあります。「二重書き込み」を避けるべきだという誤解はよくあります。
サンプリングがあるため、データを複数回書き込むコストは比較的低く抑えられます。一方、非効率な読み取りは、サンプリングによって費用が大きくなったり、結果の質が下がったりします。
_sample_interval フィールドを使えます。ただし、この値だけでは結果が正確かどうかはわかりません。
読み取り時にサンプリングされているときは、サンプル間隔が 10 の累乗の倍数になります。たとえば 20 や 700 です。読み取り時にサンプリングが始まる明確な閾値はありません。実際には、より長い期間(またはより多くのインデックス値)を読むと、サンプル間隔は大きくなります。
サンプリングは、主にインデックスの選択に加え、クエリする時間範囲や読むインデックス数などの要因に基づきます。より大きなインデックスを長い期間にわたって読み、そのインデックス内の比較的小さいサブグループに絞り込んでいる場合、サンプリングによってそのサブグループが含まれないことがあります。
そのサブグループの正確な結果が必要な場合は、そのフィールドをインデックスに追加してください(複数の値でインデックスを付けたい場合は? を参照)。
サンプリングされたデータは、特に慎重に選んだインデックスを使っている場合、信頼性が高いです。
現状では、ABR クエリが返す結果が一定の誤差範囲内であることを証明するのは難しいです。目安として、count() で読み取った行数を確認してください。画像のピクセル数のようなものです。読み取った行数が多いほど、結果は正確になります。(逆に、_sample_interval フィールドだけでは、結果が正確かどうかはあまりわかりません。)1 行や 2 行だけから外挿している場合、代表的な結果にはなりにくいです。数千行から外挿している場合、結果はかなり正確である可能性が高いです。
近い将来、クエリ結果とあわせて 誤差の幅 ↗ を公開し、結果の正確さを具体的に確認できるようにする予定です。
公平なサンプリングは、グループ間の差をならすためと、特定のインデックスへの大きなトラフィックスパイクを扱うための両方にあります。均等化は数秒ごとに行われます。ごく短い時間に多くのイベントを書き込むと、書き込み時にサンプリングされる想定です。特定のインデックスのサンプル間隔は、その時点の書き込みレートに応じて、瞬間ごとに変わります。
サンプリングが始まる固定のルールはありません。
グローバル CDN のようにネットワーク全体に負荷を分散するワークロードでは、サンプリングが目立ち始めるまでに、インデックス値あたりおおよそ毎秒 100 データポイントが必要でした。
ワークロードと Workers Analytics Engine の使い方によっては、この閾値より高い、または低いところでサンプリングが始まることがあります。たとえば、1 回の Worker 実行から多くのデータポイントを書き出す場合、データがサンプリングされやすくなります。