uniqHLL12
Добавленный в: v1.1.0
Вычисляет приблизительное количество различных значений аргумента с использованием алгоритма HyperLogLog.
Подробности реализации
Эта функция вычисляет хеш для всех параметров агрегатной функции, а затем использует его в дальнейших вычислениях. Для приблизительной оценки количества различных значений аргумента используется алгоритм HyperLogLog.
Используются 2^12 ячеек по 5 бит. Размер состояния — чуть более 2.5 КБ. Результат недостаточно точен (ошибка до ~10%) для небольших наборов данных (<10K элементов). Однако для наборов данных с высокой мощностью (10K-100M) результат достаточно точен, с максимальной ошибкой ~1.6%. Начиная с 100M ошибка оценки возрастает, и для наборов данных с чрезвычайно высокой мощностью (1B+ элементов) функция будет возвращать очень неточные результаты.
Возвращает детерминированный результат (не зависит от порядка обработки запроса).
Синтаксис
uniqHLL12(x[, ...])Аргументы
x— Функция принимает переменное количество параметров.Tuple(T)илиArray(T)илиDateилиDateTimeилиStringили(U)Int*илиFloat*илиDecimal
Возвращаемое значение
Возвращает число типа UInt64, которое представляет приблизительное количество различных значений аргументов. UInt64
Примеры
Базовое использование
CREATE TABLE example_hll
(
id UInt32,
category String
)
ENGINE = Memory;
INSERT INTO example_hll VALUES
(1, 'A'), (2, 'B'), (3, 'A'), (4, 'C'), (5, 'B'), (6, 'A');
SELECT uniqHLL12(category) AS hll_unique_categories
FROM example_hll;┌─hll_unique_categories─┐
│ 3 │
└───────────────────────┘См. также