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илиDateTime64.(U)Int*илиInt128илиUInt128илиInt256илиUInt256илиFloat*илиDecimal*илиDateилиDateTimeилиDateTime64
Возвращаемое значение
Возвращает квантиль с указанными уровнем и точностью. Для числовых типов данных выходной формат совпадает с входным. (U)Int* или Int128 или UInt128 или Int256 или UInt256 или Float* или Decimal* или Date или DateTime или DateTime64
Примеры
Вычисление квантиля с разными значениями точности
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 │
└────────────────────────────────────────┘См. также