分位ダイジェスト関数¶
Prestoは、ランクベースのメトリックを推定するための2つのアルゴリズム、分位ダイジェストとT-ダイジェストを実装しています。T-ダイジェストは、一般的にパフォーマンスが優れていますが、Prestoの実装では分位ダイジェストの方がより多くの数値型をサポートしています。T-ダイジェストは、テール部での精度が優れており、多くの場合劇的に優れていますが、使用される圧縮係数によっては、中央値での精度が劣る場合があります。一方、分位ダイジェストは、最大ランク誤差をサポートしており、分位数に沿った精度の相対的な均一性を保証します。また、分位ダイジェストは、損失のないマージをサポートすることが正式に証明されていますが、T-ダイジェストはそうではありません(ただし、経験的には損失のないマージを示しています)。
Prestoは、分位ダイジェストデータ構造を使用してapprox_percentile
関数を実装しています。基礎となるデータ構造であるqdigestは、Prestoのデータ型として公開されており、approx_percentile
とは別に作成、クエリ、保存することができます。
データ構造¶
分位ダイジェストは、近似パーセンタイル情報を格納するデータスケッチです。このデータ構造のPresto型はqdigest
と呼ばれ、bigint
、double
、またはreal
のいずれかであるパラメータを取ります。これらは、qdigest
によって取り込まれる可能性のある数値の集合を表します。これらは精度を失うことなくマージすることができ、格納と取得のためにVARBINARY
にキャストすることができます。
関数¶
- merge(qdigest) -> qdigest()
すべての入力
qdigest
を単一のqdigest
にマージします。
- value_at_quantile(qdigest(T), quantile) -> T()¶
0から1の間の数値
quantile
を指定すると、分位ダイジェストから近似パーセンタイル値を返します。
- quantile_at_value(qdigest(T), T) -> quantile()¶
入力値を指定すると、分位ダイジェストから0から1の間の近似
quantile
数を返します。分位ダイジェストが空の場合、または入力値が分位ダイジェストの範囲外の場合は、nullが返されます。
- scale_qdigest(qdigest(T), scale_factor) -> qdigest(T)()¶
scale_factor
で指定された係数で分布がスケールされたqdigest
を返します。
- values_at_quantiles(qdigest(T), quantiles) -> T()¶
入力分位ダイジェストと、返す分位数を表す0から1の間の値の配列を指定すると、近似パーセンタイル値を配列として返します。
- qdigest_agg(x) -> qdigest<[xと同じ]>()¶
x
のすべての入力値で構成されるqdigest
を返します。
- qdigest_agg(x, w) -> qdigest<[xと同じ]>()¶
項目ごとの重み
w
を使用して、x
のすべての入力値で構成されるqdigest
を返します。
- qdigest_agg(x, w, accuracy) -> qdigest<[xと同じ]>()¶
入力値 `x` のすべてと、項目ごとの重み `w`、および最大誤差 `accuracy` を使用して構成される `qdigest` を返します。`accuracy` は 0 より大きく 1 より小さい値でなければならず、すべての入力行で一定でなければなりません。