uniqCombined64
uniqCombined, но использует 64-битный хеш для всех типов данных, а не только для типа данных String.
Эта функция возвращает детерминированный результат (он не зависит от порядка обработки запроса).
Поскольку для всех типов используется 64-битный хеш, результат не страдает от очень большой погрешности при кардинальностях, значительно превышающих
UINT_MAX, как у uniqCombined, который использует 32-битный хеш для типов, отличных от String.- Потребляет в несколько раз меньше памяти
- Обеспечивает в несколько раз более высокую точность
Подробности реализации
Подробности реализации
Эта функция вычисляет 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
Примеры
Пример для большого набора данных
Query
Response
Query
Response