T-Digest 函數

Presto 實作了兩種演算法來估計基於排序的指標,分位數摘要T-digest。一般而言,T-digest 具有 較佳的效能,而 Presto 的分位數摘要實作則支援更多數值類型。T-digest 在尾部的準確性較佳,通常顯著較佳,但在中位數的準確性可能較差,具體取決於所使用的壓縮因子。相比之下,分位數摘要支援最大排序誤差,這保證了沿分位數的相對均勻精度。分位數摘要也經過正式證明支援無損合併,而 T-digest 則沒有(但確實透過實驗證明了無損合併)。

T-digest 由 Ted Dunning 開發。

資料結構

T-digest 是一種資料草圖,可儲存近似百分位數資訊。此資料結構的 Presto 類型稱為 tdigest,它接受類型為 double 的參數,該參數表示 tdigest 要攝取的數字集合。未來版本可能會新增其他數值類型。

T-digest 可以合併而不會失去精確度,並且為了儲存和擷取,可以從 VARBINARY 轉換為/自 VARBINARY

函數

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

將所有輸入的 tdigest 合併為單一的 tdigest

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

從 T-digest 傳回近似百分位數值,給定介於 0 和 1 之間的數字 quantile

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

從 T-digest 傳回介於 0 和 1 之間的近似分位數數字,給定輸入的 value。如果 T-digest 為空或輸入值超出摘要的範圍,則傳回 Null。

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

傳回 tdigest,其分配已按 scale_factor 指定的因子進行縮放。

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>()

傳回由 x 的所有輸入值組成的 tdigest,並使用每個項目的權重 w

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

傳回由 x 的所有輸入值組成的 tdigest,並使用每個項目的權重 w 和壓縮因子 compressioncompression 必須是個大於零的值,並且對於所有輸入列都必須是常數。

壓縮因子 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-digest 的合併 ``tdigest`` 這是()
彙總函式 ``merge`` 的純量互補。()