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. Cloud Dataflow

    Firebase AnalyticsのデータをフラットなCSVに変換する – Googl…

    こんにちは。エクスチュアCTOの権です。以前Firebas…

  2. Cloud Dataproc

    BigQueryテーブルをAVRO形式でエクスポートしてHiveで扱う

    こんにちは、エクスチュアCTOの権です。今日も普段あまり使わな…

  3. Adobe Analytics

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

    こんにちは、エクスチュアCTOの権です。前回のブログで、Big…

  4. Firebase Analytics

    Firebase AnalyticsのデータをフラットなCSVに変換するETL処理

    こんにちは、エクスチュアCTOの権です。今日はFirebase A…

  5. Google BigQuery

    Google Apps Scriptを使ってスプレッドシートからBigQueryのテーブルを更新する…

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

  6. Google BigQuery

    Tableau : BigQueryでLOD計算が使えない場合の対処法

    こんにちは、エクスチュアの渡部です。Tableau×BigQu…

最近の記事

  1. Tableau:累計ユニークカウント数を時系列グラフで表現す…
  2. Tableau×BigQueryをコスパ良く使う方法
  3. Tableau:分かりやすいLOD – INCL…
  4. Google Apps Scriptを使ってスプレッドシート…
  5. Google Compute EngineのUbuntu V…
  1. Pardot

    Pardotの初期セットアップをする① DNSレコード設定とトラッカードメイン設…
  2. Adobe Analytics

    AdobeAnalytics:WordPressやHTML5内の動画を計測する
  3. Adobe Analytics

    Adobe Analytics: カスタムリンク計測を1行で書く
  4. Adobe Analytics

    Adobe Analytics: AppMeasurement.jsの実装開発作…
  5. Adobe Analytics

    Adobe Analytics: Webサイト内で発生したJavascriptエ…
PAGE TOP