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

quantileGK

Добавленный в: v23.4.0 Вычисляет quantile числовой последовательности с использованием алгоритма Greenwald-Khanna. Алгоритм Greenwald-Khanna используется для очень эффективного вычисления квантилей в потоке данных. Он был представлен Майклом Гринвальдом и Сандживом Ханной в 2001 году. Он широко используется в базах данных и системах обработки больших данных, где требуется вычислять точные квантили на больших потоках данных в реальном времени. Алгоритм очень эффективен: для каждого элемента ему требуется всего O(log n) памяти и O(log log n) времени (где n — размер входных данных). При этом он обеспечивает высокую точность, выдавая приближённое значение квантиля с высокой вероятностью. quantileGK отличается от других функций вычисления квантилей в ClickHouse тем, что позволяет пользователю управлять точностью приближённого результата. Синтаксис
quantileGK(accuracy, level)(expr)
Псевдонимы: medianGK Параметры
  • accuracy — Точность квантиля. Константное положительное целое число. Чем больше значение точности, тем меньше ошибка. Например, если аргумент accuracy задан как 100, вычисленный квантиль с высокой вероятностью будет иметь ошибку не более 1%. Между точностью вычисляемых квантилей и вычислительной сложностью алгоритма существует компромисс. Более высокое значение точности требует больше памяти и вычислительных ресурсов для точного вычисления квантиля, тогда как меньшее значение accuracy позволяет выполнять вычисления быстрее и с меньшими затратами памяти, но с несколько меньшей точностью. UInt*
  • level — Необязательный. Уровень квантиля. Константное число с плавающей точкой от 0 до 1. Значение по умолчанию: 0.5. При level=0.5 функция вычисляет медиану. Float*
Аргументы
  • expr — Выражение над значениями столбца, дающее значения числовых типов данных, Date или DateTime. (U)Int* или Float* или Decimal* или Date или DateTime
Возвращаемое значение Возвращает квантиль с указанными уровнем и точностью. Float64 или Date или DateTime Примеры Вычисление квантиля с разными значениями точности
Query
SELECT quantileGK(1, 0.25)(number + 1) FROM numbers(1000);
Response
┌─quantileGK(1, 0.25)(plus(number, 1))─┐
│                                    1 │
└──────────────────────────────────────┘
Квантиль с более высокой точностью
Query
SELECT quantileGK(100, 0.25)(number + 1) FROM numbers(1000);
Response
┌─quantileGK(100, 0.25)(plus(number, 1))─┐
│                                    251 │
└────────────────────────────────────────┘
См. также
Последнее изменение 10 июня 2026 г.