跳到主要内容

approx_percentile:近似百分位数

速查结论

approx_percentile(col, percentage [, accuracy]) 是 Spark SQL 中用于计算数值列近似百分位数的聚合函数。

语法

approx_percentile(col, percentage [, accuracy])

参数说明

参数说明
col数值或 ANSI 间隔列
percentage介于 0.0 到 1.0 之间的数值,或由这些数值组成的数组
accuracy可选,正数值,控制近似精度(默认值:10000)。值越高精度越好,1.0/accuracy 为近似的相对误差

approx_percentile(col, percentage [, accuracy]) - 返回数值或 ANSI 间隔列 col 的近似百分位数,这是 col 中排序值(从最小到最大排序)的最小值,使得不超过 percentage 指定的比例的 col 值小于或等于该值。percentage 的值必须在 0.0 和 1.0 之间。当 percentage 是一个数组时,percentage 数组中的每个值都必须在 0.0 和 1.0 之间。在这种情况下,返回给定 percentage 数组中列 col 的近似百分位数数组。

示例

> SELECT approx_percentile(col, array(0.5, 0.4, 0.1), 100) FROM VALUES (0), (1), (2), (10) AS tab(col);
[1,1,0]
> SELECT approx_percentile(col, 0.5, 100) FROM VALUES (0), (6), (7), (9), (10) AS tab(col);
7
> SELECT approx_percentile(col, 0.5, 100) FROM VALUES (INTERVAL '0' MONTH), (INTERVAL '1' MONTH), (INTERVAL '2' MONTH), (INTERVAL '10' MONTH) AS tab(col);
0-1
> SELECT approx_percentile(col, array(0.5, 0.7), 100) FROM VALUES (INTERVAL '0' SECOND), (INTERVAL '1' SECOND), (INTERVAL '2' SECOND), (INTERVAL '10' SECOND) AS tab(col);
[0 00:00:01.000000000,0 00:00:02.000000000]

常见报错与避坑指南

  • percentage 范围检查percentage 必须在 [0.0, 1.0] 区间内,超出范围会直接报错。例如 0.5 表示中位数,0.95 表示 P95。
  • accuracy 参数的取舍accuracy 越高,结果越精确,但内存开销越大。默认值 10000 对于大多数场景已经足够。处理极大规模数据时,降低 accuracy 可以显著减少内存消耗。

Since: 2.1.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看