Topik ini menjelaskan penggunaan fungsi APPROX_COUNT_DISTINCT untuk meningkatkan kinerja penyebaran Anda.
Batasan
Fungsi ini hanya didukung di Realtime Compute for Apache Flink yang menggunakan Ververica Runtime (VVR) versi 3.0.0 atau lebih baru.
Informasi latar belakang
Saat mengoptimalkan fungsi COUNT DISTINCT, informasi kunci unik harus disimpan dalam status data node agregat. Jika terdapat banyak kunci unik, overhead baca/tulis status data akan tinggi, sehingga memengaruhi optimasi kinerja penyebaran. Dalam beberapa kasus, komputasi akurat tidak diperlukan. Jika Anda ingin mencapai kinerja penyebaran yang lebih tinggi dengan mengorbankan sebagian kecil akurasi, Anda dapat menggunakan fungsi APPROX_COUNT_DISTINCT. Fungsi ini mendukung miniBatch dan optimasi local-global pada node agregat. Pastikan persyaratan berikut terpenuhi saat menggunakan fungsi ini:
Data input tidak mengandung pesan retract.
Terdapat banyak kunci unik, seperti pengunjung unik (UV). Fungsi APPROX_COUNT_DISTINCT tidak memberikan manfaat signifikan jika jumlah kunci unik sedikit.
Sintaksis
APPROX_COUNT_DISTINCT(col [, accuracy])Parameter input
Parameter | Tipe data | Deskripsi |
col | Semua tipe data | Nama field. |
accuracy | FLOAT | Akurasi komputasi. Parameter ini opsional. Nilai yang lebih besar menunjukkan akurasi yang lebih tinggi, yang menghasilkan overhead status yang lebih tinggi. Overhead status yang lebih tinggi melemahkan kinerja fungsi APPROX_COUNT_DISTINCT. Nilai valid: (0.0, 1.0). Nilai default: 0.99. |
Contoh
Data Uji
Tabel 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
Pernyataan Uji
SELECT a, APPROX_COUNT_DISTINCT(b) as b, APPROX_COUNT_DISTINCT(b, 0.9) as c FROM T1 GROUP BY a;Hasil Uji
a (VARCHAR)
b (BIGINT)
c (BIGINT)
Hi
6
6
Hello
4
4