BigQueryでネストされたデータを良い感じに展開してくれる unnest関数
ネストしているデータに対し、レガシー、スタンダードの両方でのデータの出し方を纏めてみます。
参考:
https://www.marketechlabo.com/bigquery-legacy-sql/
https://cloud.google.com/bigquery/docs/reference/standard-sql/migrating-from-legacy-sql?hl=JA
まず、ネストのデータ構造について。
この辺はXMLDBみたいな形ですが、
user
data
.data_key
.data_name
みたいに「data」の中に複数の情報が入る形になっています。
select * みたいなもので全展開すると、data_keyが複数入っている場合は出力行も複数になったりします。
(ネストの外側の部分は同値を入れて補完してくれる)
●レガシーの取得方法
select user, data.data_name
from {テーブル}
where data.data_key = 'xxx'
※そのまま展開して使っている
●スタンダードの取得方法
select user, data.data_name
from {テーブル},
unnnest(data) as data
where data.data_key = 'xxx'
※一旦unnestを指定する必要がある
スタンダードSQLを使いたいときの構造指定みたいな感じです。
bigqueryはデータの持ち方が先の時代に進んでるようだ。
コメント