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

Tablestore:データの削除

最終更新日:Dec 28, 2024

Tablestore は、単一のデータ行を削除できる DeleteRow 操作と、一度に複数のデータ行を削除できる BatchWriteRow 操作を提供します。

使用上の注意

削除したデータは復元できません。注意して操作してください。

前提条件

  • OTSClient インスタンスが初期化されていること。詳細については、クライアントの初期化 を参照してください。

  • データテーブルが作成され、データがデータテーブルに書き込まれていること。

単一のデータ行の削除

DeleteRow 操作を呼び出すことで、単一のデータ行を削除できます。削除しようとする行が存在しない場合、テーブルは変更されません。

パラメーター

パラメーター

説明

tableName

テーブルの名前。

primaryKey

行のプライマリキー情報。このパラメーターの値には、各プライマリキー列の名前、プライマリキー列のタイプ、およびプライマリキー値が含まれます。

重要

指定するプライマリキー列の数とタイプは、テーブル内の実際のプライマリキー列の数とタイプと同じである必要があります。

condition

DeleteRow 操作を実行するために指定する条件。行の存在条件、または列の値に基づく条件を指定できます。詳細については、条件付き更新の実行 を参照してください。

データ行の削除

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

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. データを削除する前に、ビジネス要件に基づいて、削除するデータのプライマリキー情報をクエリするための適切な方法を選択します。

    • プライマリキー値が指定された範囲内にあるデータをクエリし、データのプライマリキー情報を取得するには、GetRange 操作を呼び出します。その後、データを削除できます。詳細については、データの読み取り を参照してください。

    • 指定された条件を満たすデータを削除するには、検索インデックスを使用してデータをクエリします。その後、データのプライマリキー情報を取得します。詳細については、検索インデックスの作成 および Tablestore SDK の使用 を参照してください。

  2. プライマリキー情報に基づいて一度に複数のデータ行を削除するには、BatchWriteRow 操作を呼び出します。詳細については、「データの書き込み」トピックの データの書き込み セクションを参照してください。

    次のサンプルコードは、あるテーブルの 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());
        }
    }