估算百分位值¶
Snowflake 使用改进版的 T-Digest 算法,能以节省空间和时间的方式估算数据集中的近似百分位值。
本主题内容:
概述¶
对于 Dunning 和 Ertl 发表的 T-Digest 算法论文 (https://github.com/tdunning/t-digest/tree/master/docs/t-digest-paper),Snowflake 提供了改进版的实现形式。它是通过 APPROX_PERCENTILE 函数系列实现的。
根据记载,该算法具有恒定的相对误差。请注意,该算法有大量的经验支持,但未经严格证明其能够保证精度。
SQL 函数¶
提供以下 聚合函数,以使用 T-Digest 来估算近似百分位值:
APPROX_PERCENTILE:返回所需百分位值的近似值。
APPROX_PERCENTILE_ACCUMULATE:跳过最后的估算步骤,在聚合结束时返回中间 T-Digest 状态。
APPROX_PERCENTILE_COMBINE:将多个输入状态组合(即合并)为单个输出状态。
APPROX_PERCENTILE_ESTIMATE:估算由 APPROX_PERCENTILE_ACCUMULATE 或 APPROX_PERCENTILE_COMBINE 产生的 T-Digest 状态的百分位值。
实施细节¶
无论输入的大小如何,估算都使用恒定的空间量。
T-Digest 状态与百分位值无关。这样一来,计算一次 T-Digest 状态便能查询多个百分位值的状态。