全部產品
Search
文件中心

Realtime Compute for Apache Flink:APPROX_COUNT_DISTINCT

更新時間:Jul 13, 2024

本文為您可以介紹如何使用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