全部產品
Search
文件中心

Simple Log Service:Lambda運算式

更新時間:Jun 30, 2024

Log Service支援您在SQL分析語句中定義Lambda運算式,並將該運算式傳遞給指定函數,豐富函數的表達。本文介紹Lambda運算式的基本文法及樣本。

文法

Lambda運算式需與函數一起使用,例如filter函數reduce函數transform函數zip_with函數map_filter函數。Lambda運算式的文法如下:

parameter -> expression

參數

說明

parameter

用於傳遞參數的標識符。

expression

運算式,大多數的MySQL運算式都可以在Lambda運算式使用。例如:

x -> x + 1
(x, y) -> x + y
x -> regexp_like(x, 'a+')
x -> x[1] / x[2]
x -> if(x > 0, x, -x)
x -> coalesce(x, 0)
x -> cast(x AS JSON)
x -> x + try(1 / 0)

樣本

樣本1:使用Lambda運算式x -> x is not null

返回數組[5, null, 7, null]中非null的元素。

  • 查詢和分析語句

    * | SELECT filter(array[5, null, 7, null], x -> x is not null)
  • 查詢和分析結果filter函數

樣本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)
  • 查詢和分析結果reduce

樣本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)
  • 查詢和分析結果map_filter

樣本4:使用Lambda運算式(x, y) -> (y, x)

將對換兩個數組的元素位置,然後提取數組中索引相同的元素組成一個新的二維數組。

  • 查詢和分析語句

    * | SELECT zip_with(array[1, 3, 5], array['a', 'b', 'c'], (x, y) -> (y, x))
  • 查詢和分析結果zip_with

樣本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)
  • 查詢和分析結果transform

其他樣本

* | 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))