Поделиться через


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

Область применения: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

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

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

Примечание.

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

Совет

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

Внимание

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

Синтаксис

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

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

Параметры

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

Возвраты

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

Пример

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

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

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

Время начала 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"],[]]
2007-01-01T04:30:00Z [[1024,14],["3803688792395291579"],[]]
2007-01-01T05:30:00Z [[1024,14],["3803688792395291579"],[]]
2007-01-01T06: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.