Fungsi aproksimasi memperkirakan jumlah nilai unik, persentil, dan histogram dengan biaya komputasi rendah.
Log Service mendukung fungsi aproksimasi berikut.
|
Function |
Syntax |
Description |
SQL support |
SPL support |
|
approx_distinct(x) |
Memperkirakan jumlah nilai unik dalam x. Galat standar bawaan: 2,3%. |
✔ |
❌ |
|
|
approx_distinct(x, e) |
Memperkirakan jumlah nilai unik dalam x dengan galat standar kustom. |
✔ |
❌ |
|
|
approx_percentile(x, percentage) |
Mengembalikan persentil percentage aproksimasi dari x (diurutkan secara ascending). Hasil merupakan perkiraan tanpa jaminan stabilitas. |
✔ |
❌ |
|
|
approx_percentile(x, array[percentage01, percentage02...]) |
Mengembalikan nilai aproksimasi dari x pada persentil percentage01 dan percentage02 (diurutkan secara ascending). Hasil merupakan perkiraan tanpa jaminan stabilitas. |
✔ |
❌ |
|
|
approx_percentile(x, weight, percentage) |
Mengembalikan persentil percentage aproksimasi dari x yang diberi bobot berdasarkan x × weight (diurutkan secara ascending). Hasil merupakan perkiraan tanpa jaminan stabilitas. |
✔ |
❌ |
|
|
approx_percentile(x, weight, array[percentage01, percentage02...]) |
Mengembalikan nilai aproksimasi dari x pada persentil percentage01 dan percentage02, yang diberi bobot berdasarkan x × weight. Hasil merupakan perkiraan tanpa jaminan stabilitas. |
✔ |
❌ |
|
|
approx_percentile(x, weight, percentage, accuracy) |
Mengembalikan persentil percentage aproksimasi dari x yang diberi bobot berdasarkan x × weight, dengan akurasi yang dapat dikonfigurasi. Hasil merupakan perkiraan tanpa jaminan stabilitas. |
✔ |
❌ |
|
|
numeric_histogram(bucket, x) |
Menghitung histogram aproksimasi untuk x dengan jumlah bucket yang ditentukan. Mengembalikan objek JSON. |
✔ |
❌ |
|
|
numeric_histogram(bucket, x, weight) |
Menghitung histogram aproksimasi berbobot untuk x dengan jumlah bucket yang ditentukan. Mengembalikan objek JSON. |
✔ |
❌ |
|
|
numeric_histogram_u(bucket, x) |
Menghitung histogram aproksimasi untuk x dengan jumlah bucket yang ditentukan. Mengembalikan tabel multi-baris dan multi-kolom. |
✔ |
❌ |
|
|
|
Memperkirakan |
✔ |
❌ |
Fungsi approx_distinct
Fungsi approx_distinct memperkirakan jumlah nilai unik dalam x.
Sintaks
-
Memperkirakan jumlah nilai unik dalam x. Galat standar bawaan: 2,3%.
approx_distinct(x) -
Memperkirakan jumlah nilai unik dalam x dengan galat standar kustom.
approx_distinct(x, e)
Parameter
|
Parameter |
Description |
|
x |
Nama kolom. Mendukung semua tipe data. |
|
e |
Galat standar kustom. Rentang valid: [0,0115, 0,26]. |
Tipe nilai kembalian
BIGINT
Contoh
-
Contoh 1: Hitung PV dengan
countdan perkirakan UV denganapprox_distinctpada fieldclient_ip. Galat standar: 2,3%.-
Pernyataan kueri
* | SELECT count(*) AS PV, approx_distinct(client_ip) AS UV -
Kueri mengembalikan PV sebesar 941.787 dan UV sebesar 723.040.
-
-
Contoh 2: Hitung PV dan perkirakan UV pada field
client_ipdengan galat standar kustom sebesar 10%.-
Pernyataan kueri
* | SELECT count(*) AS PV, approx_distinct(client_ip,0.1) AS UV -
Kueri mengembalikan PV sebesar 9.095 dan UV sebesar 7.946.
-
Fungsi approx_percentile
Fungsi approx_percentile mengembalikan persentil aproksimasi dari x yang ditentukan oleh percentage. Hasil merupakan perkiraan tanpa jaminan stabilitas.
Sintaks
-
Mengembalikan persentil percentage aproksimasi dari x (diurutkan secara ascending). Tipe kembalian: double.
approx_percentile(x, percentage) -
Mengembalikan nilai aproksimasi dari x pada persentil percentage01 dan percentage02 (diurutkan secara ascending). Tipe kembalian: array(double,double).
approx_percentile(x, array[percentage01, percentage02...]) -
Mengembalikan persentil percentage aproksimasi dari x yang diberi bobot berdasarkan x × weight. Tipe kembalian:
double.approx_percentile(x, weight, percentage) -
Mengembalikan nilai aproksimasi dari x pada persentil percentage01 dan percentage02, yang diberi bobot berdasarkan x × weight. Tipe kembalian: array(double,double).
approx_percentile(x, weight, array[percentage01, percentage02...]) -
Mengembalikan persentil percentage aproksimasi dari x yang diberi bobot berdasarkan x × weight, dengan akurasi yang dapat dikonfigurasi. Tipe kembalian: double.
approx_percentile(x, weight, percentage, accuracy)
Parameter
|
Parameter |
Description |
|
x |
Nama kolom. Harus bertipe DOUBLE. |
|
percentage |
Nilai persentil. Rentang valid: [0, 1]. |
|
accuracy |
Nilai akurasi. Rentang valid: (0, 1). |
|
weight |
Bobot. Harus berupa bilangan bulat lebih besar dari 1. Sistem mengurutkan berdasarkan hasil perkalian x × weight. |
Tipe nilai kembalian
DOUBLE atau ARRAY(DOUBLE)
Contoh
-
Contoh 1: Mengembalikan persentil ke-50 aproksimasi (median) dari request_time.
-
Pernyataan kueri
* | SELECT approx_percentile(request_time, 0.5) -
Kueri mengembalikan
45.0, yaitu median aproksimasi (persentil ke-50) darirequest_time.
-
-
Contoh 2: Mengembalikan persentil ke-10, ke-20, dan ke-70 aproksimasi dari request_time.
-
Pernyataan kueri
* | SELECT approx_percentile(request_time, array[0.1, 0.2, 0.7]) -
Kueri mengembalikan
[17.0, 24.0, 59.0], yaitu nilai aproksimasi darirequest_timepada persentil ke-10, ke-20, dan ke-70, secara berurutan.
-
-
Contoh 3: Mengembalikan persentil ke-50 berbobot dari request_time. Bobot adalah 100 jika request_time < 20, selain itu 10.
-
Pernyataan kueri
* | SELECT approx_percentile( request_time, CASE WHEN request_time < 20 THEN 100 ELSE 10 END, 0.5 ) -
Kueri mengembalikan
18.0.
-
-
Contoh 4: Mengembalikan persentil ke-80 dan ke-90 berbobot dari request_time. Bobot adalah 100 jika request_time < 20, selain itu 10.
-
Pernyataan kueri
* | SELECT approx_percentile( request_time, CASE WHEN request_time < 20 THEN 100 ELSE 10 END, array [0.8, 0.9] ) -
Kueri mengembalikan
[48.0, 64.0].
-
-
Contoh 5: Mengembalikan persentil ke-50 berbobot dari request_time dengan akurasi 0,2. Bobot adalah 100 jika request_time < 20, selain itu 10.
-
Pernyataan kueri
* | SELECT approx_percentile( request_time, CASE WHEN request_time < 20 THEN 100 ELSE 10 END, 0.5, 0.2 )
-
Fungsi numeric_histogram
Fungsi numeric_histogram menghitung histogram aproksimasi untuk x dengan jumlah bucket yang ditentukan dan mengembalikan hasilnya sebagai objek JSON.
Sintaks
-
Menghitung histogram aproksimasi untuk x dengan jumlah bucket yang ditentukan.
numeric_histogram(bucket, x) -
Menghitung histogram aproksimasi berbobot untuk x dengan jumlah bucket yang ditentukan.
numeric_histogram(bucket, x, weight)
Parameter
|
Parameter |
Description |
|
bucket |
Jumlah bucket histogram. Harus bertipe BIGINT. |
|
x |
Nama kolom. Harus bertipe DOUBLE. |
|
weight |
Bobot. Harus berupa bilangan bulat lebih besar dari 0. Sistem mengelompokkan nilai berdasarkan hasil perkalian x × weight. |
Tipe nilai kembalian
JSON
Contoh
-
Contoh 1: Menghitung histogram aproksimasi durasi permintaan untuk permintaan POST.
-
Pernyataan kueri
request_method:POST | SELECT numeric_histogram(10, request_time) -
Mengembalikan objek JSON di mana kunci adalah batas atas bucket dan nilai adalah jumlah, seperti
"45.03638445951907":11351.0,"31.617058096415327":16180.0, dan"51.0979254315973":13786.0.
-
-
Contoh 2: Menghitung histogram aproksimasi berbobot durasi permintaan untuk permintaan POST.
-
Pernyataan kueri
request_method:POST | SELECT numeric_histogram(10, request_time, CASE WHEN request_time<20 THEN 100 ELSE 10 END) -
Mengembalikan kolom JSON
_col0dengan 10 pasangan kunci-nilai yang memetakan rentang numerik ke frekuensi, seperti"60.63632633267428":268070.0,"76.41340599455032":275250.0, dan"15.028066666666671":1500000.0.
-
Fungsi numeric_histogram_u
Fungsi numeric_histogram_u menghitung histogram aproksimasi untuk x dengan jumlah bucket yang ditentukan dan mengembalikan hasilnya dalam format multi-baris dan multi-kolom.
Sintaks
numeric_histogram_u(bucket, x)
Parameter
|
Parameter |
Description |
|
bucket |
Jumlah bucket histogram. Harus bertipe BIGINT. |
|
x |
Nama kolom. Harus bertipe DOUBLE. |
Tipe nilai kembalian
Tabel dengan kolom bucket_avg dan count.
Contoh
Menghitung histogram aproksimasi durasi permintaan POST.
-
Pernyataan kueri
request_method:POST | SELECT numeric_histogram_u(10, request_time) -
Mengembalikan 10 baris dengan dua kolom:
bucket_avg(rata-rata bucket) dancount(jumlah item dalam bucket tersebut). Sebagai contoh, bucket pertama memilikibucket_avg14,20 dancount18806,0. Bucket terakhir memilikibucket_avg70,78 dancount13442,0.
Fungsi approx_most_frequent
Memperkirakan k nilai paling sering muncul dalam kolom x beserta perkiraan jumlah kemunculannya.
Sintaks
approx_most_frequent(k, x)
Parameter
|
Parameter |
Description |
|
k |
Jumlah nilai paling sering yang akan dikembalikan. Misalnya, 5 mengembalikan 5 nilai teratas beserta perkiraan jumlah kemunculannya. |
|
x |
Nama kolom. Harus bertipe VARCHAR. |
Nilai kembalian
map(VARCHAR, BIGINT)
Contoh
Mendapatkan tiga nilai paling sering dari field content.
-
Data sampel
content: 'A' 'B' 'A' 'C' 'A' 'B' 'C' 'D' 'E' -
Pernyataan kueri
SELECT approx_most_frequent(3, content) -
Output
Kueri mengembalikan
{"A":3, "B":2, "C":2}.