跳到主要内容

percentile_approx:计算近似百分位数

速查结论

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

语法

percentile_approx(col, percentage [, accuracy])

参数说明

参数说明
col数值列或 ANSI 间隔列,要计算近似百分位数的目标列
percentage一个介于 0.0 和 1.0 之间的数值,或由这样的数值组成的数组
accuracy可选正数数值字面量(默认值:10000)。accuracy 值越高,近似精度越好,1.0/accuracy 是近似的相对误差。更高的 accuracy 会消耗更多内存

示例

> SELECT percentile_approx(col, array(0.5, 0.4, 0.1), 100) FROM VALUES (0), (1), (2), (10) AS tab(col);
[1,1,0]
> SELECT percentile_approx(col, 0.5, 100) FROM VALUES (0), (6), (7), (9), (10) AS tab(col);
7
> SELECT percentile_approx(col, 0.5, 100) FROM VALUES (INTERVAL '0' MONTH), (INTERVAL '1' MONTH), (INTERVAL '2' MONTH), (INTERVAL '10' MONTH) AS tab(col);
0-1
> SELECT percentile_approx(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]

常见报错与避坑指南

  • accuracy 调优:默认 accuracy 为 10000,相对误差约为 0.01%。如果数据量极大且对精度要求不高,可以降低 accuracy(如 100)以减少内存消耗;若需要更高精度,可以增大该值。
  • percentage 范围校验:percentage 的值必须在 0.0 到 1.0 之间(含边界),超出范围会直接报错。
  • 与 percentile 的区别percentile_approx() 使用近似算法(基于 T-Digest),牺牲少量精度换取更好的性能和更低的内存占用。对精确性有严格要求的场景请使用 percentile()

Since: 2.1.0

📱关注公众号

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

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

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

交流微信二维码

你可能还想看