分位摘要函數

Presto 實作了兩種演算法來估算基於排名的度量,分位摘要T-摘要。 一般來說,T-摘要具有更好的效能,而 Presto 的分位摘要實作則支援更多數值類型。T-摘要在尾部的精確度較高,通常顯著較好,但根據使用的壓縮因子,在中位數的精確度可能會較差。相比之下,分位摘要支援最大排名誤差,這保證了沿分位數的精確度相對均勻。分位摘要也被正式證明支援無損合併,而 T-摘要則不是(但確實憑經驗證明了無損合併)。

Presto 使用分位摘要資料結構實作了 approx_percentile 函數。底層資料結構 qdigest 在 Presto 中作為資料類型公開,並且可以獨立於 approx_percentile 建立、查詢和儲存。

資料結構

分位摘要是一種資料草圖,用於儲存近似的百分位資訊。此資料結構的 Presto 類型稱為 qdigest,它採用一個參數,該參數必須是 bigintdoublereal 中的其中一個,這些參數表示 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)

傳回一個 qdigest,其分配已按 scale_factor 指定的因數進行縮放。

values_at_quantiles(qdigest(T), quantiles) -> T()

傳回近似的百分位數值作為陣列,給定輸入分位摘要和 0 到 1 之間的值陣列,這些值代表要傳回的分位數。

qdigest_agg(x) -> qdigest<[與 x 相同]>()

傳回由 x 的所有輸入值組成的 qdigest

qdigest_agg(x, w) -> qdigest<[與 x 相同]>()

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

qdigest_agg(x, w, accuracy) -> qdigest<[與 x 相同]>()

使用每個項目的權重 w 和最大誤差 accuracy,傳回由 x 的所有輸入值組成的 qdigestaccuracy 必須是個大於零且小於一的值,且對於所有輸入列必須為常數。