Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

quantilesTimingWeighted

quantilesTimingWeighted

Добавленный в: v1.1.0

Вычисляет несколько квантилей последовательности числовых данных одновременно на разных уровнях с заданной точностью, с учётом веса каждого элемента последовательности.

Эта функция эквивалентна quantileTimingWeighted, но позволяет вычислять несколько уровней квантилей за один проход, что эффективнее, чем вызывать отдельные функции для каждого квантиля.

Результат детерминирован (он не зависит от порядка обработки запроса). Функция оптимизирована для работы с последовательностями, описывающими такие распределения, как время загрузки веб-страниц или время ответа backend-соединения.

Точность

Вычисление выполняется точно, если:

  • Общее количество значений не превышает 5670.
  • Общее количество значений превышает 5670, но время загрузки страницы меньше 1024 мс.

В противном случае результат вычисления округляется до ближайшего значения, кратного 16 мс.

Синтаксис

quantilesTimingWeighted(level1, level2, ...)(expr, weight)

Параметры

  • level — Уровни квантилей. Одно или несколько константных чисел с плавающей запятой в диапазоне от 0 до 1. Рекомендуется использовать значения level в диапазоне [0.01, 0.99]. Float*

Аргументы

  • expr — Выражение над значениями столбца, возвращающее значения числовых типов данных, Date или DateTime. Если в функцию передаются отрицательные значения, поведение не определено. Если значение превышает 30 000 (время загрузки страницы более 30 секунд), оно считается равным 30 000. (U)Int* или Float* или Date или DateTime
  • weight — Столбец с весами элементов последовательности. Вес — это число вхождений значения. UInt*

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

Массив квантилей указанных уровней в том же порядке, в котором эти уровни были заданы. Array(Float32)

Примеры

Вычисление нескольких взвешенных квантилей времени

CREATE TABLE t (response_time UInt32, weight UInt32) ENGINE = Memory;
INSERT INTO t VALUES (68, 1), (104, 2), (112, 3), (126, 2), (138, 1), (162, 1);

SELECT quantilesTimingWeighted(0.5, 0.99)(response_time, weight) FROM t;
┌─quantilesTimingWeighted(0.5, 0.99)(response_time, weight)─┐
│ [112,162]                                                 │
└───────────────────────────────────────────────────────────┘

См. также

Navigation