All Products
Search
Document Center

Realtime Compute for Apache Flink:APPROX_COUNT_DISTINCT

Last Updated:Mar 27, 2026

APPROX_COUNT_DISTINCT mengembalikan perkiraan jumlah nilai unik dalam suatu kolom. Fungsi ini menukar sebagian kecil akurasi—yang dapat dikonfigurasi—dengan beban state yang jauh lebih rendah pada node agregat, sehingga sangat cocok untuk kasus penggunaan ber-kardinalitas tinggi seperti penghitungan pengunjung unik (UV) yang tidak memerlukan hasil eksak.

Persyaratan versi: Ververica Runtime (VVR) 3.0.0 atau yang lebih baru.

Kapan menggunakannya

Gunakan APPROX_COUNT_DISTINCT alih-alih COUNT DISTINCT jika kedua kondisi berikut terpenuhi:

  • Kolom tersebut memiliki jumlah kunci unik yang besar (misalnya, user ID, session token, URL). Fungsi ini tidak memberikan manfaat performa yang signifikan untuk kolom dengan kardinalitas rendah.

  • Aliran input tidak berisi pesan retract.

Jika salah satu kondisi tidak terpenuhi, gunakan COUNT DISTINCT sebagai gantinya.

Cara kerja

COUNT DISTINCT harus menyimpan setiap kunci unik dalam data state untuk menghasilkan nilai eksak. Pada kolom dengan kardinalitas tinggi, hal ini menyebabkan beban baca/tulis yang signifikan dan menjadi bottleneck performa.

APPROX_COUNT_DISTINCT memperkirakan jumlah nilai unik tanpa menyimpan setiap kunci. Pendekatan ini menghilangkan bottleneck state dan memungkinkan penerapan optimisasi miniBatch serta local-global pada node agregat.

Parameter accuracy mengatur tingkat akurasi komputasi. Nilai yang lebih besar menunjukkan akurasi yang lebih tinggi, tetapi menyebabkan beban state yang lebih tinggi dan melemahkan keunggulan performa dibandingkan COUNT DISTINCT.

Sintaksis

APPROX_COUNT_DISTINCT(col [, accuracy])

Parameter

ParameterTypeWajibDeskripsi
colSemua tipe dataYaKolom tempat menghitung jumlah nilai unik.
accuracyFLOATTidakAkurasi komputasi. Nilai valid: (0.0, 1.0). Nilai default: 0.99. Nilai yang lebih tinggi menunjukkan akurasi yang lebih tinggi dengan biaya beban state yang lebih besar, sehingga mengurangi keunggulan performa dibandingkan COUNT DISTINCT.

Contoh

Contoh berikut membandingkan hasil pada akurasi default (0.99) dan akurasi yang lebih rendah (0.9).

Tabel input T1

a (VARCHAR)b (BIGINT)
Hi1
Hi2
Hi3
Hi4
Hi5
Hi6
Hello1
Hello2
Hello3
Hello4

Kueri

SELECT
  a,
  APPROX_COUNT_DISTINCT(b) AS b,
  APPROX_COUNT_DISTINCT(b, 0.9) AS c
FROM T1
GROUP BY a;

Hasil

a (VARCHAR)b (BIGINT)c (BIGINT)
Hi66
Hello44

Kolom b menggunakan akurasi default 0.99; kolom c menggunakan 0.9.