見出し画像

BigQuery ユーザー定義関数(UDF)の活用事例 ー firebase analyticsイベント ー

この記事で利用しているデータは BigQueryの一般公開データセットになります。このデータを利用するには こちら の記事を参照ください。

「BigQueryにエクスポートしたfirebase analyticsのデータってどうやってとるの?」

「unnest関数つかえばとれますよ」

「unnest?なにそれ」

見出しを追加

普段SQLを書かないようなビジネスサイドの人だったりすると、unnest関数は途端に難しくなるようです。

そこで、unnest関数を意識しなくてもデータ取得できる方法をUDFを利用して実現しました。

方法

SQLの先頭に以下を記述してください。

次にデータ取得するためのSQLを書いていきます。

例えば firebase_screen_class というキーに対応する値game_boardを取得します。

スクリーンショット 2020-12-29 23.40.30

先ほど記述したUDFの下にクエリを追加します。11行目以降に追加しました。

実行するとgame_boardが取得できると思います。

スクリーンショット 2020-12-30 12.12.58


unnest関数をUDFの中に隠した

unnestを意識させないようにUDF側にunnest関数をもたせたところがポイントになります。

eventPramValueByKey、userPropertyValueByKeyという名前のUDFがそれにあたります。結果、unnest関数を意識せずにデータ取得できるようになります。

ちなみに、unnestを利用する場合のクエリはこちらになります。


firebase イベントデータを操作する難しい部分

firebaseのイベントデータに限った話ではないのですが、今回データ操作するのに難しい要素は、RDBのようにデータが一行に整理されておらず配列や構造体が含まれているところだと思われます。

画像7

RDBのイメージ


画像8

BigQueryのデータ構造のイメージ
(引用:BigQuery 活用術: UNNEST 関数

firebaseデータのスキーマ定義においてはevent_paramsやuser_propertiesがそれに該当します。

スクリーンショット 2020-12-30 17.02.28

スクリーンショット 2020-12-29 23.34.07

スクリーンショット 2020-12-29 23.34.17

スキーマ定義


unnest関数を利用することでこれらを操作することが可能になるのですが、普段SQLを書かないようなビジネスサイドの人だったりすると途端に難しくなるようです。

この難解さを解消するため、unnest関数を使わない方法でクエリをかける方法がないか探した結果がUDFを使う方法でした。


それでもunnest関数は使えた方が効率的

自社でデータウェアハウスを構築するなどBigQueryは幅広く利用されている昨今、firebaseに限らずunnest関数を利用する頻度は高いと思われます。

unnest関数から逃げずに立ち向かうことをおすすめします。

わたしの場合、公式ドキュメントで理解できました。

みなさんもよければ分析効率UPのためにものにしてみてはいかがでしょうか?

参考にしたもの


よろしければサポートお願いします!クリエイター費として利用させていただきます!