すべてのプロダクト
Search
ドキュメントセンター

Tablestore:データの削除

最終更新日:Jul 08, 2026

Tablestore は、単一の行を削除する DeleteRow API と、複数の行を削除する BatchWriteRow API を提供します。

説明

テーブルの基本単位は行であり、プライマリキー列と属性列で構成されます。プライマリキー列は必須であり、その名前と型はすべての行で同じでなければなりません。属性列はオプションであり、属性は行ごとに異なる場合があります。詳細については、「ワイドテーブルモデル」をご参照ください。

注意事項

  • データを削除する際は、指定するプライマリキー列の数と型がテーブルのプライマリキースキーマと一致している必要があります。

  • 削除したデータは復元できません。慎重に操作してください。

  • テーブルに大量のデータが含まれている場合、削除操作 (特に大量のデータを伴うバッチ削除や非同期削除) は完了までに長時間かかる可能性があります。たとえば、操作が 48 時間以上かかることは正常です。削除リクエストを再送信せず、辛抱強く待機し、タスクのステータスを監視することを推奨します。

単一の行の削除

DeleteRow API を呼び出して、単一の行を削除します。指定した行が存在しない場合、この操作による影響はありません。

行を削除する際、条件付き更新を使用して、特定の条件を満たす場合にのみ行を削除することができます。詳細については、「条件付き更新」をご参照ください。

複数の行の削除

削除する行のプライマリキーを取得した後、BatchWriteRow API を呼び出して、それらをバッチで削除します。

説明

特定の時間より古いデータを自動的に削除するには、生存時間 (TTL) 機能を使用できます。詳細については、「生存時間 (TTL)」をご参照ください。

行をバッチで削除する際、以下のオプションがあります。

  • 1 つのリクエストで複数のテーブルから行を削除します。

  • 条件付き更新を使用して、特定の条件を満たす場合にのみ行を削除します。詳細については、「条件付き更新」をご参照ください。

方法

コンソール

Tablestore コンソールを使用して、単一の行または複数の行を削除できます。

  1. Tablestore コンソールにログインします。

  2. 概要 ページで、管理するインスタンスを見つけ、操作 列の インスタンスの管理 をクリックします。

  3. インスタンスの詳細 タブで、テーブルリスト セクションのテーブル名をクリックします。

  4. データのクエリ タブで、削除する行を 1 つ以上選択し、ページの下部にある 削除 をクリックします。

  5. 削除 ダイアログボックスで、[OK] をクリックします。

Tablestore CLI

Tablestore CLI で delete コマンドを実行して、行を削除できます。

次の例では、最初のプライマリキー列が "86" で、2番目が 6771 の行を削除します。

delete --pk '["86", 6771]'

SDK

Java SDKGo SDKPython SDKNode.js SDK.NET SDK、またはPHP SDKを使用してデータを削除できます。以下の例では Java SDK を使用します。

単一の行の削除

  • 行の削除

    次のサンプルコードは、テーブルからデータ行を削除する方法の例を示しています。

    private static void deleteRow(SyncClient client, String pkValue) {
        // プライマリキーを構築します。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        // データテーブルの名前を指定します。
        RowDeleteChange rowDeleteChange = new RowDeleteChange("<TABLE_NAME>", primaryKey);
    
        client.deleteRow(new DeleteRowRequest(rowDeleteChange));
    }                    
  • 条件を使用した行の削除

    次のサンプルコードは、行が存在し、行の Col0 列の値が 100 より大きい場合に、データテーブルからデータ行を削除する方法の例を示しています。

    private static void deleteRow(SyncClient client, String pkValue) {
        // プライマリキーを構築します。
        PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue));
        PrimaryKey primaryKey = primaryKeyBuilder.build();
        // データテーブルの名前を指定します。
        RowDeleteChange rowDeleteChange = new RowDeleteChange("<TABLE_NAME>", primaryKey);
    
        // DeleteRow 操作の条件を指定します。この例では、行が存在し、Col0 列の値が 100 より大きい場合にのみ、行が削除されます。
        Condition condition = new Condition(RowExistenceExpectation.EXPECT_EXIST);
        condition.setColumnCondition(new SingleColumnValueCondition("Col0",
                SingleColumnValueCondition.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)));
        rowDeleteChange.setCondition(condition);
    
        client.deleteRow(new DeleteRowRequest(rowDeleteChange));
    }                   

複数の行の削除

  1. データを削除する前に、削除する行のプライマリキーを取得する方法を選択してください。

  2. プライマリキーを取得したら、BatchWriteRow API を呼び出して行を削除します。詳細については、「データのバッチ書き込み」をご参照ください。

    次のサンプルコードは、pk プライマリキー列の値が pk であるデータ行をデータテーブルから削除し、pk1 プライマリキー列の値が pk1 で、pk2 プライマリキー列の値が pk2 であるデータ行を別のデータテーブルから同時に削除する方法の例を示しています。

    private static void batchWriteRow(SyncClient client) {    
        BatchWriteRowRequest batchWriteRowRequest = new BatchWriteRowRequest();
    
        // rowDeleteChange1 を構築します。
        PrimaryKeyBuilder pk1Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        pk1Builder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("pk"));
        // データテーブルの名前を指定します。
        RowDeleteChange rowDeleteChange1 = new RowDeleteChange("<TABLE_NAME1>", pk1Builder.build());
        // rowDeleteChange1 をバッチ操作のコードに追加します。
        batchWriteRowRequest.addRowChange(rowDeleteChange1);
    
        // rowDeleteChange2 を構築します。
        PrimaryKeyBuilder pk2Builder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        pk2Builder.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromString("pk1"));
        pk2Builder.addPrimaryKeyColumn("pk2", PrimaryKeyValue.fromString("pk2"));
        // データテーブルの名前を指定します。
        RowDeleteChange rowDeleteChange2 = new RowDeleteChange("<TABLE_NAME2>", pk2Builder.build());
        // rowDeleteChange2 をバッチ操作のコードに追加します。
        batchWriteRowRequest.addRowChange(rowDeleteChange2);
    
        BatchWriteRowResponse response = client.batchWriteRow(batchWriteRowRequest);
    
        System.out.println("すべての操作が成功したかどうか: " + response.isAllSucceed());
        if (!response.isAllSucceed()) {
            for (BatchWriteRowResponse.RowResult rowResult : response.getFailedRows()) {
                System.out.println("失敗した行: " + batchWriteRowRequest.getRowChange(rowResult.getTableName(), rowResult.getIndex()).getPrimaryKey());
                System.out.println("失敗の原因: " + rowResult.getError());
            }
            /**
             * createRequestForRetry メソッドを使用して、別のリクエストを構築し、失敗した行の操作を再試行できます。この例では、再試行リクエストのみが構築されます。
             * 再試行方法として、Tablestore SDK のカスタム再試行ポリシーを使用することをお勧めします。この機能を使用すると、バッチ操作の実行後に失敗した行を再試行できます。再試行ポリシーを指定した後、操作を呼び出すために再試行コードを追加する必要はありません。
             */
            BatchWriteRowRequest retryRequest = batchWriteRowRequest.createRequestForRetry(response.getFailedRows());
        }
    }

課金

操作が消費するキャパシティーユニット (CU) に対して課金されます。インスタンスタイプに応じて、オンデマンドまたはリザーブドの読み取り/書き込み CU のいずれかに基づいて課金されます。

説明

インスタンスタイプと CU の詳細については、「インスタンス」および「読み取り/書き込みスループット」をご参照ください。

DeleteRow 操作によって消費される読み取り CU と書き込み CU は、次のように計算されます。

  • 消費される書き込み CU:削除された行のプライマリキー列の合計サイズを 4 KB で除算し、最も近い整数に切り上げた値。

  • 消費される読み取り CU:条件チェックが指定されている場合 (IGNORE に設定されていない場合) 、読み取られる行の合計サイズを 4 KB で除算し、最も近い整数に切り上げた値。

  • 行の存在条件が満たされないために操作が失敗した場合、1 書き込み CU を消費します。