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