Pelajari sintaksis dan penggunaan fungsi serta operator map di SLS.
SLS mendukung fungsi dan operator map berikut.
|
Nama fungsi |
Sintaksis |
Deskripsi |
SQL |
SPL |
|
[x] |
Mengembalikan nilai untuk kunci tertentu dari sebuah map. |
√ |
× |
|
|
cardinality(x) |
Mengembalikan cardinality (ukuran) sebuah map. |
√ |
× |
|
|
element_at(x, key) |
Mengembalikan nilai untuk kunci tertentu dari sebuah map. |
√ |
√ |
|
|
histogram(x) |
Mengelompokkan hasil kueri dan analisis ke dalam sebuah map. |
√ |
× |
|
|
histogram_u(x) |
Mengelompokkan hasil dalam format multi-baris dan multi-kolom. |
√ |
× |
|
|
map() |
Mengembalikan map kosong. |
√ |
√ |
|
|
map(x, y) |
Membuat map dari dua array. |
√ |
√ |
|
|
map_agg(x, y) |
Membuat map dengan x sebagai kunci dan y sebagai nilai. Jika y memiliki beberapa nilai, salah satu dipilih secara acak. |
√ |
× |
|
|
map_concat(x, y...) |
Menggabungkan beberapa map menjadi satu map. |
√ |
√ |
|
|
map_filter(x, lambda_expression) |
Menyaring entri dalam map berdasarkan ekspresi lambda. |
√ |
√ |
|
|
map_keys(x) |
Mengekstraksi semua kunci dari sebuah map dan mengembalikannya sebagai array. |
√ |
√ |
|
|
map_values(x) |
Mengekstraksi semua nilai dari sebuah map dan mengembalikannya sebagai array. |
√ |
√ |
|
|
multimap_agg(x, y) |
Membuat map dengan x sebagai kunci dan y sebagai array nilai. Jika y memiliki beberapa nilai, semuanya dikumpulkan. |
√ |
× |
Operator subscript
Operator subscript mengembalikan nilai dari kunci tertentu dalam sebuah map.
Sintaksis
[x]
Parameter
|
Parameter |
Deskripsi |
|
x |
Kunci yang akan diakses. Harus bertipe varchar. |
Tipe nilai kembalian
Tipe data hasilnya sama dengan tipe nilai dari map tersebut.
Contoh
Dalam log transformasi data SLS, field etl_context bertipe map. Gunakan operator subscript untuk mengambil nilai project dari etl_context.
-
Field contoh
etl_context: { project:"datalab-148****6461-cn-chengdu" logstore:"internal-etl-log" consumer_group:"etl-83****4d1965" consumer:"etl-b2d40ed****c8d6-291294" shard_id:"0" } -
Pernyataan kueri dan analisis
* | SELECT try_cast(json_parse(etl_context) AS map(varchar, varchar))['project'] -
Kolom
_col0mengembalikandatalab-148****6461-cn-chengdu, yaitu nilai project yang diekstraksi dari etl_context.
Fungsi cardinality
Fungsi cardinality mengembalikan cardinality (jumlah elemen) sebuah map.
Sintaksis
cardinality(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Map input. |
Tipe nilai kembalian
bigint
Contoh
Hitung permintaan berdasarkan metode dengan histogram, lalu hitung jumlah metode unik menggunakan fungsi cardinality.
-
Pernyataan kueri dan analisis
* | SELECT histogram(request_method) AS request_method, cardinality(histogram(request_method)) AS "kinds" -
Hasil kueri dan analisis: Kolom
request_methodmengembalikan{"DELETE":5,"POST":7,"GET":41,"PUT":4}, dan kolomkindsmengembalikan4, yang menunjukkan terdapat empat metode permintaan.
Fungsi element_at
Fungsi element_at mengembalikan nilai untuk kunci tertentu dari sebuah map.
Sintaksis
element_at(x, key)
Parameter
|
Parameter |
Deskripsi |
|
x |
Parameter harus berupa map. |
|
key |
Kunci dalam map. |
Tipe nilai kembalian
Tipe data hasilnya sama dengan tipe nilai dari map tersebut.
Contoh
Hitung permintaan berdasarkan metode dengan histogram, lalu ambil jumlah DELETE menggunakan fungsi element_at.
-
Pernyataan kueri dan analisis
* | SELECT histogram(request_method) AS request_method, element_at(histogram(request_method),'DELETE') AS "count" -
Hasil kueri dan analisis: Kolom request_method mengembalikan
{"HEAD":686,"DELETE":13619,"POST":34365,"GET":138097,"PUT":34056}, dan kolom count mengembalikan13619(jumlah permintaan DELETE).
Fungsi histogram
Fungsi histogram mengelompokkan hasil sebagai map JSON, mirip dengan * | SELECT count(*) GROUP BY x.
Sintaksis
histogram(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Parameter dapat bertipe data apa pun. |
Tipe nilai kembalian
map
Contoh
Hitung permintaan berdasarkan metode dengan fungsi histogram.
-
Pernyataan kueri dan analisis
* | SELECT histogram(request_method) AS request_method -
Hasilnya adalah
{"HEAD":30,"DELETE":564,"POST":1382,"GET":5420,"PUT":1334}. Metode GET memiliki jumlah tertinggi, yaitu 5.420.
Fungsi histogram_u
Fungsi histogram_u mengelompokkan data dan mengembalikan hasil dalam format multi-baris dan multi-kolom.
Sintaksis
histogram_u(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Parameter dapat bertipe data apa pun. |
Tipe nilai kembalian
bigint
Contoh
Hitung permintaan berdasarkan metode dengan histogram_u dan tampilkan hasilnya sebagai grafik kolom.
-
Pernyataan kueri dan analisis
*|SELECT histogram_u(request_method) as request_method -
Hasil kueri dan analisis

Fungsi map
Fungsi map mengembalikan map kosong atau membuat map dari dua array.
Sintaksis
-
Mengembalikan map kosong.
map() -
Membuat map dari dua array.
map(x,y)
Parameter
|
Parameter |
Deskripsi |
|
x |
Parameter harus berupa array. |
|
y |
Parameter harus berupa array. |
Tipe nilai kembalian
map
Contoh
-
Contoh 1: Field class dan number adalah array. Gunakan fungsi map untuk membuat pemetaan kunci-nilai antara setiap kelas dan jumlah siswanya.
-
Field contoh
class:["class01","class02","class03","class04","class05"] number:[49,50,45,47,50] -
Pernyataan kueri dan analisis
* | SELECT map(try_cast(json_parse(class) AS array(varchar)) ,try_cast(json_parse(number) AS array(bigint))) -
Hasil kueri dan analisis adalah
{"class01":49,"class03":45,"class02":50,"class05":50,"class04":47}.
-
-
Contoh 2: Mengembalikan map kosong.
-
Pernyataan kueri dan analisis
*| SELECT map() -
Hasilnya adalah
{}, yaitu map kosong.
-
Fungsi map_agg
Fungsi map_agg memetakan x dan y ke dalam sebuah map, di mana x adalah kunci dan y adalah nilai. Jika terdapat beberapa nilai untuk y, satu nilai dipilih secara acak.
Sintaksis
map_agg(x, y)
Parameter
|
Parameter |
Deskripsi |
|
x |
Parameter dapat bertipe data apa pun. |
|
y |
Parameter dapat bertipe data apa pun. |
Tipe nilai kembalian
map
Contoh
Petakan request_method (kunci) dan request_time (nilai) ke dalam sebuah map.
-
Field contoh
request_method:POST request_time:80 -
Pernyataan kueri dan analisis
* | SELECT map_agg(request_method,request_time) -
Hasil kueri dan analisis adalah
{"HEAD":47.0,"DELETE":26.0,"POST":80.0,"GET":51.0,"PUT":49.0}.
Fungsi map_concat
Fungsi map_concat menggabungkan beberapa map menjadi satu map.
Sintaksis
map_concat(x, y)
Parameter
|
Parameter |
Deskripsi |
|
x |
Parameter harus berupa map. |
|
y |
Parameter harus berupa map. |
Tipe nilai kembalian
map
Contoh
Dalam log transformasi data SLS, baik etl_context maupun progress bertipe map. Gunakan map_concat untuk menggabungkannya.
-
Field contoh
etl_context: { project:"datalab-148****6461-cn-chengdu" logstore:"internal-etl-log" consumer_group:"etl-83****4d1965" consumer:"etl-b2d40ed****c8d6-291294" shard_id:"0" } progress: { accept:3 dropped:0 delivered:3 failed:0 } -
Pernyataan kueri dan analisis
* | SELECT map_concat( cast ( json_parse(etl_context) AS map(varchar, varchar) ), cast (json_parse(progress) AS map(varchar, varchar)) ) -
Hasil kueri dan analisis
null {"consumer_group":"etl-83d5****071d1911974d1965","shard_id":"1","dropped":"0","project":"atalab-14****66461-cn-chengdu","delivered":"2","failed":"0","logstore":"internal-etl-log","consumer":"etl-b****510a8ee7a9532c8d6-291294","accept":"2"}
Fungsi map_filter
Fungsi map_filter menyaring map berdasarkan ekspresi lambda.
Sintaksis
map_filter(x, lambda_expression)
Parameter
|
Parameter |
Deskripsi |
|
x |
Parameter harus berupa map. |
|
lambda_expression |
Ekspresi lambda. Ekspresi lambda. |
Tipe nilai kembalian
map
Contoh
Petakan dua array ke map baru, lalu saring nilai null. Ekspresi (k, v) -> v is not null adalah ekspresi lambda.
-
Pernyataan kueri dan analisis
* | SELECT map_filter(map(array[10, 20, 30], array['a', NULL, 'c']), (k, v) -> v is not null) -
Hasil kueri dan analisis adalah
{"10":"a","30":"c"}.
Fungsi map_keys
Fungsi map_keys mengekstraksi semua kunci dari sebuah map dan mengembalikannya sebagai array.
Sintaksis
map_keys(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Parameter harus berupa map. |
Tipe nilai kembalian
array
Contoh
Dalam log transformasi data SLS, field etl_context bertipe map. Gunakan map_keys untuk mengekstraksi semua kunci dari etl_context.
-
Field contoh
etl_context: { project:"datalab-148****6461-cn-chengdu" logstore:"internal-etl-log" consumer_group:"etl-83****4d1965" consumer:"etl-b2d40ed****c8d6-291294" shard_id:"0" } -
Pernyataan kueri dan analisis
* | SELECT map_keys(try_cast(json_parse(etl_context) AS map(varchar, varchar))) -
Hasil kueri dan analisis adalah
["consumer","consumer_group","logstore","project","shard_id"].
Fungsi map_values
Fungsi map_values mengekstraksi semua nilai dari sebuah map dan mengembalikannya sebagai array.
Sintaksis
map_values(x)
Parameter
|
Parameter |
Deskripsi |
|
x |
Parameter harus berupa map. |
Tipe nilai kembalian
array
Contoh
Dalam log transformasi data SLS, field etl_context bertipe map. Gunakan map_values untuk mengekstraksi semua nilai dari etl_context.
-
Field contoh
etl_context: { project:"datalab-148****6461-cn-chengdu" logstore:"internal-etl-log" consumer_group:"etl-83****4d1965" consumer:"etl-b2d40ed****c8d6-291294" shard_id:"0" } -
Pernyataan kueri dan analisis
* | SELECT map_values(try_cast(json_parse(etl_context) AS map(varchar, varchar))) -
Hasilnya adalah array semua nilai dalam
etl_context:["datalab-148****6461-cn-chengdu", "internal-etl-log", "etl-83****4d1965", "etl-b2d40ed****c8d6-291294", "0"].
Fungsi multimap_agg
Fungsi multimap_agg memetakan x dan y ke dalam sebuah map. Dalam map ini, x adalah kunci dan y adalah nilai, yang berupa array. Jika terdapat beberapa nilai y untuk kunci yang sama, semuanya dikumpulkan ke dalam array tersebut.
Sintaksis
multimap_agg(x, y)
Parameter
|
Parameter |
Deskripsi |
|
x |
Parameter dapat bertipe data apa pun. |
|
y |
Parameter dapat bertipe data apa pun. |
Tipe nilai kembalian
map
Contoh
Petakan request_method (kunci) ke request_time (array nilai) menggunakan multimap_agg.
-
Field contoh
request_method:POST request_time:80 -
Pernyataan kueri dan analisis
* | SELECT multimap_agg(request_method,request_time) -
Hasilnya memetakan setiap metode HTTP ke array nilai
request_time. Misalnya, DELETE dipetakan ke [28.0, 80.0, 21.0, 54.0, ...], POST dipetakan ke [77.0, 27.0, 52.0, 25.0, ...], dan seterusnya.