すべてのプロダクト
Search
ドキュメントセンター

Realtime Compute for Apache Flink:APPROX_COUNT_DISTINCT

最終更新日:Jan 07, 2025

このトピックでは、APPROX_COUNT_DISTINCT関数を使用してデプロイのパフォーマンスを向上させる方法について説明します。

制限事項

この関数は、Ververica Runtime (VVR) 3.0.0以降を使用するRealtime Compute for Apache Flinkでのみサポートされています。

背景情報

COUNT DISTINCT関数を最適化する場合、個別のキー情報は集計ノードの状態データに保存する必要があります。個別のキーが多数存在する場合、状態データの読み取り/書き込みオーバーヘッドが高くなります。これは、デプロイのパフォーマンス最適化のボトルネックとなります。多くの場合、正確な計算は必要ありません。精度のわずかな部分を犠牲にして高いデプロイパフォーマンスを実現したい場合は、APPROX_COUNT_DISTINCT 関数を使用できます。APPROX_COUNT_DISTINCT は、集計ノードでのminiBatchおよびlocal-global最適化をサポートしています。この関数を使用する場合は、次の要件が満たされていることを確認してください。

  • 入力データには、retractメッセージが含まれていません。

  • ユニークビジター(UV)など、多数の個別のキーが存在します。個別のキーの数が少ない場合、APPROX_COUNT_DISTINCT 関数では明らかな利点はありません。

構文

APPROX_COUNT_DISTINCT(col [, accuracy])

入力パラメーター

パラメーター

データ型

説明

col

すべてのデータ型

フィールドの名前。

accuracy

FLOAT

計算精度。このパラメーターはオプションです。値が大きいほど精度が高くなりますが、状態のオーバーヘッドも高くなります。状態のオーバーヘッドが高いほど、APPROX_COUNT_DISTINCT関数の パフォーマンスが低下します。有効な値:(0.0, 1.0)。デフォルト値:0.99。

  • テストデータ

    表 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