YSNHatenaBlog

主にアプリやWebサービス開発について

Firebase FirestoreのデータをBigQueryにエクスポートする

FirestoreのデータをBigQueryにデータを取り込む手段について。

まだサービスローンチ前ならFirebase Extension

直接試せてないがFirebase Extensionがあるのでこれを使いたい。

firebase.google.com

リアルタイムでデータが同期される(と思う)。 すでにローンチ済みのサービスの場合は、既存のデータを移す必要がある。

サービスローンチ済みならgcloud

gcloudコマンド(+ 一緒についてくるbqコマンド)でやる。

サービスアカウントの作成

ここを参考にロールを設定する。

コマンド例

実行毎にBigQueryが最新のFirestoreのデータに更新される。

# サービスアカウントのキーファイルをセット
gcloud auth activate-service-account --key-file key.json

# プロジェクトのセット
gcloud config set project my-firebase-project

# collection groupごとにFirestore→Storageへデータをエクスポート
gcloud firestore export gs://firestore-export-for-bq/2020-06-29T10:17:23.011+09:00 --collection-ids=user,shop,product

# collection groupごとにBigQueryのテーブルに入れる
bq load --source_format=DATASTORE_BACKUP --replace=true --projection_fields=name firestore.user gs://firestore-export-for-bq/2020-06-29T10:17:23.011+09:00/all_namespaces/kind_user/all_namespaces_kind_user.export_metadata
bq load --source_format=DATASTORE_BACKUP --replace=true --projection_fields=name,owners firestore.shop gs://firestore-export-for-bq/2020-06-29T10:17:23.011+09:00/all_namespaces/kind_shop/all_namespaces_kind_shop.export_metadata
bq load --source_format=DATASTORE_BACKUP --replace=true --projection_fields=name,price firestore.product gs://firestore-export-for-bq/2020-06-29T10:17:23.011+09:00/all_namespaces/kind_product/all_namespaces_kind_product.export_metadata

projection_fields オプションがあるおかげで、個人情報など取り込みたくない情報はフィルタ可能。

Docker Hubのgoogle公式イメージを使って定期実行する

gcloudを使うための公式イメージがDocker Hubで配布されているのでこれを使えばよい。

google/cloud-sdk - Docker Hub

Cloud Runとか使っていけそうな気がする。