T-Digest関数

Prestoは、ランクベースのメトリクスを推定するための2つのアルゴリズム、quantile digestT-digestを実装しています。T-digestは一般にパフォーマンスが優れていますが、Prestoのquantile digestの実装はより多くの数値型をサポートしています。T-digestは、テール部分でより優れた精度(多くの場合、大幅に優れている)を持っていますが、使用される圧縮率によっては中央値での精度が低くなる可能性があります。比較すると、quantile digestは最大ランク誤差をサポートしており、これにより分位点に沿った精度の相対的な均一性が保証されます。Quantile digestはロスレスマージをサポートすることが正式に証明されていますが、T-digestはそうではありません(ただし、経験的にロスレスマージを実証しています)。

T-digestはTed Dunningによって開発されました。

データ構造

T-digestは、近似パーセンタイル情報を格納するデータスケッチです。このデータ構造のPresto型はtdigestと呼ばれ、tdigestによって取り込まれる数値のセットを表すdouble型のパラメータを受け入れます。他の数値型は、将来のリリースで追加される可能性があります。

T-digestは精度を損なうことなくマージでき、ストレージと取得のためにVARBINARYとの間でキャストできます。

関数

merge(tdigest<double>) -> tdigest<double>()

すべての入力tdigestを単一のtdigestにマージします。

value_at_quantile(tdigest<double>, quantile) -> double()

0から1の間の数値quantileを指定して、T-digestから近似パーセンタイル値を返します。

quantile_at_value(tdigest<double>, value) -> double()

入力valueを指定して、T-digestから0から1の間の近似分位数値を返します。T-digestが空の場合、または入力値がダイジェストの範囲外にある場合は、Nullが返されます。

scale_tdigest(tdigest<double>, scale_factor) -> tdigest<double>()

scale_factorで指定された係数で分布がスケーリングされたtdigestを返します。

values_at_quantiles(tdigest<double>, quantiles) -> array<double>()

入力T-digestと、返される分位数を表す0から1の間の値の配列を指定して、近似パーセンタイル値を配列として返します。

trimmed_mean(tdigest<double>, lower_quantile, upper_quantile) -> double()

指定された分位数境界の外側の分布部分を除外して、平均の推定値を返します。lower_quantileupper_quantileの両方は0から1の間でなければなりません。

tdigest_agg(x) -> tdigest<double>()

すべての入力値xで構成されるtdigestを返します。

tdigest_agg(x, w) -> tdigest<double>()

項目ごとの重みwを使用して、すべての入力値xで構成されるtdigestを返します。

tdigest_agg(x, w, compression) -> tdigest<double>()

tdigestを返します。これは、項目ごとの重み w と圧縮係数 compression を使用して、x のすべての入力値から構成されます。compression はゼロより大きい値である必要があり、すべての入力行で一定である必要があります。

圧縮係数500は、通常、良好な精度とパフォーマンスが得られる、良い開始点です。

destructure_tdigest(tdigest<double>) -> row<centroid_means array<double>, centroid_weights array<integer>, compression double, min double, max double, sum double, count bigint>()

コンポーネント部品の形式で tdigest データ構造を表す行を返します。これには、セントロイドの平均と重みの配列、圧縮係数、およびダイジェスト内の値の最大値、最小値、合計、カウントが含まれます。

construct_tdigest(centroid_means array<double>, centroid_weights array<double>, compression double, min double, max double, sum double, count bigint) -> tdigest<double>()

コンポーネント部品(セントロイドの平均と重みの配列、圧縮係数、およびダイジェスト内の値の最大値、最小値、合計、カウント)から tdigest を返します。これは、destructure_tdigest の逆です。

この関数は、外部で作成された tdigest を Presto に追加する場合に特に役立ちます。

merge_tdigest(array<tdigest<double>>) -> tdigest<double>()
配列内の T-ダイジェストの マージされた ``tdigest`` を返します これは()
集計関数 ``merge`` に対する スカラー補完です()