hll() (агрегатная функция)

Функция hll() — это способ оценки количества уникальных значений в наборе значений. Для этого вычисляется промежуточные результаты агрегирования в операторе суммирования для группы данных с помощью dcount функции .

Ознакомьтесь с базовым алгоритмом (HyperLogLog og) и точностью оценки.

Примечание

Эта функция используется в сочетании с оператором summarize.

Совет

  • Используйте функцию hll_merge для объединения результатов нескольких hll() функций.
  • Используйте функцию dcount_hll для вычисления количества уникальных значений из выходных hll() данных функций или hll_merge .

Важно!

Результаты hll(), hll_if() и hll_merge() можно сохранить и получить позже. Например, может потребоваться создать ежедневную сводку уникальных пользователей, которую затем можно использовать для вычисления еженедельных счетчиков. Однако точное двоичное представление этих результатов со временем может измениться. Нет никакой гарантии, что эти функции будут давать одинаковые результаты для идентичных входных данных, поэтому мы не рекомендуем полагаться на них.

Синтаксис

hll(expr [,точность])

Дополнительные сведения о соглашениях о синтаксисе.

Параметры

Имя Тип Обязательно Описание
expr string ✔️ Выражение, используемое для вычисления агрегирования.
Точность int Значение, определяющее баланс между скоростью и точностью. Если не задано иное, по умолчанию используется значение 1. Поддерживаемые значения см. в разделе Точность оценки.

Возвращаемое значение

Возвращает промежуточные результаты различающегося количества экспров в группе.

Пример

В следующем примере hll() функция используется для оценки количества уникальных значений столбца DamageProperty в каждой 10-минутной временной ячейке столбца StartTime .

StormEvents
| summarize hll(DamageProperty) by bin(StartTime,10m)

Показанная таблица результатов содержит только первые 10 строк.

StartTime hll_DamageProperty
2007-01-01T00:20:00Z [[1024,14],["3803688792395291579"],[]]
2007-01-01T01:00:00Z [[1024,14],["7755241107725382121","-5665157283053373866","3803688792395291579","-1003235211361077779"],[]]
2007-01-01T02:00:00Z [[1024,14],["-1003235211361077779","-5665157283053373866","7755241107725382121"],[]]
2007-01-01T02:20:00Z [[1024,14],["7755241107725382121"],[]]
2007-01-01T03:30:00Z [[1024,14],["3803688792395291579"],[]]
2007-01-01T03:40:00Z [[1024,14],["-5665157283053373866"],[]]
01.01.2007T04:30:00Z [[1024,14],["3803688792395291579"],[]]
01.01.2007T05:30:00Z [[1024,14],["3803688792395291579"],[]]
01.01.2007T06:30:00Z [[1024,14],["1589522558235929902"],[]]

Точность оценки

Эта функция использует вариант алгоритма HyperLogLog (HLL), который выполняет стохастическую оценку кратности наборов. Алгоритм предоставляет "рычаг управления", который можно использовать для выравнивания точности и времени выполнения под размер памяти:

Точность Ошибка (%) Число записей
0 1.6 212
1 0,8 214
2 0,4 216
3 0,28 217
4 0.2 218

Примечание

Столбец "число записей" — это количество 1-байтных счетчиков в реализации HLL.

Алгоритм включает в себя некоторые положения для выполнения идеального подсчета (нулевой ошибки), если кратность набора достаточно мала:

  • если уровень точности равен 1, возвращаются значения 1000;
  • если уровень точности равен 2, возвращаются значения 8000.

Границы погрешности — вероятностная, а не теоретическая граница. Значение является стандартным отклонением распределения погрешностей (сигма). 99,7 % оценок будут иметь относительную погрешность в 3 сигмы.

На следующем изображении показана функция распределения вероятности относительной погрешности оценки (в процентах) для всех поддерживаемых параметров точности:

Диаграмма, показывающая распределение ошибок HLL.