Layanan Log memungkinkan Anda mendefinisikan ekspresi lambda dalam pernyataan SQL dan Simple Log Service Processing Language (SPL), lalu meneruskannya ke fungsi tertentu untuk memperluas fungsionalitasnya. Topik ini menjelaskan sintaks ekspresi lambda dan memberikan contoh penggunaannya.
Sintaks
Ekspresi lambda harus digunakan bersama fungsi orde tinggi, seperti fungsi filter, fungsi reduce, fungsi transform, fungsi zip_with, atau fungsi map_filter. Sintaks ekspresi lambda adalah sebagai berikut:
parameter -> expression
|
Parameter |
Description |
|
parameter |
Sebuah identifier untuk parameter input. |
|
expression |
Ekspresi yang akan dievaluasi. Sebagian besar ekspresi MySQL valid dalam ekspresi lambda. Contohnya:
|
Contoh
Contoh 1: Filter elemen null
Mengembalikan elemen non-null dari array [5, null, 7, null].
-
Query and analysis statement
* | SELECT filter(array[5, null, 7, null], x -> x is not null) -
Hasilnya adalah
[5,7].
Contoh 2: Jumlahkan elemen array
Mengembalikan jumlah semua elemen dalam array [5, 20, 50].
-
Query and analysis statement
* | SELECT reduce(array[5, 20, 50], 0, (s, x) -> s + x, s -> s) -
Hasilnya adalah
75(jumlah kumulatif dari 5 + 20 + 50).
Contoh 3: Filter map berdasarkan nilai
Membuat map dari dua array dan hanya menyimpan pasangan kunci-nilai dengan nilai lebih besar dari 10.
-
Query and analysis statement
* | SELECT map_filter(map(array['class01', 'class02', 'class03'], array[11, 10, 9]), (k,v) -> v > 10) -
Hasilnya adalah
{"class01":11}. Fungsi ini hanya menyimpan pasangan kunci-nilai dengan nilai lebih besar dari 10.
Contoh 4: Tukar elemen berpasangan
Contoh ini memasangkan elemen dari dua array pada indeks yang sama, lalu menerapkan ekspresi lambda untuk menukar elemen dalam setiap pasangan sehingga menghasilkan array bersarang baru.
-
Query and analysis statement
* | SELECT zip_with(array[1, 3, 5], array['a', 'b', 'c'], (x, y) -> (y, x)) -
Hasilnya adalah
[["a",1],["b",3],["c",5]]. Ekspresi lambda menukar urutan setiap pasangan elemen dan menggabungkannya menjadi array bersarang.
Contoh 5: Transformasi elemen dengan penanganan null
Menambahkan 1 ke setiap elemen dalam array [5, NULL, 6]. Jika suatu elemen bernilai null, elemen tersebut terlebih dahulu dikonversi menjadi 0.
-
Query and analysis statement
* | SELECT transform(array[5, NULL, 6], x -> coalesce(x, 0) + 1) -
Hasilnya adalah
[6,1,7].
Contoh lainnya
* | SELECT filter(array[], x -> true)
* | SELECT map_filter(map(array[],array[]), (k, v) -> true)
* | SELECT reduce(array[5, 6, 10, 20], -- calculates arithmetic average: 10.25
cast(row(0.0, 0) AS row(sum double, count integer)),
(s, x) -> cast(row(x + s.sum, s.count + 1) AS row(sum double, count integer)),
s -> if(s.count = 0, null, s.sum / s.count))
* | SELECT reduce(array[2147483647, 1], cast(0 AS bigint), (s, x) -> s + x, s -> s)
* | SELECT reduce(array[5, 20, null, 50], 0, (s, x) -> s + x, s -> s)
* | SELECT transform(array[array[1, null, 2], array[3, null]], a -> filter(a, x -> x is not null))
* | SELECT zip_with(array['a', 'b', 'c'], array['d', 'e', 'f'], (x, y) -> concat(x, y))