hll() (彙總函式)
函 hll()
式是估計一組值中唯一值數目的方法。 其作法是使用 dcount
函式計算摘要運算元內匯總的中繼結果。
深入了解基礎演算法 (HyperLogLog) 和估計精確度。
注意
此函式會與 summarize 運算子搭配使用。
提示
- 使用 hll_merge 函式來合併多個
hll()
函式的結果。 - 使用 dcount_hll 函數,從 或
hll_merge
函式的hll()
輸出計算相異值的數目。
重要
hll () 、hll_if () 和 hll_merge () 的結果可以儲存和更新版本擷取。 例如,您可能想要建立每日唯一使用者摘要,然後可用來計算每周計數。 不過,這些結果的精確二進位表示可能會隨著時間而改變。 不保證這些函式會針對相同的輸入產生相同的結果,因此我們不建議依賴它們。
Syntax
hll
(
expr [,
精確度])
深入瞭解 語法慣例。
參數
名稱 | 類型 | 必要 | Description |
---|---|---|---|
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) 演演算法的變體,此演算法會執行設定基數的隨機估計。 此演算法提供 "knob",可用來平衡每個記憶體大小的精確度和執行時間:
精確度 | 錯誤 (%) | 項目計數 |
---|---|---|
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 以下的相對誤差。
下圖會針對所有支援的精確度設定,說明相對估計誤差的機率分佈函式 (以百分比表示):
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應