PERCENTILE_APPROX
更新时间:2025-10-16
描述
PERCENTILE_APPROX 函数用于计算近似百分位数,主要用于大数据集的场景。与 PERCENTILE 函数相比,它具有以下特点:
- 内存效率:使用固定大小的内存,即使在处理低基数列(不同元素数很少)时也能保持较低的内存消耗
- 性能优势:适合处理低基数大规模数据集,计算速度快
- 精度可调:通过 compression 参数可以在精度和性能之间做平衡
语法
SQL
1PERCENTILE_APPROX(<col>, <p> [, <compression>])
参数
| 参数 | 说明 |
|---|---|
<col> |
需要计算百分位数的列 |
<p> |
百分位数值,取值范围 [0.0, 1.0],例如 0.99 表示 99 分位数 |
<compression> |
可选参数,压缩度,取值范围 [2048, 10000]。值越大,精度越高,但内存消耗也越大。如果不指定或超出范围,则使用 10000。 |
返回值
返回一个 DOUBLE 类型的值,表示计算得到的近似百分位数。
举例
SQL
1-- 创建示例表
2CREATE TABLE response_times (
3 request_id INT,
4 response_time DECIMAL(10, 2)
5) DUPLICATE KEY(`request_id`)
6DISTRIBUTED BY HASH(`request_id`) BUCKETS AUTO
7PROPERTIES (
8 "replication_allocation" = "tag.location.default: 1"
9);
10
11-- 插入示例数据
12INSERT INTO response_times VALUES
13(1, 10.5),
14(2, 15.2),
15(3, 20.1),
16(4, 25.8),
17(5, 30.3),
18(6, 35.7),
19(7, 40.2),
20(8, 45.9),
21(9, 50.4),
22(10, 100.6);
23
24-- 使用不同压缩度计算 99 分位数
25SELECT
26 percentile_approx(response_time, 0.99) as p99_default, -- 默认压缩度
27 percentile_approx(response_time, 0.99, 2048) as p99_fast, -- 低压缩度,更快
28 percentile_approx(response_time, 0.99, 10000) as p99_accurate -- 高压缩度,更精确
29FROM response_times;
Text
1+-------------------+-------------------+-------------------+
2| p99_default | p99_fast | p99_accurate |
3+-------------------+-------------------+-------------------+
4| 100.5999984741211 | 100.5999984741211 | 100.5999984741211 |
5+-------------------+-------------------+-------------------+
