Перейти к основному содержанию

uniqCombined64

Добавленный в: v20.1.0 Вычисляет приблизительное количество различных значений аргумента. То же, что и uniqCombined, но использует 64-битный хеш для всех типов данных, а не только для типа данных String. Эта функция возвращает детерминированный результат (он не зависит от порядка обработки запроса).
Поскольку для всех типов используется 64-битный хеш, результат не страдает от очень большой погрешности при кардинальностях, значительно превышающих UINT_MAX, как у uniqCombined, который использует 32-битный хеш для типов, отличных от String.
По сравнению с функцией uniq, функция uniqCombined64:
  • Потребляет в несколько раз меньше памяти
  • Обеспечивает в несколько раз более высокую точность
Эта функция вычисляет 64-битный хеш для всех типов данных и всех параметров агрегатной функции, а затем использует его в вычислениях. Она использует комбинацию трех алгоритмов: массива, хеш-таблицы и HyperLogLog с таблицей коррекции ошибок:
  • Для небольшого числа различных элементов используется массив
  • Когда размер множества увеличивается, используется хеш-таблица
  • Для еще большего числа элементов используется HyperLogLog, который занимает фиксированный объем памяти
Синтаксис
uniqCombined64(HLL_precision)(x[, ...])
uniqCombined64(x[, ...])
Параметры
  • HLL_precision — Необязательный параметр. Двоичный логарифм числа ячеек в HyperLogLog. Значение по умолчанию — 17, что соответствует примерно 96 КиБ памяти (2^17 ячеек по 6 бит каждая). Диапазон: [12, 20]. UInt8
Аргументы Возвращаемое значение Возвращает число типа UInt64, которое представляет приблизительное количество различных значений аргументов. UInt64 Примеры Пример для большого набора данных
Query
SELECT uniqCombined64(number) FROM numbers(1e10);
Response
┌─uniqCombined64(number)─┐
│             9998568925 │
└────────────────────────┘
Сравнение с uniqCombined
Query
-- uniqCombined64 с большим набором данных
SELECT uniqCombined64(number) FROM numbers(1e10);

-- uniqCombined с тем же набором данных даёт плохое приближение
SELECT uniqCombined(number) FROM numbers(1e10);
Response
┌─uniqCombined64(number)─┐
│             9998568925 │ -- 10,00 миллиарда
└────────────────────────┘
┌─uniqCombined(number)─┐
│           5545308725 │ -- 5,55 миллиарда
└──────────────────────┘
См. также
Последнее изменение 10 июня 2026 г.