Перейти к содержимому
Последнее обновление

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. Недопустимые уровни перцентилей и элементы NULL в <quantiles> приводят к ошибке.

Пример​

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);

Вычисление нескольких приближённых перцентилей со значением параметра сжатия по умолчанию:

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] |
+--------------------------+

Явное указание параметра сжатия:

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 |
+-------------+
| [] |
+-------------+