🔥
Firestore から CSV にデータをエクスポートする
背景
試験的に Firestore を使っていたが、CSV にエクスポートしてごにょごにょしたかった。
pip の firebase_admin
パッケージを使えば Firestore から CSV にエクスポートできるようだが、ちょっとした検証のためにパッケージ入れて設定するのにはあまり気が進まなかった。
BigQuery を経由することでパッケージ不要で CSV エクスポートできたのでメモしておく。
手順
必要に応じて、転送用の一時的な GCS バケットと BigQuery データセットを作成しておく。
- Firestore のデータを GCS にエクスポートする
- GCS にエクスポートしたデータを BigQuery にインポートする
- 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 にエクスポートできない。
明示的にカラムを指定する必要があるので注意。
参考
Discussion