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

QUANTILE_UNION

Описание​

Функция QUANTILE_UNION используется для объединения нескольких промежуточных результатов вычисления квантилей. Обычно эта функция используется вместе с QUANTILE_STATE и особенно подходит для сценариев, требующих многоэтапного вычисления квантилей.

Синтаксис​

QUANTILE_UNION(<query_state>)

Параметры​

ПараметрОписание
<query_state>Данные для агрегации. Поддерживается тип QuantileState.

Возвращаемое значение​

Возвращает состояние агрегации типа QuantileState для дальнейшего вычисления квантилей. Возвращает NULL, если в группе нет допустимых данных.

Пример​

-- setup
CREATE TABLE response_times (
request_id INT,
response_time DOUBLE,
region STRING
) DUPLICATE KEY(request_id)
DISTRIBUTED BY HASH(request_id) BUCKETS AUTO
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);
INSERT INTO response_times VALUES
(1, 10.5, 'east'),
(2, 15.2, 'east'),
(3, 20.1, 'west'),
(4, 25.8, 'east'),
(5, 30.3, 'west'),
(6, 35.7, 'east'),
(7, 40.2, 'west'),
(8, 45.9, 'east'),
(9, 50.4, 'west'),
(10, 100.6, 'east');
SELECT 
region,
QUANTILE_PERCENT(
QUANTILE_UNION(
TO_QUANTILE_STATE(response_time, 2048)
),
0.5
) AS median_response_time
FROM response_times
GROUP BY region;

Вычисление 50-го процентиля времени отклика по регионам.

+--------+----------------------+
| region | median_response_time |
+--------+----------------------+
| west | 35.25 |
| east | 30.75 |
+--------+----------------------+
SELECT QUANTILE_UNION(TO_QUANTILE_STATE(response_time, 2048))
FROM response_times where response_time is null;

Возвращает NULL, если в группе нет допустимых данных.

+--------------------------------------------------------+
| QUANTILE_UNION(TO_QUANTILE_STATE(response_time, 2048)) |
+--------------------------------------------------------+
| NULL |
+--------------------------------------------------------+