以下のような各要素が配列になっているテーブルに対して、配列内の各要素に+1することを考えます。
arr |
---|
[1, 2, 3, 4, 5] |
[6, 7, 8, 9, 10] |
単純に以下のようにしてしまうと、ARRAY<INT64>とINT64の間で加算ができないというエラーが出てしまいます。
WITH T AS(
SELECT [1, 2, 3, 4, 5] AS arr UNION ALL
SELECT [6, 7, 8, 9, 10]
)
SELECT arr + 1 FROM T
なので、一旦、UNNESTしてスカラー型にした後に加算し、それらをARRAYで配列に変換する必要があります。
このようにすれば、問題なく各要素対して+1をすることができます。
WITH T AS(
SELECT [1, 2, 3, 4, 5] AS arr UNION ALL
SELECT [6, 7, 8, 9, 10]
)
SELECT ARRAY(SELECT elem + 1 FROM UNNEST(T.arr) AS elem) AS mapped FROM T
2016/11/15 追記
yancyaさんからコメントがありましたが、以下のようなUDFを作ると、SQL本体がすっきりして非常に見やすくなります。
#standardSQL
CREATE TEMPORARY FUNCTION MAP_ADD(ary ARRAY<INT64>, n INT64)
RETURNS ARRAY<INT64> AS ((SELECT ARRAY_AGG(_n + n) FROM UNNEST(ary) AS _n));
WITH T AS(
SELECT [1, 2, 3, 4, 5] AS arr UNION ALL
SELECT [6, 7, 8, 9, 10]
)
SELECT MAP_ADD(arr, 1) AS mapped FROM T