本文為您可以介紹如何使用APPROX_COUNT_DISTINCT函數,提升作業效能。
使用限制
僅Realtime Compute引擎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