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 |
範例
取得 V 依 G分組的確切相異值計數。
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 的相對誤差。