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