All Products
Search
Document Center

Simple Log Service:Fungsi aproksimasi

Last Updated:Jun 04, 2026

Fungsi aproksimasi memperkirakan jumlah nilai unik, persentil, dan histogram dengan biaya komputasi rendah.

Log Service mendukung fungsi aproksimasi berikut.

Penting Jika Anda ingin menggunakan string dalam pernyataan analitik, bungkus string tersebut dengan tanda kutip tunggal (''). String yang tidak dibungkus atau dibungkus dengan tanda kutip ganda ("") dianggap sebagai nama field atau nama kolom. Misalnya, 'status' merepresentasikan string status, sedangkan status atau "status" merepresentasikan field log status.

Function

Syntax

Description

SQL support

SPL support

approx_distinct

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

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

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

numeric_histogram_u(bucket, x)

Menghitung histogram aproksimasi untuk x dengan jumlah bucket yang ditentukan. Mengembalikan tabel multi-baris dan multi-kolom.

approx_most_frequent

approx_most_frequent(k, x)

Memperkirakan k nilai paling sering muncul dalam kolom x beserta perkiraan jumlah kemunculannya. Mengembalikan map.

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 count dan perkirakan UV dengan approx_distinct pada field client_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_ip dengan 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) dari request_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 dari request_time pada 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 _col0 dengan 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) dan count (jumlah item dalam bucket tersebut). Sebagai contoh, bucket pertama memiliki bucket_avg 14,20 dan count 18806,0. Bucket terakhir memiliki bucket_avg 70,78 dan count 13442,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}.