本文為您介紹如何使用APPROX_COUNT_DISTINCT函數,提升作業性能。
使用限制
僅實時計算引擎VVR 3.0.0及以上版本支持APPROX_COUNT_DISTINCT函數。
背景信息
Count Distinct優化時,Aggregate節點的State需要保存所有Distinct Key信息。當Distinct Key數目過大時,State的讀寫開銷太大,因此Count Distinct優化存在性能瓶頸。但在很多場景,完全精確的統計并不那么必要。如果您希望犧牲部分精確度來換取性能上的提升,您可以使用新增的內置函數APPROX_COUNT_DISTINCT提升作業性能。APPROX_COUNT_DISTINCT支持MiniBatch或Local-Global等Aggregate上的優化,但是需要注意以下幾點:
輸入不含有撤回消息。
Distinct Key數目需要足夠大,例如UV。如果Distinct Key數目不大,APPROX_COUNT_DISTINCT性能相對精確計算提升不大。
語法
APPROX_COUNT_DISTINCT(col [, accuracy])
入參
參數 | 數據類型 | 說明 |
col | 任意類型 | 字段名稱 |
accuracy | FLOAT | 可選,準確率,取值范圍為(0.0, 1.0),默認值為0.99,取值越高,準確率越高,state開銷越大,性能越低。 |
示例
測試數據
表 1. T1
a (VARCHAR)
b (BIGINT)
Hi
1
Hi
2
Hi
3
Hi
4
Hi
5
Hi
6
Hello
1
Hello
2
Hello
3
Hello
4
測試代碼
SELECT a, APPROX_COUNT_DISTINCT(b) as b, APPROX_COUNT_DISTINCT(b, 0.9) as c FROM T1 GROUP BY a;
測試結果
a (VARCHAR)
b (BIGINT)
c (BIGINT)
Hi
6
6
Hello
4
4
文檔內容是否對您有幫助?