GitHub GitHub: 線上編輯

dcount () (總計函數)

如需實作中的差異,請參閱 KQL 相容性

傳回摘要群組中純量表示式所採用的相異值數目估計值。

dcount() 聚集函數主要適用於估計巨型集的基數。 它會為了精確度而交換效能,並可能傳回不同的執行結果。 輸入順序可能會影響其輸出。

語法

dcount (expr[, 精確度])

引數

預期 類型 必要 說明
預期 字串 要計算其相異值的純量表示式。
正確性 INT 定義所要求的估計精確度的選用 int 文字。
如需支援的值,請參閱下面的說明。 如果未指定,則會使用預設值 1

精確度(如果指定的話) 可控制速度與精確度之間的平衡。

說明
0 最不精確且最快的計算。 1.6% 錯誤
1 預設值,用於平衡精確度和計算時間; 大約 0.8% 錯誤。
2 精確且慢速計算; 大約 0.4% 錯誤。
3 額外精確且慢速計算; 大約 0.28% 錯誤。
4 超級精確且最慢的計算; 大約 0.2% 錯誤。

範例

傳回相異 name數目的估計值。

events
    | project name, original_time
    | where original_time > ago(5m)
    | summarize NameCount=dcount(name)

結果

NameCount
2032

範例

取得 VG分組的確切相異值計數。

T | summarize by V, G | summarize count() by G

此計算需要大量內部記憶體,因為 V 的相異值會乘以 G的相異值數目。 它可能會導致記憶體錯誤或執行時間過大。 dcount()提供快速且可靠的替代方案:

T | summarize dcount(V) by G | count

估計精確度

dcount() 聚集函數使用 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 的相對誤差。