過去のFirebase AnalyticsエクスポートデータをBigQueryにアップロードし直す

今個人で扱っているアプリケーションでは、Firebase Analyticsでデータを計測し、それをBigQueryにエクスポートした後に処理している。過去の日付分のテーブルを置いたままだと料金がかかるので普段は日付ごとに消しているのだが、過去にテストとして流したデータをもう一度BigQueryにアップロードして動作確認したいと思うことがあった。
テーブルはとっくに消してしまっているが、幸いBigQueryからエクスポートしたJSONデータが手元にあった。これがあればテーブルを復元することができる。

まず、JSONデータをGoogle Cloud Storageにアップロードしておく。次にデータセットを選択した状態で「テーブルの作成」を選ぶ。

f:id:Udomomo:20190811234936p:plain

「ソース」の欄でGoogle Cloud Storageを選ぶと、GCS上に上がっているファイルを選択できる。「送信先」の欄で作りたいテーブル名を入れておけば準備が完了する。

そのうえで、テーブルのスキーマを指定する必要がある。デフォルトではソースファイル(この場合はJSONファイル)からBigQueryが自動で検知してくれるようだが、それに頼るのはおすすめしない。なぜならFirebaseのエクスポートスキーマはネストが非常に深いからだ。一度自動検知で試してみたのだが、Recordの繰り返しの中にnullableなフィールドがあるため、全部のフィールドが表出していない行があるときなどは正常に検知されない。かといって、これを手動で指定するのも非常に手間がかかる。
そこで、bq コマンドを使って現存するエクスポートテーブルのスキーマを取ってきてしまうのが速い。

bq show --format=prettyjson <projectid>:<datasetid>.<tablename>

上記のコマンドを入力すると、FirebaseからエクスポートされたテーブルのスキーマJSON形式で返ってくる。
後は、BigQueryの「テーブルを作成」画面で、スキーマ欄の「テキストを編集」ボタンをONにし、入力欄に先程返ってきたJSONをそのままペーストすればよい。