Lambda式は、高階SQL関数に引数として渡される匿名関数です。
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)
ほとんどのSQL式は、Lambda本体で使用できますが、いくつかの例外があります:
x -> 2 + (SELECT 3)
x -> max(y)
transform
を使用して配列列の要素の2乗を取得する:
SELECT numbers,
transform(numbers, n -> n * n) as squared_numbers
FROM (
VALUES
(ARRAY[1, 2]),
(ARRAY[3, 4]),
(ARRAY[5, 6, 7])
) AS t(numbers);
numbers squared_numbers [1, 2] [1, 4] [3, 4] [9, 16] [5, 6, 7] [25, 36, 49]
関数transform
は、配列の要素を安全に文字列にキャストするためにも使用できます。
SELECT transform(prices, n -> TRY_CAST(n AS VARCHAR) || '$') as price_tags
FROM (
VALUES
(ARRAY[100, 200]),
(ARRAY[30, 4])
) AS t(prices);
price_tags [100, 200, 200] [30, 4, 4]
配列列だけでなく、Lambda式内で他の列もキャプチャして取得することができます。次のステートメントは、transform
を使用して線形関数f(x) = ax + b
の値を計算するためのこの機能のショーケースを提供しています。
SELECT xvalues,
a,
b,
transform(xvalues, x -> a * x + b) as linear_function_values
FROM (
VALUES
(ARRAY[1, 2], 10, 5),
(ARRAY[3, 4], 4, 2)
) AS t(xvalues, a, b);
xvalues a b linear_function_values [1, 2] 10 5 [15, 25] [3, 4] 4 2 [14, 18]