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_quantile
和upper_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
和壓縮因子compression
。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。