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真题
