uniqCombined64
Добавленный в: v20.1.0
Вычисляет приблизительное количество различных значений аргумента.
То же, что и uniqCombined, но использует 64-битный хеш для всех типов данных, а не только для типа данных String.
Эта функция возвращает детерминированный результат (он не зависит от порядка обработки запроса).
По сравнению с функцией uniq, функция uniqCombined64:
- Потребляет в несколько раз меньше памяти
- Обеспечивает в несколько раз более высокую точность
Подробности реализации
Эта функция вычисляет 64-битный хеш для всех типов данных и всех параметров агрегатной функции, а затем использует его в вычислениях. Она использует комбинацию трех алгоритмов: массива, хеш-таблицы и HyperLogLog с таблицей коррекции ошибок:
- Для небольшого числа различных элементов используется массив
- Когда размер множества увеличивается, используется хеш-таблица
- Для еще большего числа элементов используется HyperLogLog, который занимает фиксированный объем памяти
Синтаксис
uniqCombined64(HLL_precision)(x[, ...])
uniqCombined64(x[, ...])Параметры
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
Примеры
Пример для большого набора данных
SELECT uniqCombined64(number) FROM numbers(1e10);┌─uniqCombined64(number)─┐
│ 9998568925 │
└────────────────────────┘Сравнение с uniqCombined
-- uniqCombined64 with large dataset
SELECT uniqCombined64(number) FROM numbers(1e10);
-- uniqCombined with same dataset shows poor approximation
SELECT uniqCombined(number) FROM numbers(1e10);┌─uniqCombined64(number)─┐
│ 9998568925 │
└────────────────────────┘
┌─uniqCombined(number)─┐
│ 5545308725 │
└──────────────────────┘См. также