【SQL】unnestってなんだ
先日同様に、Firebase A/B Testing の結果をBigQueryで出力したところ、見慣れないunnest
という演算子があったのでメモ🔰
結論
unnest
演算子は、ARRAY
やREPEATED
なカラムをフラット化し、一行にしたテーブルを返します。
公式のサンプルを拝借すると下記のような感じで、ARRAY
が展開されているのがわかります。
SELECT * FROM UNNEST(['foo', 'bar', 'baz', 'qux', 'corge', 'garply', 'waldo', 'fred']) AS element WITH OFFSET AS offset ORDER BY offset; +----------+--------+ | element | offset | +----------+--------+ | foo | 0 | | bar | 1 | | baz | 2 | | qux | 3 | | corge | 4 | | garply | 5 | | waldo | 6 | | fred | 7 | +----------+--------+
また、Google AnalyticsのデータをBigQueryで使う際に登場するuser_properties
のようなREPEATED
なカラムも下記のようにして簡単にアクセスできるようになります。
... FROM `analytics_hoge.events_*`, UNNEST(user_properties) AS userProperty WHERE (_TABLE_SUFFIX between '20201105' AND '20201202') AND userProperty.key = "firebase_exp_34" ...
てな感じで本日も以上となります🍺
参考
- https://cloud.google.com/bigquery/docs/reference/standard-sql/arrays?hl=ja#flattening_arrays
- https://medium.com/eureka-engineering/bigquery-unnest-100percent-3d28560b4f0