[BigQuery]アンネストって何?どんな処理が行われているの?

今回はBigQuery上で行われるアンネスト(UNNEST)処理についてご紹介します。
はじめに
最近私はBigQueryを使ってデータの処理を学び始めたのですが、そこで個人的に面白いと感じたテーブル設定「アンネスト」という処理について、そしてBigQuery上でどんな操作を行うのかご紹介したいと思います。
アンネストって何?
まずアンネスト(Unnest)とは本来のデータが入れ子構造になっているところをあえて横並びにばらすことです。こうすることで本来別の場所にあったデータを一緒に扱うことができ、マトリョーシカ状になったデータを一つ一つ開けることがないためSQLやBigQueryを用いたフラットなデータ分析をする際に行われる処理です。
アンネストの手法としてUNNEST関数を使う手法と一つ一つ指定して収納場所を変えていく手法がありますが、今回自分は後者でUNNEST処理を行なったため例を用いながら紹介して行きます。
イメージはこんな感じ!
例えば夜9時に何をしていたのか、を4人に聞いて集めたデータがあるとします。その時のデータは通常下図のように収納されています。
これをアンネスト処理を行うと以下のように横に広がったデータ構造になります。
「あなたは夜9時に何をしていましたか?」という質問に対して、「はい」なら”1″を「いいえ」なら”0″を答えているように見えますね!
実際に書いてみた
上記のイベントをBigQuery上でアンネストすると以下のようなコードになります。↓
CASE WHEN event_name = 'ランニング' THEN 1 ELSE 0 END AS running,
CASE WHEN event_name = '夕食食べていた' THEN 1 ELSE 0 END AS dinner,
CASE WHEN event_name = '入浴' THEN 1 ELSE 0 END AS bathing,
CASE WHEN event_name = '映画鑑賞' THEN 1 ELSE 0 END AS movie
これによって”event_name”の中に収納されていたeventをばらけさせて上図のように「”0″と”1″」のテーブルに収納し直すことができます。プログラミングをされてきた方なら「なんかダミー変数の処理みたいだな」と思われるかもしれません!
さいごに
このアンネスト処理では
CASE WHEN event_name = 'abc’
のabc部分を指定する必要があるので、「少しめんどくさいな」と思う方はChatPGTに頼んでみても良いですね!
今回あえて入れ子になっているデータを横にバラす、というのは一見非効率なように見えますがフラットなデータ分析を行うためには必要なデータ処理だということを学びました。またアンネスト処理は今回の方法以外にも様々な方法があるため、より自分に合った処理方法を見つけてい区のも良いですね!
以上BigQueryに関するアンネストというデータ処理方法をご紹介いたしました!