全部产品
Search
文档中心

Simple Log Service:Klausa UNNEST

更新时间:Jun 26, 2025

Dalam skenario bisnis yang kompleks, nilai dari suatu bidang log dapat berupa tipe data kompleks seperti array atau peta. Untuk menanyakan dan menganalisis log yang berisi bidang dengan nilai tersebut, Anda dapat menggunakan klausa UNNEST untuk memperluas nilai-nilai bidang menjadi beberapa baris guna analisis lebih lanjut.

Sintaksis

  • Memperluas array menjadi beberapa baris. column_name menentukan nama kolom untuk baris.
    UNNEST(x) AS table_alias(column_name)
  • Memperluas peta menjadi beberapa baris. key_name menentukan nama kolom untuk kunci, dan value_name menentukan nama kolom untuk nilai.
    unnest(y) AS table(key_name,value_name)
Penting Klausa UNNEST hanya dapat digunakan untuk memperluas array atau peta. Jika Anda ingin memperluas string, konversikan terlebih dahulu string ke format JSON. Kemudian, gunakan sintaks try_cast(json_parse(array_column) as array(bigint)) untuk mengonversi data JSON menjadi array atau peta. Untuk informasi lebih lanjut, lihat Fungsi Konversi Tipe Data.

Parameter

ParameterDeskripsi
xNilai parameter ini adalah sebuah array.
column_nameNama kolom yang Anda tentukan untuk data yang diperluas dari array. Kolom ini digunakan untuk menyimpan elemen-elemen dalam array.
yNilai parameter ini adalah sebuah peta.
key_nameNama kolom yang Anda tentukan untuk data yang diperluas dari peta. Kolom ini digunakan untuk menyimpan kunci-kunci dalam peta.
value_nameNama kolom yang Anda tentukan untuk data yang diperluas dari peta. Kolom ini digunakan untuk menyimpan nilai-nilai dalam peta.

Contoh

Contoh 1:

Perluas nilai dari bidang number menjadi beberapa baris. Nilai bidang adalah sebuah array.

  • Bidang contoh
    number:[49, 50, 45, 47, 50]
  • Pernyataan kueri
    * |
    SELECT
      a
    FROM  log,
      unnest(cast(json_parse(number) AS array(bigint))) AS t(a)
  • Hasil kueri dan analisisunnest

Contoh 2:

Perluas nilai dari bidang number menjadi beberapa baris dan hitung jumlah elemen-elemennya. Nilai bidang adalah sebuah array.

  • Bidang contoh
    number:[49, 50, 45, 47, 50]
  • Pernyataan kueri
    * |
    SELECT
      sum(a) AS sum
    FROM  log,
      unnest(cast(json_parse(number) as array(bigint))) AS t(a)
  • Hasil kueri dan analisisunnest

Contoh 3:

Perluas nilai dari bidang number menjadi beberapa baris dan lakukan operasi GROUP BY pada elemen-elemen tersebut. Nilai bidang adalah sebuah array.

  • Bidang contoh
    number:[49, 50, 45, 47, 50]
  • Pernyataan kueri
    * |
    SELECT
      a, count(*) AS count
    FROM  log,
      unnest(cast(json_parse(number) as array(bigint))) AS t(a) GROUP BY a
  • Hasil kueri dan analisisunnest

Contoh 4:

Perluas nilai dari bidang number menjadi beberapa baris. Nilai bidang adalah sebuah peta.

  • Bidang contoh
    result:{
      anomaly_type:"OverThreshold"
      dim_name:"request_time"
      is_anomaly:true
      score:1
      value:"3.000000"}
  • Pernyataan kueri
    * |
    select
      key,
      value
    FROM  log,
      unnest(
        try_cast(json_parse(result) as map(varchar, varchar))
      ) as t(key, value)
  • Hasil kueri dan analisisunnest

Contoh 5:

Perluas nilai dari bidang number menjadi beberapa baris dan lakukan operasi GROUP BY pada setiap kunci. Nilai bidang adalah sebuah peta.

  • Bidang contoh
    result:{
      anomaly_type:"OverThreshold"
      dim_name:"request_time"
      is_anomaly:true
      score:1
      value:"3.000000"}
  • Pernyataan kueri
    * |
    select
      key,
      count(*) AS count
    FROM  log,
      unnest(
        try_cast(json_parse(result) as map(varchar, varchar))
      ) as t(key, value)
    GROUP BY
      key
  • Hasil kueri dan analisisunnest

Contoh 6:

Gunakan fungsi histogram untuk mendapatkan jumlah permintaan yang dikirim menggunakan setiap metode permintaan. Nilai balikannya adalah sebuah peta. Selanjutnya, gunakan klausa UNNEST untuk memperluas peta menjadi beberapa baris dan tampilkan hasil kueri serta analisis dalam diagram batang.

  • Pernyataan kueri
    * |
    SELECT
      key,
      value
    FROM(
        SELECT
          histogram(request_method) AS result
        FROM      log
      ),
      unnest(result) AS t(key, value)
  • Hasil kueri dan analisisunnest