Bidang log dapat berisi nilai array atau map. Gunakan klausa UNNEST untuk mengekspansi nilai-nilai tersebut menjadi beberapa baris guna kueri dan analisis.
Sintaks
-
Ekspansi sebuah array menjadi beberapa baris dalam satu kolom bernama column_name.
UNNEST(x) AS table_alias(column_name) -
Ekspansi sebuah map menjadi beberapa baris dengan kolom bernama key_name dan value_name.
UNNEST(y) AS table(key_name,value_name)
Jika data Anda berupa string, uraikan menjadi objek JSON dan ubah tipe datanya ke tipe array atau map yang diperlukan. Misalnya, gunakan try_cast(json_parse(array_column) as array(bigint)). Lihat fungsi konversi tipe untuk detail selengkapnya.
Parameter
|
Parameter |
Deskripsi |
|
x |
Ekspresi yang menghasilkan array. |
|
column_name |
Nama kolom output yang akan berisi elemen |
|
y |
Ekspresi yang menghasilkan map. |
|
key_name |
Nama kolom output yang akan berisi kunci |
|
value_name |
Nama kolom output yang akan berisi nilai |
Contoh
Contoh 1
Ekspansi nilai array dari bidang number menjadi beberapa baris.
-
Bidang contoh
number:[49, 50, 45, 47, 50] -
Pernyataan kueri dan analisis
* | SELECT a FROM log, UNNEST(cast(json_parse(number) AS array(bigint))) AS t(a) -
Kueri mengembalikan kolom a dengan elemen yang telah diekspansi: 49, 50, 45, 47, dan 50.
Contoh 2
Ekspansi nilai array dari bidang number menjadi beberapa baris dan hitung jumlah totalnya.
-
Bidang contoh
Contoh ini menunjukkan satu log. Jumlah total dihitung dari semua log yang cocok dengan mengagregasi nilai number.
number:[49, 50, 45, 47, 50] -
Pernyataan kueri dan analisis
* | SELECT sum(a) AS sum FROM log, UNNEST(cast(json_parse(number) as array(bigint))) AS t(a) -
Kueri mengembalikan kolom sum dengan nilai 368.248, yaitu total semua elemen
numberdari log yang cocok.
Contoh 3
Ekspansi nilai array dari bidang number menjadi beberapa baris dan kelompokkan elemen-elemennya.
-
Bidang contoh
number:[49, 50, 45, 47, 50] -
Pernyataan kueri dan analisis
* | SELECT a, count(*) AS count FROM log, UNNEST(cast(json_parse(number) as array(bigint))) AS t(a) GROUP BY a -
Hasilnya menampilkan setiap elemen beserta jumlah kemunculannya. Misalnya, elemen 50 muncul sebanyak 1.194 kali, sedangkan elemen 47, 49, dan 45 masing-masing muncul 597 kali.
Contoh 4
Ekspansi nilai map dari bidang result menjadi beberapa baris dan kolom.
-
Bidang contoh
result:{ anomaly_type:"OverThreshold" dim_name:"request_time" is_anomaly:true score:1 value:"3.000000"} -
Pernyataan kueri dan analisis
* | select key, value FROM log, UNNEST( try_cast(json_parse(result) as map(varchar, varchar)) ) AS t(key, value)
Contoh 5
Ekspansi nilai map dari bidang result dan kelompokkan berdasarkan kunci.
-
Bidang contoh
result:{ anomaly_type:"OverThreshold" dim_name:"request_time" is_anomaly:true score:1 value:"3.000000"} -
Pernyataan kueri dan analisis
* | select key, count(*) AS count FROM log, UNNEST( try_cast(json_parse(result) as map(varchar, varchar)) ) AS t(key, value) GROUP BY key -
Hasilnya menunjukkan
countsebesar 5.422 untuk masing-masing dari lima kunci (anomaly_type,dim_name,is_anomaly,score, danvalue), yang menegaskan bahwa setiap log berisi pasangan kunci-nilai yang sama.
Contoh 6
Gunakan fungsi histogram untuk menghitung jumlah permintaan berdasarkan metode, lalu ekspansi map hasilnya dengan UNNEST untuk menampilkan data pada grafik kolom.
-
Pernyataan kueri dan analisis
* | SELECT key, value FROM( SELECT histogram(request_method) AS result FROM log ), UNNEST(result) AS t(key, value) -
Hasil kueri dan analisis
