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

uniqHLL12

uniqHLL12

Добавлена в версии: v1.1

Вычисляет приблизительное количество различных значений аргументов с использованием алгоритма HyperLogLog.

Примечание

Мы не рекомендуем использовать эту функцию. В большинстве случаев используйте функцию uniq или uniqCombined.

Details

Подробности реализации Эта функция вычисляет хеш для всех аргументов агрегатной функции, а затем использует его в вычислениях. Она использует алгоритм HyperLogLog для приближённого вычисления количества различных значений аргументов.

Используются 2^12 ячеек по 5 бит. Размер состояния немного больше 2,5 КБ. Результат не очень точен (ошибка до ~10 %) для небольших наборов данных (<10K элементов). Однако результат достаточно точен для наборов данных с высокой кардинальностью (10K–100M), с максимальной ошибкой до ~1,6 %. Начиная с 100M ошибка оценки увеличивается, и функция будет возвращать очень неточные результаты для наборов данных с чрезвычайно высокой кардинальностью (1B+ элементов).

Обеспечивает детерминированный результат (он не зависит от порядка обработки запроса).

Синтаксис

uniqHLL12(x[, ...])

Аргументы

Возвращаемое значение

Возвращает число типа 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 │
└───────────────────────┘

См. также