こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。
さて、GoogleさんからFirebase Analyticsについて突然メールが来まして、超テキトーに意訳するとこんな内容です。
“Firebase AnalyticsのBigQueryエクスポートは、従来Android/iOSのデータを別々のデータセットとして生成してました。
しかし、今後はひとつのデータセットになります。
また、スキーマも新しくなります。
そう、数週間以内にね。”
なかなかサラっとすごい事を言ってきますね。。
とりいそぎ、新しいスキーマがどんなものか見てました。
今までは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認定データエンジニアが、様々なデータのお悩みを解決するための支援業務を行っております。
お問合わせはこちらからどうぞ。
ブログへの記事リクエストはこちらまで