uniqCombined64
Вычисляет приблизительное количество различных значений аргумента. То же самое, что и uniqCombined, но использует 64-битный хеш для всех типов данных, а не только для типа данных String.
Параметры
HLL_precision: Двоичный логарифм числа ячеек в HyperLogLog. Опционально функцию можно вызывать какuniqCombined64(x[, ...]). Значение по умолчанию дляHLL_precision— 17, что фактически соответствует 96 КиБ памяти (2^17 ячеек по 6 бит каждая).X: Переменное количество параметров. Параметры могут иметь типыTuple,Array,Date,DateTime,Stringили числовые типы.
Возвращаемое значение
- Число типа UInt64.
Подробности реализации
Функция uniqCombined64:
- Вычисляет хеш (64-битный хеш для всех типов данных) для всех параметров в агрегате и затем использует его в вычислениях.
- Использует комбинацию из трёх алгоритмов: массива, хеш-таблицы и HyperLogLog с таблицей коррекции ошибки.
- Для небольшого количества различных элементов используется массив.
- Когда размер множества увеличивается, используется хеш-таблица.
- Для ещё большего количества элементов используется HyperLogLog, который занимает фиксированный объём памяти.
- Возвращает детерминированный результат (он не зависит от порядка обработки запроса).
Поскольку для всех типов используется 64-битный хеш, результат не страдает от очень высокой ошибки для мощностей существенно больше UINT_MAX, как в случае с uniqCombined, где для типов, отличных от String, используется 32-битный хеш.
По сравнению с функцией uniq функция uniqCombined64:
- Потребляет в несколько раз меньше памяти.
- Вычисляет результат с в несколько раз большей точностью.
Пример
В приведённом ниже примере uniqCombined64 выполняется по 1e10 различным числам и возвращает очень близкое приближение количества различных значений аргумента.
Запрос:
Результат:
Для сравнения функция uniqCombined возвращает довольно грубое приближение для набора данных такого размера.
Запрос:
Результат:
См. также