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

quantileGK

Вычисляет квантили числовой последовательности данных с использованием алгоритма Гринвальда-Ханны. Алгоритм Гринвальда-Ханны используется для вычисления квантилей в потоке данных с высокой эффективностью. Он был представлен Майклом Гринвальдом и Сантивом Ханной в 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 │
└─────────────────────────────────────────┘

Смотрите также