跳到主要内容
最后 更新

PERCENTILE_APPROX_ARRAY

描述

PERCENTILE_APPROX_ARRAY 在一次聚合中计算多个近似百分位数。函数为输入值构建一个 T-Digest,并基于这个共享状态计算所有指定的百分位数,因此比针对每个百分位数分别调用 PERCENTILE_APPROX 更高效。

备注

自 4.2.0 版本开始支持该函数。

语法

PERCENTILE_APPROX_ARRAY(<col>, <quantiles> [, <compression>])

参数

参数说明
<col>需要计算百分位数的数值表达式,输入值会转换为 DOUBLE。函数忽略 NULL 值。
<quantiles>常量 ARRAY<DOUBLE>。每个元素都必须是有限值、非 NULL 且位于 [0.0, 1.0] 范围内。结果顺序与数组一致,并保留重复的百分位点。允许传入空数组。
<compression>可选的常量 DOUBLE,取值范围为 [2048, 10000]。值越大通常精度越高,但内存占用也越大。默认值为 10000;非有限值或超出有效范围时也使用 10000

返回值

返回 ARRAY<DOUBLE>,其中每个元素对应 <quantiles> 中相同位置的近似百分位数。当 <quantiles> 为空,或组内没有非 NULL 输入值时,返回空数组。百分位点超出范围或 <quantiles> 包含 NULL 元素时返回错误。

举例

CREATE TABLE percentile_approx_array_example (
id INT,
value DOUBLE NULL
) DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");

INSERT INTO percentile_approx_array_example VALUES
(1, 1.0), (2, 2.0), (3, 3.0), (4, NULL),
(5, 10.0), (6, 20.0), (7, 30.0), (8, 100.0);

使用默认 compression 计算多个近似百分位数:

SELECT percentile_approx_array(value, [0.0, 0.25, 0.5, 0.75, 1.0]) AS percentiles
FROM percentile_approx_array_example;
+--------------------------+
| percentiles |
+--------------------------+
| [1, 2.25, 10, 27.5, 100] |
+--------------------------+

显式指定 compression:

SELECT percentile_approx_array(value, [0.25, 0.5, 0.75], 2048) AS percentiles
FROM percentile_approx_array_example;
+------------------+
| percentiles |
+------------------+
| [2.25, 10, 27.5] |
+------------------+

输入值全部为 NULL 时返回空数组:

SELECT percentile_approx_array(CAST(NULL AS DOUBLE), [0.0, 0.5, 1.0]) AS percentiles
FROM percentile_approx_array_example;
+-------------+
| percentiles |
+-------------+
| [] |
+-------------+

百分位数组为空时也返回空数组:

SELECT percentile_approx_array(value, []) AS percentiles
FROM percentile_approx_array_example;
+-------------+
| percentiles |
+-------------+
| [] |
+-------------+