データを一括削除する

Firestore のマネージド一括削除サービスを使用して、データベースからデータを削除できます。この機能は、1 つまたは複数のコレクション グループに対する削除をサポートしています。

このページでは、マネージド一括削除サービスを使用して Firestore ドキュメントを一括で削除する方法について説明します。Firestore のマネージド一括削除サービスを利用するには、gcloud コマンドライン ツールや Firestore API(RESTRPC)を使用します。

始める前に

マネージド一括削除サービスを使用する前に、次のタスクを完了する必要があります。

  1. Google Cloud プロジェクトに対する課金を有効にします。一括削除機能を使用できるのは、課金が有効になっている Google Cloud プロジェクトのみです。
  2. アカウントに Firestore に必要な権限があることを確認します。プロジェクト オーナーであれば、アカウントに必要な権限が付与されています。それ以外の場合は、次のロールで、一括削除オペレーションに必要な権限を付与します。

    • Firestore のロール: OwnerCloud Datastore Owner、または Cloud Datastore Bulk Admin

プロジェクトの gcloud を設定する

一括削除オペレーションを開始するには、Google Cloud コンソールまたは gcloud コマンドライン ツールを使用します。gcloud を使用する場合は、次のいずれかの方法でコマンドライン ツールを設定し、プロジェクトに接続します。

データを一括削除する

一括削除オペレーションでは、まずデータベース内の該当するドキュメントがすべて検索され、一括で削除されます。これらのドキュメントには引き続きクエリまたは読み取りを実行できますが、結果は進行状況によって異なる場合があります。一括削除では、オペレーションの開始後に追加または変更されたドキュメントは削除されません。

特定のコレクション グループを一括削除する

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 コレクションに、レストランを表す複数のドキュメントがあるとします。各レストラン ドキュメントには、ratingsreviewsoutlets などの複数のネストされたサブコレクションがあります。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

ただし、describecanceldelete コマンドのオペレーション名を指定するときは、接頭辞を省略できます。

すべての一括削除オペレーションを一覧表示する

gcloud

一括削除オペレーションなど、実行中のオペレーションおよび最近完了したオペレーションをすべて表示するには、operations list コマンドを使用します。

gcloud firestore operations list

オペレーションのステータスを確認する

gcloud

一括削除オペレーションのステータスを表示するには、operations describe コマンドを使用します。

gcloud firestore operations describe [OPERATION_NAME]

完了時間を予測する

長時間実行オペレーションのステータスをリクエストすると、workEstimated 指標と workCompleted 指標が返されます。これらの各指標はバイト数とエンティティ数の両方で返されます。

  • workEstimated には、オペレーションで処理される推定の合計バイト数とドキュメント数が表示されます。推定できない場合、Firestore はこの指標を省略することがあります。

  • workCompleted には、これまでに削除されたバイト数とドキュメント数が表示されます。オペレーションが完了すると、実際に処理された合計バイト数とドキュメント数が表示されます。workEstimated の値よりも大きくなる可能性があります。

進行した割合を大まかに得るには、workCompletedworkEstimated で割ります。最新の統計情報コレクションとの間に遅延があるため、この割合は正確ではない可能性があります。

オペレーションのキャンセル

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 レポートのページで、このラベルを使用して一括削除オペレーションに関連する費用を表示できます。

ベスト プラクティス

クエリの速度が低下する可能性がある削除されたデータの読み飛ばしを避ける