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 возвращает довольно плохую приближенную оценку для такого размера входных данных.
Запрос:
Результат:
См. также
