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

quantileGK

quantileGK

Введена в: v23.4

Вычисляет квантиль числовой последовательности данных с использованием алгоритма Гринвальда–Ханны (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%. Существует компромисс между точностью вычисляемых квантилей и вычислительной сложностью алгоритма. Более высокая точность требует больше памяти и вычислительных ресурсов, тогда как меньшая точность позволяет выполнять вычисления быстрее и с меньшим потреблением памяти, но с несколько меньшей точностью. UInt*
  • level — Необязательный параметр. Уровень квантиля. Константное число с плавающей запятой от 0 до 1. Значение по умолчанию: 0.5. При level=0.5 функция вычисляет медиану. Float*

Аргументы

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

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

Возвращает квантиль указанного уровня и точности. Float64 или Date или DateTime

Примеры

Вычисление квантиля с разными уровнями точности

SELECT quantileGK(1, 0.25)(number + 1) FROM numbers(1000);
┌─quantileGK(1, 0.25)(plus(number, 1))─┐
│                                    1 │
└──────────────────────────────────────┘

Квантиль с более высокой точностью

SELECT quantileGK(100, 0.25)(number + 1) FROM numbers(1000);
┌─quantileGK(100, 0.25)(plus(number, 1))─┐
│                                    251 │
└────────────────────────────────────────┘

См. также