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
转换,以便存储和检索。
函数¶
- 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>()¶
返回一个
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 特别有用。