別の記事を書く前に、いろいろ試したことの備忘録。
Firestoreのデータをいろいろ見たかったけど、
別プロジェクトの移動してみることにした経緯のまとめ。
それぞれの方法と注意点は以下の通り。
公式ドキュメントなどで紹介されている通り、
FirestoreのデータをBigQueryにインポートできるらしい。
これが一番いい方法だが、後述するカラム10000制約に引っかかったので、諦める形に。。
公式ドキュメントにも書いてあるが以下の通りらしい。。
エクスポート コマンドには、collection-idsフィルタを指定する必要があります。
コレクションIDフィルタを指定せずにエクスポートされたデータをBigQueryに読み込むことはできません。
なので、バックアップする際は、こんな感じで、コレクションを指定しなければならない。
$ gcloud beta firestore export gs://[BUCKET_NAME] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2]
公式ドキュメントのスクリーンショットになかったのでハマった。。
インポートする際には、ファイル形式も「Cloud DataStoreバックアップ」に変更しないといけないらしい。。
なにもしていないと、ファイル形式「Avro」になっているので、ファイル形式が合わずエラーになってしまう。。
これが原因で諦めました。。
Firestore上で、以下のようなobjectやマップなどが存在すると、
{
"uid": "XXXXX",
"group": {
"groupA": true,
"groupB": false
}
}
BigQueryにインポートする際、ドットで繋げる形で展開されます。
uid, group.groupA, group.groupB
また、公式ドキュメントの制約事項に、
Cloud Firestore のエクスポートを正しく読み込むには、
エクスポートデータ内のドキュメントが一貫したスキーマを共有し、
個別のフィールド名が10,000個未満でなければなりません。
と、あるため、大量のプロパティを持つobjectをセットしていると、インポート時にエラーになります。。
対応策
フィールド数の問題を回避する方法として、特定のフィールドだけ読み込むこともできます。
CLI で --projection_fieldsフラグを使用するか、
load ジョブの構成でprojectionFieldsプロパティを設定することで
特定のフィールドを読み込むことができます。
とあるため、読み込むフィールドを指定することで、回避することができそうです。
次にやったのがこれ。
node-firestore-import-exportを使うと、CUIでJSON形式でエクスポートできるらしい。
JSON形式でエクスポートできれば、ツールなど作っていろいろできそうかなと。
実行するには、Google Cloudアカウントのcredentialsファイルが必要。
# インストール
$ npm install -g node-firestore-import-export
# 全体のバックアップ
firestore-export --accountCredentials path/to/credentials/file.json --backupFile backups_myDatabase.json
# コレクションを指定して、一部だけをエクスポート
firestore-export --accountCredentials path/to/credentials/file.json --backupFile backups_myDatabase.json --nodePath collectionA
データ量が多い場合は、--max_old_space_size
を指定して実行する。
node --max_old_space_size=8192 /usr/local/bin/firestore-export --accountCredentials path/to/credentials/file.json --backupFile backups_myDatabase.json
サクッと使えてよかったけど、データ量が多いと、やはりつらい。。
上の2つの方法を試してなんとかしたかったのは、このの3つ。
そのため、別プロジェクトに移行して、本番環境と関係ない部分で、いろいろ触れるようにしてみた。
これであれば、本番環境を気にせず、firebase-adminとかで、いろいろ調べたりできそう。
詳細なやり方は、別の記事にまとめました。
他と同様、リアルタイムの情報ではないので、注意が必要。
積読用の読書管理アプリ 『積読ハウマッチ』をリリースしました!
積読ハウマッチは、Nuxt.js+Firebaseで開発してます!
もしよかったら、遊んでみてくださいヽ(=´▽`=)ノ
要望・感想・アドバイスなどあれば、
公式アカウント(@MemoryLoverz)や開発者(@kira_puka)まで
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント