説明
テーブルの基本単位は行であり、プライマリキー列と属性列で構成されます。プライマリキー列は必須であり、すべての行でその名前と型が同一である必要があります。属性列は任意であり、各行ごとに異なる属性を持つことができます。詳細については、「ワイドテーブルモデル」をご参照ください。
単一行の削除
DeleteRow 操作を呼び出して、単一行を削除します。指定した行が存在しない場合、この操作は効果を持ちません。
行を削除する際には、条件付き更新を使用して、特定の条件を満たす場合にのみ行を削除できます。詳細については、「条件付き更新」をご参照ください。
複数行の削除
削除対象の行のプライマリキーを取得した後、BatchWriteRow 操作を呼び出して、それらを一括で削除します。
説明
特定の時刻より古いデータを自動的に削除するには、生存時間 (TTL) 機能を使用できます。詳細については、「生存時間 (TTL)」をご参照ください。
バッチで行を削除する際には、以下のオプションがあります。
メソッド
コンソール
Tablestore コンソールを使用して、単一行または複数行を削除できます。
-
Tablestore コンソールにログインします。
-
概要ページで、管理対象のインスタンスを見つけ、操作列のインスタンスの管理をクリックします。
-
インスタンスの詳細タブのテーブルリストセクションで、テーブル名をクリックします。
-
データのクエリタブで、削除する行を 1 行以上選択し、ページ下部の削除をクリックします。
-
削除ダイアログボックスで、OK をクリックします。
Tablestore CLI
Tablestore CLI で delete コマンドを実行して、行を削除できます。
次の例では、最初のプライマリキー列が "86"、2 番目のプライマリキー列が 6771 である行を削除します。
delete --pk '["86", 6771]'
SDK
Java SDK、Go SDK、Python SDK、Node.js SDK、.NET SDK、またはPHP SDK を使用してデータを削除できます。以下の例では、Java SDK を使用しています。
単一行の削除
-
行の削除
次のサンプルコードは、テーブルから 1 行のデータを削除する方法の例です。
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 より大きい場合にのみ、データテーブルから 1 行のデータを削除する方法の例です。
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));
}
複数行の削除
-
データを削除する前に、削除対象の行のプライマリキーを取得する方法を選択します。
-
プライマリキーを取得したら、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());
}
}
課金
操作で消費される Capacity Unit (CU) に基づいて課金されます。インスタンスタイプに応じて、オンデマンドまたは予約済みの読み取り/書き込み CU に基づいて課金されます。
DeleteRow 操作で消費される読み取り CU および書き込み CU は、次のように計算されます。
-
消費される書き込み CU:削除された行のプライマリキー列の合計サイズを 4 KB で割り、小数点以下を切り上げた整数値。
-
消費される読み取り CU:条件チェックが指定されている場合 (IGNORE に設定されていない場合)、プライマリキー列の合計サイズを 4 KB で割り、小数点以下を切り上げた整数値。
-
行存在条件が満たされないために操作が失敗した場合、1 書き込み CU を消費します。