Datastore モードのマネージド一括削除サービスを使用して、データベースからデータを削除できます。この機能は、1 つ以上の種類に対する削除をサポートしています。
このページでは、マネージド一括削除サービスを使用して Datastore モードの Firestore エンティティを一括で削除する方法について説明します。Datastore モードのマネージド一括削除サービスを利用するには、gcloud
コマンドライン ツールや Datastore モード API(REST、RPC)を使用します。
始める前に
マネージド一括削除サービスを使用する前に、次のタスクを完了する必要があります。
- Google Cloud プロジェクトに対する課金を有効にします。一括削除機能を使用できるのは、課金が有効になっている Google Cloud プロジェクトのみです。
-
アカウントに Datastore モードに必要な権限があることを確認します。プロジェクト オーナーであれば、アカウントに必要な権限が付与されています。それ以外の場合は、次のロールで、一括削除オペレーションに必要な権限を付与します。
- Datastore モードのロール:
Owner
、Cloud Datastore Owner
、またはCloud Datastore Bulk Admin
- Datastore モードのロール:
プロジェクトの gcloud
を設定する
一括削除オペレーションを開始するには、Google Cloud コンソールまたは gcloud
コマンドライン ツールを使用します。gcloud
を使用する場合は、次のいずれかの方法でコマンドライン ツールを設定し、プロジェクトに接続します。
Cloud Shell を使用して、Google Cloud Console から
gcloud
にアクセスします。正しいプロジェクトに
gcloud
が構成されていることを確認します。gcloud config set project [PROJECT_ID]
データを一括削除する
一括削除オペレーションでは、まずデータベース内の該当するエンティティがすべて検索され、一括で削除されます。これらのエンティティには引き続きクエリまたは読み取りを実行できますが、結果は進行状況によって異なる場合があります。一括削除では、オペレーションの開始後に追加または変更されたエンティティは削除されません。
特定の種類を一括削除する
gcloud
特定の種類を一括削除するには、--collection-ids
フラグを使用します。このフラグでは Firestore の用語が使用されていますが、コレクション グループ ID は種類 ID と同じです。このオペレーションで削除されるのは、指定した 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]
一括削除オペレーションを管理する
一括削除オペレーションを開始すると、Datastore モードによって、オペレーションに一意の名前が割り当てられます。このオペレーション名を使用して、オペレーションの削除、キャンセル、ステータス確認を行うことができます。
次のように、オペレーション名の先頭には 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
には、オペレーションで処理される推定の合計バイト数とエンティティ数が表示されます。Datastore モードでは、推定できない場合、この指標を省略することがあります。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 プロジェクトに対する課金を有効にする必要があります。
一括削除オペレーションでは、エンティティの読み取りと削除に対して Datastore モードの料金で表示した料金が課金されます。一括削除オペレーションでは、検出されたエンティティごとに 1 件のインデックス エントリ読み取りと、削除されるエンティティごとに 1 件の削除オペレーションが発生します。読み取られた最大 1,000 個のインデックス エントリごとに 1 回の読み取りオペレーションとして課金されます。たとえば、1, 500 個のエンティティを削除する一括削除オペレーションを行った場合は、2 回のエンティティの読み取り、1, 500 回のエンティティの削除として課金されます。
Datastore モードでは、実際に行われた作業に対して課金されることに留意してください。ユーザー エラーによりオペレーションがキャンセルされた場合や、失敗した場合は、進捗状況に応じて課金されます。Datastore モードでは、最終的に削除されないエンティティ(削除オペレーションの開始後に変更されたエンティティなど)の読み取りや削除は課金されません。費用は、オペレーションの完了日に確定します。
一括削除オペレーションが完了するまで、Google Cloud の予算アラートはトリガーされません。同様に、一括削除オペレーションが完了するまで、このオペレーションの実行中に行われた読み取りと削除は無料の割り当て/使用量に適用されません。一括削除オペレーションは、コンソールの使用状況セクションに表示される使用量には影響しません。
一括削除の費用を確認する
一括削除オペレーションを行うと、課金対象のオペレーションに goog-firestoremanaged:bulkdelete
ラベルが適用されます。Cloud Billing レポートのページで、このラベルを使用して一括削除オペレーションに関連する費用を表示できます。
ベスト プラクティス
クエリの速度が低下する可能性がある削除されたデータの読み飛ばしを避ける。
他のオプション
Dataflow は、データ処理ワークフローを開発して実行するためのマネージド サービスです。データの一括削除も可能です。Dataflow では、Datastore の削除テンプレートを使用して、GQL クエリで選択されたエンティティを削除できます。
詳細については、Datastore Bulk Delete テンプレートの実行に関する Dataflow ドキュメントをご覧ください。
ユースケースにデータの保持が含まれている場合は、TTL ポリシーでデータ保持を管理するをご覧ください。