共用方式為


hll() (聚合函數)

適用於:✅Microsoft網狀架構Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel

函式 hll() 是估計一組值中唯一值數目的方法。 其方式是使用 dcount 函式,計算匯總摘要運算符內匯總的中繼結果。

閱讀基礎演算法 (HyperLog Log) 和估計精確度

注意

此函式會與 summarize 運算子搭配使用。

提示

重要

hll()、hll_if() 和 hll_merge() 的結果可以儲存和稍後擷取。 例如,您可能想要建立每日唯一使用者摘要,然後可用來計算每周計數。 不過,這些結果的精確二進位表示可能會隨著時間而變更。 不保證這些函式會對相同的輸入產生相同的結果,因此我們不建議您依賴它們。

語法

hll(expr [, 精確度])

深入瞭解 語法慣例

參數

姓名 類型​​ 必要 描述
expr string ✔️ 用於匯總計算的表達式。
準確性 int 控制速度與精確度之間平衡的值。 如果未指定,則預設值為 1。 如需支援的值,請參閱 估計精確度

傳回

傳回整個群組中相異expr計數的中繼結果。

範例

在下列範例中,函hll()式是用來估計數據行每 10 分鐘時間間隔StartTime內數據行的唯一值DamageProperty數目。

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"],[]]
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

注意

「進入計數」數據行是 HLL 實作中的 1 位元節計數器數目。

如果設定基數夠小,演算法會包含一些用於執行完美計數(零錯誤)的布建:

  • 當精確度層級為 1時,會傳回 1000 個值
  • 當精確度層級為 2時,會傳回8000個值

錯誤系結是概率的,而不是理論系結。 此值是誤差分佈的標準偏差(sigma),而 99.7% 的估計會有 3 x sigma 以下的相對誤差。

下圖顯示相對估計誤差的機率分佈函數,以百分比表示所有支援的精確度設定:

顯示 hll 錯誤分佈的圖表。