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

quantileGK

Вычисляет квантиль числовой последовательности данных с использованием алгоритма Гринвальда–Ханны (Greenwald-Khanna). Алгоритм Гринвальда–Ханны используется для высокоэффективного вычисления квантилей на потоке данных. Он был предложен Майклом Гринвальдом (Michael Greenwald) и Сандживом Ханной (Sanjeev Khanna) в 2001 году. Широко используется в базах данных и системах обработки больших данных, где необходимо вычислять точные значения квантилей на большом потоке данных в режиме реального времени. Алгоритм очень эффективен, требуя лишь O(log n) памяти и O(log log n) времени на элемент (где n — размер входных данных). Он также обладает высокой точностью, обеспечивая приближённое значение квантиля с высокой вероятностью.

quantileGK отличается от других функций вычисления квантилей в ClickHouse, поскольку позволяет пользователю управлять точностью приблизительного результата.

Синтаксис

quantileGK(accuracy, level)(expr)

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

Аргументы

  • accuracy — Точность квантиля. Константное положительное целое число. Чем больше значение, тем меньше погрешность. Например, если аргумент accuracy равен 100, вычисленный квантиль с высокой вероятностью будет иметь погрешность не более 1%. Существует компромисс между точностью вычисляемых квантилей и вычислительной сложностью алгоритма. Более высокая точность требует больше памяти и вычислительных ресурсов, тогда как меньшая точность позволяет выполнять вычисления быстрее и с меньшим потреблением памяти, но с несколько меньшей точностью.

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

  • expr — Выражение над значениями столбца, результатом которого являются числовые типы данных, Date или DateTime.

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

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

Тип:

  • Float64 для числового типа данных.
  • Date, если входные значения имеют тип Date.
  • DateTime, если входные значения имеют тип DateTime.

Пример

SELECT quantileGK(1, 0.25)(number + 1)
FROM numbers(1000)

┌─quantileGK(1, 0.25)(plus(number, 1))─┐
│                                    1 │
└──────────────────────────────────────┘

SELECT quantileGK(10, 0.25)(number + 1)
FROM numbers(1000)

┌─quantileGK(10, 0.25)(plus(number, 1))─┐
│                                   156 │
└───────────────────────────────────────┘

SELECT quantileGK(100, 0.25)(number + 1)
FROM numbers(1000)

┌─quantileGK(100, 0.25)(plus(number, 1))─┐
│                                    251 │
└────────────────────────────────────────┘

SELECT quantileGK(1000, 0.25)(number + 1)
FROM numbers(1000)

┌─quantileGK(1000, 0.25)(plus(number, 1))─┐
│                                     249 │
└─────────────────────────────────────────┘

См. также

  • [median]/sql-reference/aggregate-functions/reference/median
  • quantiles