Firebase Analytics

Firebase Analyticsの新しいBigQueryスキーマを試す

こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。

さて、GoogleさんからFirebase Analyticsについて突然メールが来まして、超テキトーに意訳するとこんな内容です。

“Firebase AnalyticsのBigQueryエクスポートは、従来Android/iOSのデータを別々のデータセットとして生成してました。
しかし、今後はひとつのデータセットになります。
また、スキーマも新しくなります。
そう、数週間以内にね。”

なかなかサラっとすごい事を言ってきますね。。

とりいそぎ、新しいスキーマがどんなものか見てました。

BigQuery Export schema

今まではuser_dimとevent_dimという2つの列だけ存在して、中身がネストされまくりのキモいスキーマでした。
しかし新しいスキーマはevent単位(≒ヒット単位)のスキーマになる訳です。

で、メールにも書いてありましたが、上記リンク先のスキーマ情報ページの下部に「従来のスキーマ」を新スキーマに変換して新しいテーブルを作成するスクリプトが載ってます。

では早速試します。

1. migration_script.sqlとmigration.shをダウンロードする

https://support.google.com/firebase/answer/9002261 を開き、
“Use this script to migrate existing BigQuery datasets from the old export schema to the new one”をクリックして開くとmigration_script.sqlとmigration.shが掲載されてるので、ダウンロードします。

2. ダウンロードしたmigration.shファイルを修正する

migration.shを修正します。
修正すべき箇所は、日本語のコメントをかいてある下記の6箇所です。

  • PROPERTY_ID
  • BQ_PROJECT_ID
  • FIREBASE_APP_ID
  • BQ_DATASET
  • START_DATE
  • END_DATE
#Firebase設定のAnalytics設定の中に書いてあるプロパティID
PROPERTY_ID="12345"

#BigQueryのプロジェクトID
BQ_PROJECT_ID="my-sample-project"

#Firebases設定の中に書いてあるFirebaseアプリID
FIREBASE_APP_ID="1:9999:android:xxxxxx"

#既存のFirebase旧スキーマのデータセット
BQ_DATASET="my_sample_android"

#変換対象開始日と終了日。YYYYMMDD
START_DATE=20180101
END_DATE=20180515

# Do not modify the script below, unless you know what you are doing :)
startdate=$(date -d"$START_DATE" +%Y%m%d) || exit -1
enddate=$(date -d"$END_DATE" +%Y%m%d) || exit -1

# Iterate through the dates.
DATE="$startdate"
while [ "$DATE" -le "$enddate" ]; do

# BT table constructed from above params.
BQ_TABLE="$BQ_PROJECT_ID.$BQ_DATASET.app_events_$DATE"

echo "Migrating $BQ_TABLE"

cat migration_script.sql | sed -e "s/SCRIPT_GENERATED_TABLE_NAME/$BQ_TABLE/g" | bq query \
--debug_mode \
--allow_large_results \
--noflatten_results \
--use_legacy_sql=False \
--destination_table analytics_$PROPERTY_ID.events_$DATE \
--batch \
--append_table \
--parameter=firebase_app_id::$FIREBASE_APP_ID \
--parameter=date::$DATE \
--project_id=$BQ_PROJECT_ID

temp=$(date -I -d "$DATE + 1 day")
DATE=$(date -d "$temp" +%Y%m%d)

done
exit

# END OF SCRIPT

一番最初のプロパティIDがどこにあるのか、しばらく探したら以下の場所にありました。

[プロジェクト設定] > [データのプライバシー] の中に[アナリティクス設定]のリンクがあります。

このリンク先に[プロパティID]が表示されます。

3. 新スキーマ用のデータセットを作成する

このままスクリプトを実行すると「データセットに対する書き込み権限がない」というエラーが出るので、先にデータセットをBigQuery上に作っておきます。
migration.sh内でcreateする方法もあるんでしょうけど、今回は普通にBigQueryのGUI上でやります。

作成するデータセットの名前は、 analytics_プロパティID です。

プロパティIDが123435なら、analytics_12345です。

4. 変換スクリプトを実行する

さて、修正したmigration.shとmigration_script.sqlを同じディレクトリに置いて実行します。
数ヶ月分のデータを実行すると時間が掛かるため、Compute EngineのLinux上で実行しました。

$ chmod +x migration.sh
$ nohup ./migration.sh &

nohupで実行してしばらく放置します。

さて、徐々に変換後のテーブルが出来上がって来ました。
こんなテーブルになってます。

従来のuser_dimとevent_dimだけの構造と違って、event毎にレコードが生成されているデータになりました。

というわけで、旧スキーマを新スキーマに変換するのはこのとおりGoogleの用意したスクリプトで簡単に可能です。

問題は、旧スキーマに対してクエリを実行している現在運用中のアプリのクエリを見直す必要があります。。
これは各個撃破で対策して行くしかないですね。

今回は、間もなくリリースされるFirebase Analyticsの旧スキーマで記録された既存のレコードを、新スキーマのレコードに変換するための手順についてでした。

弊社ではGoogleCloud認定データエンジニアが、様々なデータのお悩みを解決するための支援業務を行っております。
お問合わせはこちらからどうぞ。

ブログへの記事リクエストはこちらまで

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Google BigQuery

    OWOX BI: GoogleSheetsアドオンでBigQueryをお手軽ビジュアライズ

    こんにちは、エクスチュアの權泳東(コン・ヨンドン)です。今日は…

  2. Adobe Analytics

    Adobe Analytics + Google BigQueryでよく使うSQL例 6選

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  3. Google BigQuery

    GCP: 今月のGCP課金額をslackに自動的に書き込む

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  4. Adobe Analytics

    Adobe Analytics: BigQueryにロードしたデータフィードをDataStudioで…

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  5. Adobe Analytics

    BigQuery: Adobe Datafeed: event_listカラムの手軽な扱い方

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  6. Adobe Analytics

    Adobe Analytics: BigQueryでパーティシペーション指標を集計するSQL

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

最近の記事

  1. 回帰分析はかく語りき Part3 ロジスティック回帰
  2. GCSへのSnowflake Open Catalogによる…
  3. VPC Service Controlsで「NO_MATCH…
  4. モダンデータスタックなワークフローオーケストレーションツール…
  5. Streamlit in Snowflakeによるダッシュボ…
  1. IT用語集

    ジャバスクリプト(JavaScript)って何?
  2. Tableau

    Tableau:分かりやすいLOD-概要編
  3. Adobe Experience Cloud

    Adobe Marketing Cloud:サインインで問題が起きたときの対処法…
  4. Adobe Analytics

    AA(Adobe Analytics)を導入しよう!
  5. Adobe Analytics

    Adobe Analytics: Datafeedのログからパスフローレポートを…
PAGE TOP