削除
このドキュメントでは、Bigtable テーブルに保存されているデータを削除する方法、それぞれの方法を使用するタイミングについて説明し、例を示します。このページを読む前に、Bigtable の概要をよく知っており、スキーマ設計に関連するコンセプトを理解している必要があります。
内容に一貫性を持たせるため、このページの説明では、リクエストの種類ごとに使用される API メソッドを示します。ただし、REST や RPC を使用するのではなく、必ず Bigtable クライアント ライブラリのいずれかを使用して Bigtable API にアクセスすることを強くおすすめします。
このページの例では、Bigtable に保存されるデータに似たサンプルデータを使用します。
このページで説明するオペレーションを実行できる 1 日あたりの回数については、割り当てと上限をご覧ください。
Bigtable でのデータの削除
削除リクエストを送信すると、セルには削除マークが付けられ、読み取ることができません。データは、最大でも 1 週間後、コンパクション(テーブルを継続的に最適化するバックグラウンド プロセス)中に削除されます。削除リクエストを送信してから次のコンパクションが発生するまでの数日間は、削除メタデータにより、データの容量が少し多く(1 行あたり数 kb)消費される可能性があります。
クラスタがストレージ上限を超過し、読み取りと書き込みがブロックされている場合でも、削除リクエストはいつでも送信できます。
行の範囲を削除する
連続した行に保存されている大量のデータを削除する場合は、dropRowRange
を使用します。このオペレーションでは、開始行と終了行、または行キー接頭辞によって識別される特定の範囲の行がすべて削除されます。
行範囲の削除時に指定した行キー値は、サービスデータとして扱われます。サービスデータが取り扱われる方法については、Google Cloud のプライバシーに関するお知らせをご覧ください。
正常に削除され、レスポンスを受け取ったら、同じ行範囲にデータを安全に書き込めます。
dropRowRange
オペレーションには次の制限があります。
- 承認済みビューから行の範囲を削除することはできません。
dropRowRange
メソッドを非同期で呼び出すことはできません。別のリクエストの処理中にテーブルにdropRowRange
リクエストを送信すると、Bigtable はA DropRowRange operation is already ongoing
というメッセージとともにUNAVAILABLE
エラーを返します。エラーを解決するには、リクエストをもう一度送信します。- レプリケーションを使用するインスタンスでは、レプリケーションのレイテンシと CPU 使用率が増加するため、Bigtable はオペレーションの完了に長い時間を要する場合があります。レプリケーションを使用するインスタンスからデータを削除するには、Data API を使用してデータを読み取ってから削除します。
次のコードサンプルでは、行キー接頭辞 phone#5c10102
で始まる行の範囲を削除する方法を示します:
Java
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Node.js
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Data API メソッドでデータを削除する
連続しない少量のデータを削除する必要がある場合は、Cloud Bigtable API(Data API)を呼び出すメソッドでデータを削除することをおすすめします。リクエストで MB のデータ(GB ではない)を削除する場合は、以下のメソッドを使用します。Data API を使用することが、(列ファミリーではなく)列からデータを削除する唯一の方法です。
Data API メソッドは、次の 3 種類のミューテーションのいずれかを使用して MutateRows
を呼び出します。
- DeleteFromColumn
- DeleteFromFamily
- DeleteFromRow
Data API を使用した削除リクエストはアトミックです。リクエストが成功するとすべてのデータは削除されますが、リクエストが失敗するとデータは削除されません。
ほとんどの場合で、CheckAndMutate
メソッドを使用してデータを削除することは避けてください。強整合性を必要とするまれな場合は、この方法をおすすめしますが、リソースを大量に消費し、パフォーマンスに影響を与える可能性があるので注意してください。
MutateRows
を使用してデータを削除するには、削除対象特定するフィルタ付きの readRows
リクエストを送信し、続いて削除リクエストを送信します。使用可能なフィルタのリストについては、フィルタをご覧ください。
このセクションのサンプルでは、削除するデータがすでに決まっていることを前提としています。
列から削除する
次のコードサンプルでは、行内の列からすべてのセルを削除する方法を示します:
Java
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python asyncio
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Node.js
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
列ファミリーから削除する
次のコードサンプルでは、行の列ファミリーからセルを削除する方法を示します:
Java
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python asyncio
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Node.js
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
行から削除する
次のコード スニペットでは、行からすべてのセルを削除する方法を示します:
Java
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python asyncio
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Node.js
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
ストリーミングとバッチ処理で削除する
大量のデータを削除する場合は、ストリーミング リクエストして一括処理することが最適な方法です。この方法は、ガベージ コレクション ポリシーよりも細かいデータ保持要件がある場合に有効です。
アプリケーションが Java で記述されている場合は、Bigtable にバッチ削除を送信するときにバッチ書き込みのフロー制御を有効にできます。詳細については、バッチ書き込みフロー制御をご覧ください。有効にする方法については、バッチ書き込みのフロー制御を有効にするをご覧ください。
以下のコード スニペットでは、データのストリーム(行の読み取り)を開始してバッチ化し、そのバッチを実行して cell_plan
列ファミリーの列 data_plan_01gb1
にあるすべてのセルを削除します:
Java
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python asyncio
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Node.js
Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。
Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
承認済みビュー内のデータを削除する
テーブルデータを削除するには、承認済みビューに削除リクエストを送信します。次のいずれかを使用する必要があります。
- gcloud CLI
- Java 用 Bigtable クライアント
承認済みビューからデータを削除する場合は、テーブル ID に加えて承認済みビュー ID を指定します。
承認済みビューから削除できるデータは、承認済みビューの定義で制限されます。削除できるのは、承認済みビューに含まれるデータのみです。承認済みビュー定義の範囲外のデータや、次のルールが適用されるデータを削除しようとすると、PERMISSION_DENIED
エラーが返されます。
- 管理 API では、
DropRowRange
を使用して承認済みビューから特定の範囲の行を削除することはできません。 - 行からの削除はサポートされていません。
- 承認済みビューに含まれる行に対するものであれば、列からの削除がサポートされます。
- 列ファミリーからの削除は、指定された列ファミリーが承認済みビュー内のすべての列修飾子接頭辞(
qualifier_prefixes=""
)を許可するように構成されている場合にのみ許可されます。
たとえば、指定した行から削除しようと試みた際に、その行に、基になるテーブルの列のうち承認済みビューにない列が含まれている場合、リクエストは失敗します。