hll() (функция агрегирования)
Область применения: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 сигмы.
На следующем изображении показана функция распределения вероятности относительной погрешности оценки (в процентах) для всех поддерживаемых параметров точности: