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

quantileGK

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

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

Синтаксис

quantileGK(accuracy, level)(expr)

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

Аргументы

  • 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 │
└─────────────────────────────────────────┘

См. также