uniqCombined64
uniqCombined64
Впервые появилась в: v20.1
Вычисляет приблизительное количество различных значений аргумента.
Аналогична функции uniqCombined, но использует 64-битный хеш для всех типов данных, а не только для типа данных String.
Эта функция возвращает детерминированный результат (он не зависит от порядка обработки запроса).
Поскольку она использует 64-битный хеш для всех типов, результат не подвержен очень большой ошибке при мощностях множеств, значительно превышающих UINT_MAX, в отличие от uniqCombined, которая использует 32-битный хеш для типов, отличных от String.
По сравнению с функцией uniq, функция uniqCombined64:
- Потребляет в несколько раз меньше памяти
- Вычисляет значение с в несколько раз большей точностью
Details
Implementation details
Эта функция вычисляет 64-битный хеш для всех типов данных по всем параметрам в агрегате, а затем использует его в вычислениях. Она использует комбинацию трёх алгоритмов: массив, хеш-таблицу и HyperLogLog с таблицей коррекции ошибки:- Для небольшого числа различных элементов используется массив
- При большем размере множества используется хеш-таблица
- Для ещё большего числа элементов используется HyperLogLog, который занимает фиксированный объём памяти
Синтаксис
Параметры
HLL_precision— Необязательный параметр. Двоичный логарифм количества ячеек в HyperLogLog. Значение по умолчанию — 17, что фактически соответствует 96 КиБ памяти (2^17 ячеек, по 6 бит каждая). Диапазон: [12, 20].UInt8
Аргументы
x— Переменное количество аргументов.Tuple(T)илиArray(T)илиDateилиDateTimeилиStringили(U)Int*илиFloat*илиDecimal
Возвращаемое значение
Возвращает число типа UInt64, представляющее приблизительное количество различных значений аргументов. UInt64
Примеры
Пример для большого объёма данных
Сравнение с функцией uniqCombined
См. также