🔥

Firestore から CSV にデータをエクスポートする

2021/01/29に公開

背景

試験的に Firestore を使っていたが、CSV にエクスポートしてごにょごにょしたかった。
pip の firebase_admin パッケージを使えば Firestore から CSV にエクスポートできるようだが、ちょっとした検証のためにパッケージ入れて設定するのにはあまり気が進まなかった。

BigQuery を経由することでパッケージ不要で CSV エクスポートできたのでメモしておく。

手順

必要に応じて、転送用の一時的な GCS バケットと BigQuery データセットを作成しておく。

  1. Firestore のデータを GCS にエクスポートする
  2. GCS にエクスポートしたデータを BigQuery にインポートする
  3. BigQuery から CSV にエクスポートする
# バケットを作成
gsutil mb gs://<BUCKET_NAME>

# データセットを作成
bq mk <DATASET_NAME>

# Firestore のデータのエクスポート
gcloud firestore export gs://<BUCKET_NAME>/<DIR_NAME>/ --collection-ids=<TARGET_COLLECTION_ID1>,<TARGET_COLLECTION_ID2> --async

# BigQuery にロード
bq load --source_format=DATASTORE_BACKUP <DATASET_NAME>.<TABLE_NAME> gs://<BUCKET_NAME>/<DIR_NAME>/all_namespaces/kind_<TARGET_COLLECTION_ID1>/all_namespaces_kind_<TARGET_COLLECTION_ID1>.export_metadata

# BigQuery から CSV にエクスポート
bq query --use_legacy_sql=false \
'EXPORT DATA
  OPTIONS( uri="gs://<BUCKET_NAME>/<DIR_NAME>/*.csv",
    overwrite=TRUE,
    format="CSV",
    header=TRUE ) AS
SELECT
  <COLUMN_NAMES>
FROM
  `<DATASET_NAME>.<TABLE_NAME>`'

なお、Firestore のメタデータが STRUCT として BigQuery に転送されるので、 select * from ... として CSV にエクスポートできない。
明示的にカラムを指定する必要があるので注意。

参考

https://firebase.google.com/docs/firestore/manage-data/export-import
https://cloud.google.com/bigquery/docs/loading-data-cloud-firestore
https://dev.classmethod.jp/articles/google-bigquery-export-to-gcs-directory-by-export-data-sql-command/
https://cloud.google.com/bigquery/docs/reference/standard-sql/other-statements

Discussion