データを一括削除する
Firestore のマネージド一括削除サービスを使用して、データベースからデータを削除できます。この機能は、1 つまたは複数のコレクション グループに対する削除をサポートしています。
このページでは、マネージド一括削除サービスを使用して Firestore ドキュメントを一括で削除する方法について説明します。Firestore のマネージド一括削除サービスを利用するには、gcloud
コマンドライン ツールや Firestore API(REST、RPC)を使用します。
始める前に
マネージド一括削除サービスを使用する前に、次のタスクを完了する必要があります。
- Google Cloud プロジェクトに対する課金を有効にします。一括削除機能を使用できるのは、課金が有効になっている Google Cloud プロジェクトのみです。
-
アカウントに Firestore に必要な権限があることを確認します。プロジェクト オーナーであれば、アカウントに必要な権限が付与されています。それ以外の場合は、次のロールで、一括削除オペレーションに必要な権限を付与します。
- Firestore のロール:
Owner
、Cloud Datastore Owner
、またはCloud Datastore Bulk Admin
- Firestore のロール:
プロジェクトの gcloud
を設定する
一括削除オペレーションを開始するには、Google Cloud コンソールまたは gcloud
コマンドライン ツールを使用します。gcloud
を使用する場合は、次のいずれかの方法でコマンドライン ツールを設定し、プロジェクトに接続します。
Cloud Shell を使用して、Google Cloud Console から
gcloud
にアクセスします。正しいプロジェクトに
gcloud
が構成されていることを確認します。gcloud config set project [PROJECT_ID]
データを一括削除する
一括削除オペレーションでは、まずデータベース内の該当するドキュメントがすべて検索され、一括で削除されます。これらのドキュメントには引き続きクエリまたは読み取りを実行できますが、結果は進行状況によって異なる場合があります。一括削除では、オペレーションの開始後に追加または変更されたドキュメントは削除されません。
特定のコレクション グループを一括削除する
gcloud
特定のコレクション グループを一括削除するには、--collection-ids
フラグを使用します。このオペレーションで削除されるのは、既定の ID を持つコレクション グループのみです。コレクション グループには、指定したコレクション グループを持つすべてのドキュメントとネストされたドキュメント(パスは任意)が含まれます。
gcloud beta firestore bulk-delete \ --collection-ids=[COLLECTION_GROUP_ID_1_OR_KIND_1],[COLLECTION_GROUP_ID_2_OR_KIND_2],[SUBCOLLECTION_GROUP_ID_1_OR_KIND_3] \ --database=[DATABASE]
cymbal
データベースの最上位の restaurants
コレクションに、レストランを表す複数のドキュメントがあるとします。各レストラン ドキュメントには、ratings
、reviews
、outlets
などの複数のネストされたサブコレクションがあります。restaurants
コレクション グループと reviews
コレクション グループを一括削除するには、コマンドは次のようになります。
gcloud beta firestore bulk-delete \ --collection-ids=restaurants,reviews \ --database='cymbal'
一括削除オペレーションを管理する
一括削除オペレーションを開始すると、Firestore によりオペレーションに一意の名前が割り当てられます。このオペレーション名を使用して、オペレーションの削除、キャンセル、ステータス確認を行うことができます。
次のように、オペレーション名の先頭には projects/[PROJECT_ID]/databases/[DATABASE_ID]/operations/
という文字列が付きます。
projects/my-project/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
ただし、describe
、cancel
、delete
コマンドのオペレーション名を指定するときは、接頭辞を省略できます。
すべての一括削除オペレーションを一覧表示する
gcloud
一括削除オペレーションなど、実行中のオペレーションおよび最近完了したオペレーションをすべて表示するには、operations list
コマンドを使用します。
gcloud firestore operations list
オペレーションのステータスを確認する
gcloud
一括削除オペレーションのステータスを表示するには、operations describe
コマンドを使用します。
gcloud firestore operations describe [OPERATION_NAME]
完了時間を予測する
長時間実行オペレーションのステータスをリクエストすると、workEstimated
指標と workCompleted
指標が返されます。これらの各指標はバイト数とエンティティ数の両方で返されます。
workEstimated
には、オペレーションで処理される推定の合計バイト数とドキュメント数が表示されます。推定できない場合、Firestore はこの指標を省略することがあります。workCompleted
には、これまでに削除されたバイト数とドキュメント数が表示されます。オペレーションが完了すると、実際に処理された合計バイト数とドキュメント数が表示されます。workEstimated
の値よりも大きくなる可能性があります。
進行した割合を大まかに得るには、workCompleted
を workEstimated
で割ります。最新の統計情報コレクションとの間に遅延があるため、この割合は正確ではない可能性があります。
オペレーションのキャンセル
gcloud
進行中のオペレーションを停止するには、operations cancel
コマンドを使用します。
gcloud firestore operations cancel [OPERATION_NAME]
実行中のオペレーションをキャンセルしても、オペレーション前の状態には戻りません。キャンセルした一括削除オペレーションでは、削除されたドキュメントは復元されません。
オペレーションを削除する
完了したオペレーションを最近のオペレーションのリストから削除するには、gcloud firestore operations delete
コマンドを使用します。実行中のオペレーションをキャンセルするには、以前のキャンセル オペレーションを使用します。
gcloud firestore operations delete [OPERATION_NAME]
一括削除オペレーションの課金と料金
マネージド一括削除サービスを使用する前に、Google Cloud プロジェクトに対する課金を有効にする必要があります。
一括削除オペレーションでは、ドキュメントの読み取りと削除に対して Firestore の料金で表示した料金が課金されます。一括削除オペレーションでは、検出されたドキュメントごとに 1 件のインデックス エントリ読み取りと、削除されるドキュメントごとに 1 件の削除オペレーションが発生します。読み取られた最大 1,000 個のインデックス エントリごとに 1 回の読み取りオペレーションとして課金されます。たとえば、1,500 個のドキュメントを削除する一括削除オペレーションを行った場合は、2 回のドキュメントの読み取りと 1,500 回のドキュメントの削除として課金されます。
Firestore では、実際に行われた作業に対して課金されることに留意してください。ユーザー エラーによりオペレーションがキャンセルされた場合や、失敗した場合は、進捗状況に応じて課金されます。Firestore では、最終的に削除されていないドキュメント(削除オペレーションの開始後に変更されたドキュメントなど)の読み取りや削除は課金されません。費用は、オペレーションの完了日に確定します。
一括削除オペレーションが完了するまで、Google Cloud の予算アラートはトリガーされません。同様に、一括削除オペレーションが完了するまで、このオペレーションの実行中に行われた読み取りと削除は無料の割り当て/使用量に適用されません。一括削除オペレーションは、コンソールの使用状況セクションに表示される使用量には影響しません。
一括削除の費用を確認する
一括削除オペレーションを行うと、課金対象のオペレーションに goog-firestoremanaged:bulkdelete
ラベルが適用されます。Cloud Billing レポートのページで、このラベルを使用して一括削除オペレーションに関連する費用を表示できます。
ベスト プラクティス
クエリの速度が低下する可能性がある削除されたデータの読み飛ばしを避ける。