Firestoreのデータを分析するための3つの方法とその注意点
別の記事を書く前に、いろいろ試したことの備忘録。
Firestoreのデータをいろいろ見たかったけど、
別プロジェクトの移動してみることにした経緯のまとめ。
試したのは以下の3つ
- エクスポートデータをBigQueryにインポートしてBigQuery上で確認
- node-firestore-import-exportを使ってローカルのJSONファイルとしてエクスポートして確認
- 別プロジェクトにデータを移行して、別プロジェクト上で確認(この記事)
それぞれの方法と注意点は以下の通り。
1. BigQueryにインポートして確認
公式ドキュメントなどで紹介されている通り、
FirestoreのデータをBigQueryにインポートできるらしい。
これが一番いい方法だが、後述するカラム10000制約に引っかかったので、諦める形に。。
流れとしては、こんな感じ。
- バックファイルファイルを配置できるようCloud StorageにBucketを作成
- gcloudを使って、Firestoreのバックアップファイルを作成したBucketにエクスポート
- BigQueryでデータセットを作成
- テーブルを作成する際に、テーブル作成元に「Google Cloud Storage」を選択
注意: ハマった点
a. バックアップデータを作成する際は、collection-idsを指定しないといけない
公式ドキュメントにも書いてあるが以下の通りらしい。。
エクスポート コマンドには、collection-idsフィルタを指定する必要があります。
コレクションIDフィルタを指定せずにエクスポートされたデータをBigQueryに読み込むことはできません。
なので、バックアップする際は、こんな感じで、コレクションを指定しなければならない。
$ gcloud beta firestore export gs://[BUCKET_NAME] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2]
b. ファイル形式も「Cloud DataStoreバックアップ」に変更しないといけない
公式ドキュメントのスクリーンショットになかったのでハマった。。
インポートする際には、ファイル形式も「Cloud DataStoreバックアップ」に変更しないといけないらしい。。
なにもしていないと、ファイル形式「Avro」になっているので、ファイル形式が合わずエラーになってしまう。。
c. ドキュメントフィールドがobjectの場合、ドット区切りで展開され、カラムの上限は10000まで
これが原因で諦めました。。
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プロパティを設定することで
特定のフィールドを読み込むことができます。
とあるため、読み込むフィールドを指定することで、回避することができそうです。
2. node-firestore-import-exportでローカルにエクスポート
次にやったのがこれ。
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
注意: というか見送った点。。
サクッと使えてよかったけど、データ量が多いと、やはりつらい。。
- データ量が多いと、メモリ不足やFirestoreとのコネクション切れで失敗する
- 無料枠でも使えるが、firebase-adminを使って取ってきているだけなので読み込みが大量に発生する
- エクスポートしたファイルも大きくなるため、ツールでもメモリを大量に使う
別プロジェクトにデータを移行して、別プロジェクト上で確認
上の2つの方法を試してなんとかしたかったのは、このの3つ。
- エクスポート時に大量の読み込みが発生し、本番環境の無料枠を消費する
- ネストが深いobjectがあるとと簡単にBigQueryにインポートできない
- ローカルファイルでも全データをメモリ上に展開するので、つらい
そのため、別プロジェクトに移行して、本番環境と関係ない部分で、いろいろ触れるようにしてみた。
これであれば、本番環境を気にせず、firebase-adminとかで、いろいろ調べたりできそう。
詳細なやり方は、別の記事にまとめました。
他と同様、リアルタイムの情報ではないので、注意が必要。
簡単なまとめ
1. BigQueryにインポートして確認
- BigQuery上なので、SQLで分析ができる
- 有料プランのみ
- 注意: バックアップデータを作成する際は、collection-idsを指定しないといけない
- 注意: ファイル形式も「Cloud DataStoreバックアップ」に変更しないといけない
- 注意: ドキュメントフィールドがobjectの場合、ドット区切りで展開され、カラムの上限は10000
2. node-firestore-import-exportでローカルにエクスポート
- 無料枠でも使える
- JSONでエクスポートできる
- 注意: エクスポート時に大量の読み込みが発生し、本番環境の無料枠を消費する
- 注意: ドキュメントのネストが深いと簡単にBigQueryにインポートできない
- 注意: ローカルファイルでも全データをメモリ上に展開するのでつらい
3. 別プロジェクトにデータを移行して、別プロジェクト上で確認(この記事)
- 有料プランのみ
- 別プロジェクトなので、本番環境を気にせず使える
こんなのつくってます!!
積読用の読書管理アプリ 『積読ハウマッチ』をリリースしました!
積読ハウマッチは、Nuxt.js+Firebaseで開発してます!
もしよかったら、遊んでみてくださいヽ(=´▽`=)ノ
要望・感想・アドバイスなどあれば、
公式アカウント(@MemoryLoverz)や開発者(@kira_puka)まで
参考にしたサイト
- データのエクスポートとインポート | Firebase
- Cloud Firestoreのバックアップ・リストア - google-cloud-jp - Medium
- gcloudのアカウント変更とプロジェクト変更|yo16|note
- 自分用GCPコマンドリファレンス - Qiita
- gcloudの自分用メモ - Qiita
- gcloudコマンド(GCP)で複数のプロジェクトとアカウントの使い分けを便利に - Adwaysエンジニアブログ
- macosにgcloudとkubectlのインストール - Qiita
- macOS 用のクイックスタート | Cloud SDK のドキュメント | Google Cloud
- Cloud Firestore のエクスポートからのデータの読み込み | BigQuery | Google Cloud
- エクスポートされたFirestoreドキュメントをBigQueryに自動ロード - google-cloud-jp - Medium
- Cloud Firestore のコレクションを日次で Bigquery にロードする - Qiita
Author And Source
この問題について(Firestoreのデータを分析するための3つの方法とその注意点), 我々は、より多くの情報をここで見つけました https://qiita.com/kira_puka/items/98283e837f30209f23c8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .