このトピックでは、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