すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:ラムダ式

最終更新日:Jun 21, 2026

Log Service では、SQL および Simple Log Service Processing Language (SPL) ステートメント内でラムダ式を定義し、特定の関数に渡すことで機能を拡張できます。このトピックでは、ラムダ式の構文を説明し、使用例を示します。

構文

ラムダ式は、filter 関数reduce 関数transform 関数zip_with 関数、または map_filter 関数などの高階関数と共に使用する必要があります。ラムダ式の構文は次のとおりです。

parameter -> expression

パラメーター

説明

parameter

入力パラメーターの識別子。

expression

評価する式。ラムダ式では、ほとんどの MySQL 式が有効です。例:

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:null 要素のフィルタリング

配列 [5, null, 7, null] から null ではない要素を返します。

  • クエリ・分析ステートメント

    * | SELECT filter(array[5, null, 7, null], x -> x is not null)
  • 結果は [5,7] です。

例 2:配列要素の合計

配列 [5, 20, 50] のすべての要素の合計を返します。

  • クエリ・分析ステートメント

    * | SELECT reduce(array[5, 20, 50], 0, (s, x) -> s + x, s -> s)
  • 結果は 75 です (5+20+50 の累積和)。

例 3:値によるマップのフィルタリング

2 つの配列からマップを作成し、値が 10 より大きいキーと値のペアのみを保持します。

  • クエリ・分析ステートメント

    * | SELECT map_filter(map(array['class01', 'class02', 'class03'], array[11, 10, 9]), (k,v) -> v > 10)
  • 結果は {"class01":11} です。この関数は、値が 10 より大きいキーと値のペアのみを保持します。

例 4:ペアの要素の入れ替え

この例では、2 つの配列から同じインデックスの要素でペアを構成します。次にラムダ式を適用して各ペアの要素を入れ替え、新しいネストされた配列を作成します。

  • クエリ・分析ステートメント

    * | SELECT zip_with(array[1, 3, 5], array['a', 'b', 'c'], (x, y) -> (y, x))
  • 結果は [["a",1],["b",3],["c",5]] です。ラムダ式は、各ペアの要素の順序を入れ替え、それらをネストされた配列として結合します。

例 5:null 処理を伴う要素の変換

配列 [5, NULL, 6] の各要素に 1 を加算します。要素が null の場合は、先に 0 に変換します。

  • クエリ・分析ステートメント

    * | SELECT transform(array[5, NULL, 6], x -> coalesce(x, 0) + 1)
  • 結果は [6,1,7] です。

その他の例

* | SELECT filter(array[], x -> true)
* | SELECT map_filter(map(array[],array[]), (k, v) -> true)
* | SELECT reduce(array[5, 6, 10, 20], -- 算術平均を計算します: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))