Topik ini menjelaskan sintaksis ekspresi kondisional serta memberikan contoh penggunaannya.
Tabel berikut menjelaskan ekspresi kondisional yang didukung oleh Simple Log Service.
Jika Anda ingin menggunakan string dalam pernyataan analitik, bungkus string tersebut dengan tanda kutip tunggal (''). String yang tidak dibungkus atau yang dibungkus dengan tanda kutip ganda ("") dianggap sebagai nama field atau nama kolom. Misalnya, 'status' merepresentasikan string status, sedangkan status atau "status" merujuk pada field log status.
Expression | Syntax | Description | Supported in SQL | Supported in SPL |
CASE WHEN condition1 THEN result1 [WHEN condition2 THEN result2] [ELSE result3] END | Mengklasifikasikan data berdasarkan kondisi yang ditentukan. | √ | √ | |
IF(condition, result1) | Jika condition bernilai true, maka result1 dikembalikan. Jika tidak, null dikembalikan. | √ | √ | |
IF(condition, result1, result2) | Jika condition bernilai true, maka result1 dikembalikan. Jika tidak, result2 dikembalikan. | √ | √ | |
COALESCE(expression1, expression2, expression3...) | Mengembalikan nilai pertama yang tidak null dari beberapa ekspresi. | √ | √ | |
NULLIF(expression1, expression2) | Menilai apakah nilai dari dua ekspresi sama. Jika nilainya sama, null dikembalikan. Jika tidak, nilai dari ekspresi pertama dikembalikan. | √ | × | |
TRY(expression) | Menangkap error yang terjadi selama pemanggilan suatu ekspresi dan memastikan bahwa Simple Log Service tetap dapat melakukan kueri dan menganalisis data meskipun terjadi error. | √ | √ |
CASE WHEN expression
Ekspresi CASE WHEN digunakan untuk mengklasifikasikan data.
Sintaksis
CASE WHEN condition1 THEN result1
[WHEN condition2 THEN result2]
[ELSE result3]
ENDParameter
Parameter | Description |
condition | Nilai parameter ini adalah ekspresi kondisional. |
result1 | Hasil yang dikembalikan. |
Contoh
Contoh 1: Ekstrak informasi browser dari nilai field http_user_agent, klasifikasikan menjadi jenis Chrome, Safari, dan unknown, lalu hitung jumlah tampilan halaman (PV) untuk masing-masing jenis tersebut.
Pernyataan kueri
* | SELECT CASE WHEN http_user_agent like '%Chrome%' then 'Chrome' WHEN http_user_agent like '%Safari%' then 'Safari' ELSE 'unknown' END AS http_user_agent, count(*) AS pv GROUP BY http_user_agentHasil kueri dan analisis menunjukkan jumlah tampilan halaman (PV) untuk setiap browser (http_user_agent): Chrome (5.563), Safari (1.842), dan unknown (1.666).
Contoh 2: Kueri distribusi permintaan yang dikirim pada waktu yang berbeda.
Pernyataan kueri
* | SELECT CASE WHEN request_time < 10 then 't10' WHEN request_time < 100 then 't100' WHEN request_time < 1000 then 't1000' WHEN request_time < 10000 then 't10000' ELSE 'large' END AS request_time, count(*) AS pv GROUP BY request_timeHasil kueri dan analisis mengembalikan dua catatan: PV sebesar 1.563.542 ketika
request_timebernilait100, dan 533 ketikarequest_timebernilailarge.
IF expression
Ekspresi IF digunakan untuk mengklasifikasikan data dan bekerja secara serupa dengan ekspresi CASE WHEN.
Sintaksis
Jika condition bernilai true, maka result1 dikembalikan; jika tidak, null dikembalikan.
IF(condition, result1)Jika condition bernilai true, maka result1 dikembalikan; jika tidak, result2 dikembalikan.
IF(condition, result1, result2)
Parameter
Parameter | Description |
condition | Nilai parameter ini adalah ekspresi kondisional. |
result | Hasil yang dikembalikan. |
Contoh
Hitung proporsi permintaan dengan kode status 200 terhadap total permintaan.
Pernyataan kueri
* | SELECT sum(IF(status = 200, 1, 0)) * 1.0 / count(*) AS status_200_percentagHasil kueri dan analisis: Nilai
status_200_percentageadalah0,884686775009848.
COALESCE expression
Ekspresi COALESCE mengembalikan nilai pertama yang tidak null dari daftar ekspresi yang diberikan.
Sintaksis
COALESCE(expression1, expression2, expression3...)Parameter
Parameter | Description |
expression | Nilai parameter ini adalah ekspresi bertipe apa pun. |
Contoh
Hitung rasio pengeluaran hari kemarin terhadap pengeluaran pada hari yang sama bulan lalu.
Pernyataan kueri
* | SELECT compare("yesterday's expenses", 604800) AS diff FROM ( SELECT COALESCE(sum(PretaxAmount), 0) AS "yesterday's expenses" FROM log )Hasil kueri dan analisis
Nilai 6.514.393.413,0 menunjukkan pengeluaran hari kemarin.
Nilai 19.578.267.596,0 menunjukkan pengeluaran pada hari yang sama bulan lalu.
Nilai 0,33273594719539659 menunjukkan rasio pengeluaran hari kemarin terhadap pengeluaran pada hari yang sama bulan lalu.
NULLIF expression
Ekspresi NULLIF membandingkan nilai dari dua ekspresi. Jika nilainya sama, ekspresi ini mengembalikan null; jika berbeda, nilai dari ekspresi pertama dikembalikan.
Sintaksis
NULLIF(expression1, expression2)Parameter
Parameter | Description |
expression | Nilai parameter ini adalah ekspresi skalar yang valid. |
Contoh
Bandingkan nilai field client_ip dan host. Jika nilainya berbeda, kembalikan nilai field client_ip.
Pernyataan kueri
* | SELECT NULLIF(client_ip,host)Hasil kueri dan analisis: Kueri mengembalikan satu kolom
_col0, yang menampilkan hasil dariNULLIF(client_ip,host). Fungsi ini mengembalikan nilaiclient_ipjikaclient_ipberbeda darihost, dan mengembalikan NULL jika keduanya sama.
TRY expression
Ekspresi TRY menangkap error yang terjadi selama evaluasi suatu ekspresi dan memastikan bahwa Simple Log Service tetap dapat menjalankan kueri serta menganalisis data meskipun terjadi error.
Sintaksis
TRY(expression)Parameter
Parameter | Description |
expression | Nilai parameter ini adalah ekspresi bertipe apa pun. |
Contoh
Jika terjadi error saat memanggil ekspresi regexp_extract, ekspresi TRY akan menangkap error tersebut sehingga Simple Log Service tetap melanjutkan kueri dan analisis data, serta mengembalikan hasilnya.
Pernyataan kueri
* | SELECT TRY(regexp_extract(request_uri, '.*\/(file.*)', 1)) AS file, count(*) AS count GROUP BY fileHasil kueri dan analisis menunjukkan jumlah untuk setiap nama file yang diekstraksi, misalnya: file-5 (851), file-7 (928), file-3 (837), dan file-4 (863).