Перейти к основному содержанию
Перейти к основному содержанию

quantileTimingWeighted

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

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

При использовании нескольких функций quantile* с разными уровнями в одном запросе их внутренние состояния не объединяются (то есть запрос работает менее эффективно, чем мог бы). В этом случае используйте функцию quantiles.

Синтаксис

quantileTimingWeighted(level)(expr, weight)

Псевдоним: medianTimingWeighted.

Аргументы

  • level — Уровень квантиля. Необязательный параметр. Константное число с плавающей запятой от 0 до 1. Рекомендуем использовать значение level в диапазоне [0.01, 0.99]. Значение по умолчанию: 0.5. При level=0.5 функция вычисляет медиану.

  • exprВыражение над значениями столбца, возвращающее число типа Float*.

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

Точность

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

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

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

Примечание

Для вычисления квантилей времени загрузки страниц эта функция более эффективна и точна, чем quantile.

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

  • Квантиль заданного уровня.

Тип: Float32.

Примечание

Если в функцию не переданы значения (при использовании quantileTimingIf), возвращается NaN. Это сделано для различения таких случаев от случаев, когда результатом является ноль. См. раздел ORDER BY для примечаний по сортировке значений NaN.

Пример

Входная таблица:

┌─response_time─┬─weight─┐
│            68 │      1 │
│           104 │      2 │
│           112 │      3 │
│           126 │      2 │
│           138 │      1 │
│           162 │      1 │
└───────────────┴────────┘

Запрос:

SELECT quantileTimingWeighted(response_time, weight) FROM t

Результат:

┌─quantileTimingWeighted(response_time, weight)─┐
│                                           112 │
└───────────────────────────────────────────────┘

quantilesTimingWeighted

То же, что и quantileTimingWeighted, но принимает несколько параметров, задающих уровни квантилей, и возвращает Array, заполненный значениями соответствующих квантилей.

Пример

Входная таблица:

┌─response_time─┬─weight─┐
│            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]                                                 │
└───────────────────────────────────────────────────────────┘

См. также