Log Service支援您在SQL分析語句和SPL語句中定義Lambda運算式,並將該運算式傳遞給指定函數,豐富函數的表達。本文介紹Lambda運算式的基本文法及樣本。
文法
Lambda運算式需與函數一起使用,例如filter函數、reduce函數、transform函數、zip_with函數、map_filter函數。Lambda運算式的文法如下:
parameter -> expression
參數 | 說明 |
parameter | 用於傳遞參數的標識符。 |
expression | 運算式,大多數的MySQL運算式都可以在Lambda運算式使用。例如:
|
樣本
樣本1:使用Lambda運算式x -> x is not null
返回數組[5, null, 7, null]中非null的元素。
查詢和分析語句
* | SELECT filter(array[5, null, 7, null], x -> x is not null)
查詢和分析結果
樣本2:使用Lambda運算式0, (s, x) -> s + x, s -> s
返回數組[5, 20, 50]中各個元素相加的結果。
查詢和分析語句
* | SELECT reduce(array[5, 20, 50], 0, (s, x) -> s + x, s -> s)
查詢和分析結果
樣本3:使用Lambda運算式(k,v) -> v > 10
將兩個數組映射為一個Map且Map中的索引值大於10。
查詢和分析語句
* | SELECT map_filter(map(array['class01', 'class02', 'class03'], array[11, 10, 9]), (k,v) -> v > 10)
查詢和分析結果
樣本4:使用Lambda運算式(x, y) -> (y, x)
將對換兩個數組的元素位置,然後提取數組中索引相同的元素組成一個新的二維數組。
查詢和分析語句
* | SELECT zip_with(array[1, 3, 5], array['a', 'b', 'c'], (x, y) -> (y, x))
查詢和分析結果
樣本5:使用Lambda運算式x -> coalesce(x, 0) + 1
將數組[5, NULL, 6]中的各個元素加1,然後返回。如果數組中包含null元素,則轉換為0,再加1。
查詢和分析語句
* | SELECT transform(array[5, NULL, 6], x -> coalesce(x, 0) + 1)
查詢和分析結果
其他樣本
* | 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))