全部产品
Search
文档中心

Realtime Compute for Apache Flink:APPROX_COUNT_DISTINCT

更新时间:Jun 19, 2025

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