uniq
Добавленный в: v1.1.0 Вычисляет приблизительное количество различных значений аргумента. Функция использует алгоритм адаптивного сэмплирования. Для хранения состояния вычислений функция использует выборку хеш-значений элементов размером до 65536. Этот алгоритм очень точен и при этом очень эффективен по нагрузке на CPU. Если запрос содержит несколько таких функций,uniq работает почти так же быстро, как и другие агрегатные функции.
Подробности реализации
Подробности реализации
Эта функция вычисляет хеш для всех параметров агрегирования, а затем использует его в вычислениях.
Она использует алгоритм адаптивного сэмплирования.
Для хранения состояния вычислений функция использует выборку хеш-значений элементов размером до 65536.
Этот алгоритм очень точен и при этом очень эффективен по нагрузке на CPU.
Если запрос содержит несколько таких функций,
uniq работает почти так же быстро, как и другие агрегатные функции.Выборка хранит 32-битные хеши, которые не позволяют различить больше нескольких миллиардов значений, поэтому дополнительно
поддерживается небольшая сильно прореженная выборка полных 64-битных хешей (примерно один хеш на 262144 значения,
не более 16384 хешей), и примерно при двух миллиардах оценка переключается на неё. Благодаря этому оценка остаётся
точной (с погрешностью около 1%) при мощности в сотни миллиардов и более, тогда как серверы версий до
26.8 в таких случаях возвращали бессмысленные результаты (issue #6078). Состояния, записанные такими серверами, не содержат 64-битной выборки,
поэтому при слиянии с ними для слитых значений сохраняется только 32-битная точность.x— Функция принимает переменное количество параметров.Tuple(T)илиArray(T)илиDateилиDateTimeилиStringили(U)Int*илиFloat*илиDecimal
UInt64
Примеры
Пример использования
Query
Response
Query
Response