BigQueryの集約と配列

BigQueryの集約と配列

BigQueryで配列を扱うときに使える関数を2つまとめる

目次

集約

GROUP BYで配列カラムをまとめたい時やCOUNTで集計するカラムが存在する時など

使用する関数:ARRAY_AGG_CONCAT

例)testテーブルのsync_dateでグループ化して、日毎のUU数を出す

sync_dateuser_idvalue
2023-09-011[‘a’, ‘b’]
2023-09-012[‘c’, ‘d’]
2023-09-013[‘e’, ‘f]

sync_dateuuvalue
2023-09-013[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]
 SELECT
	sync_date
	, COUNT(DISTINCT user_id) AS uu
	, ARRAY_CONCAT_AGG(value) AS value_arr
 FROM
	test
 GROUP BY
	sync_date

結合

別々のテーブルにある配列カラムをまとめたい時など

使用する関数:ARRAY_CONCAT

例)テーブルtest1(上部)とテーブルtest2(下部)を同値のsync_dateとnumで結合する

sync_datenumvalue
2023-09-011[‘a’, ‘b’]
2023-09-012[‘c’, ‘d’]
2023-09-013[‘e’, ‘f]
sync_datenumvalue
2023-09-011[‘g’, ‘h’]
2023-09-012[‘i’, ‘j’]
2023-09-013[‘k’, ‘l]

sync_datenumvalue
2023-09-011[‘a’, ‘b’, ‘g’, ‘h’]
2023-09-012[‘c’, ‘d’, ‘i’, ‘j’]
2023-09-013[‘e’, ‘f’, ‘k’, ‘l]
SELECT
	test1.sync_date
	, test1.num
	, ARRAY_CONCAT(IFNULL(test1.value, [“”]), IFNULL(test2.value, [“”])) AS value_arr
 FROM
	test1
 LEFT OUTER JOIN
	test2
	ON test1.sync_date = test2.sync_date
	AND test1.num = test2.num

※ARRAY_CONCATは引数にNULLが存在すると、結果もNULLになってしまうのでIFNULLで回避している

以上、参考になれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
目次