Question

Firebase Blocks v3 (日本語翻訳記事)

  • 11 December 2019
  • 0 replies
  • 228 views

Userlevel 2

本記事は github で提供されている Firebase Blocks 🇺🇸の Readme の翻訳です。


この block の役割


BigQueryにあるFirebaseデータには大きな分析ポテンシャルがありますが、クエリーできるようにするのは簡単ではありません。それは以下のような理由があります:



  • 毎日新しいテーブルが(events_YYYYMMDDという名前で)作成されてしまうため。これによりBigQueryのコストは下がりますが、クエリーがより複雑になってしまいます。

  • どの event_name も、 event_params.keyevent_params.value のようなネストされた Key-Value 型のペアになっており、クエリーするときに複雑な UNNEST 処理を行う必要があるためです。


  • user_properties も同様に Key-Value のペアになっていて何階層にもネストしているからです。


この block でできること




  • 期間を選択して魔法のようにパーティションされたテーブルから必要なデータを選択できるネイティブな方法を生成します。




  • セッション化(Sessionization)を追加できます。(これはFirebaseデータにはありません)

    [訳注] 「セッション化」についてはこちらの記事も参考にしてください。




  • リテンションのコホート分析を追加できます。




  • event_name または event_params.keyuser_properties の組み合わせのディメンションを作成できます。




  • データのモデリングを開始して価値を引き出すための最初のステップとして最適です。




仕組み


どの Firebase スキーマも類似点は多いものの event type と user properties は異なるため、この block が event 構造に沿ったユニークなスキーマを生成します。Python notebook を使用して Looker API とご自身のデータベースに接続してLookMLを自動生成します。


利用方法


Looker側の準備



  1. こちらの記事を参考にしてリポジトリーからクローンしてプロジェクトを新規作成します。 https://docs.looker.com/data-modeling/getting-started/create-projects#cloning_a_public_git_repository

  2. ご自身でお持ちの Git リポジトリーに追加して、events.view.lkml に記述されているコネクション名と event テーブルの名称を適切なものに変更し、本番にプッシュします。


  3. https://docs.looker.com/admin-options/settings/users#api3_keys を参考にAPI3キーを作成します。


Pythonのコードを実行してモデルを生成します



  1. Firebase Python Notebook をダウンロードして、お好みの Notebook ランナーで開いてください。ここでは Google Colab https://github.com/llooker/firebase_block_v3/blob/master/Firebase_Block_v3.ipynb を利用しています。


  2. base_urlclient_id , client_secret (先ほど作成したAPIキー) を入力します。

  3. Python Notebookを実行します。


  4. event_properties セクションの実行結果をコピーして events_generated.view.lkml に貼り付けます。(ファイル全体を置き換え)


  5. user_properties セクションの実行結果をコピーして user_properties_generated.view.lkml に貼り付けます。(ファイル全体を置き換え)

  6. 完成!


トラブルシューティング



  • もし同じ名前でディメンションが複製されてしまったら(Firebaseでは同じイベント名称、キー名称が許容されています。ただし、タイプが異なります)、Pythonのコードで、eventの “Event Properties” の部分を次のように変更してください:

    print("dimension: "+event_name+"."+key+ "_" + type[0]+" {")

    @nishimix さん、ご指摘ありがとう!


追記(2020年10月7日)


sessions.view.lkml ファイルに記述されている datagroup のサイクルは、events の更新があったタイイングでトリガーされているように設定されていますので、PDTの作成サイクルはほぼリアルタイムで更新されるようになっています。こちらの設定は、導入時に見直していただければと思います。


0 replies

Be the first to reply!

Reply