Tablestore は、単一のデータ行を削除するために呼び出すことができる DeleteRow 操作と、複数のデータ行を同時に削除するために呼び出すことができる BatchWriteRow 操作を提供します。
使用上の注意
削除したデータは復元できません。ご注意ください。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、「クライアントの初期化」をご参照ください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。
単一のデータ行を削除する
DeleteRow 操作を呼び出して、単一のデータ行を削除できます。削除する行が存在しない場合、データテーブルは変更されません。
パラメーター
パラメーター | 説明 |
tableName | データテーブルの名前。 |
primaryKey | 行のプライマリキー。このパラメーターの値は、各プライマリキー列の名前、タイプ、および値で構成されます。 重要 指定するプライマリキー列の数とタイプは、テーブル内のプライマリキー列の実際の数とタイプと同じである必要があります。 |
condition | 操作を実行するために満たす必要がある条件。行存在条件、または列値に基づく条件を構成できます。詳細については、「条件付き更新の実行」をご参照ください。 |
例
データ行を削除する
次のサンプルコードは、テーブルからデータ行を削除する方法の例を示しています。
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));
} 複数のデータ行を同時に削除する
データを削除する前に、ビジネス要件に基づいて適切なメソッドを選択し、削除するデータのプライマリキー情報をクエリします。
プライマリキー値が特定の範囲内にあるデータを削除するには、GetRange 操作を呼び出してデータをクエリし、データのプライマリキー情報を取得します。詳細については、「プライマリキー値が特定の範囲内にあるデータを読み取る」をご参照ください。
検索インデックスが作成されたデータテーブルから特定の条件を満たすデータを削除するには、検索インデックスを使用してデータをクエリし、データのプライマリキー情報を取得します。詳細については、「基本的なクエリ」をご参照ください。
データテーブルからすべてのデータを削除するには、データテーブルを削除し、同じ構成を持つデータテーブルを作成することをお勧めします。
また、GetRange 操作を呼び出し、開始プライマリキーを INF_MIN に、終了プライマリキーを INF_MAX に設定して、テーブル内のすべてのデータをスキャンすることもできます。このようにして、テーブル内のすべてのデータのプライマリキー情報を取得できます。ただし、これには大量の計算リソースが消費されます。ご注意ください。
行のプライマリキー情報に基づいて、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()); } }
関連情報
Time to live(TTL)は、データの保存期間を指定します。データテーブルに TTL を構成して、期限切れのデータを自動的に削除できます。詳細については、「データバージョンと TTL」をご参照ください。