13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BigQuery Standard SQLで配列内の各要素に対して操作をする方法

Last updated at Posted at 2016-11-14

以下のような各要素が配列になっているテーブルに対して、配列内の各要素に+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
13
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?