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

uniqCombined

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