説明
テーブルの基本単位は行であり、プライマリキー列と属性列で構成されます。プライマリキー列は必須であり、その名前と型はすべての行で同じでなければなりません。属性列はオプションであり、属性は行ごとに異なる場合があります。詳細については、「ワイドテーブルモデル」をご参照ください。
単一行の削除
DeleteRow API を呼び出して、単一の行を削除します。指定した行が存在しない場合、この操作による影響はありません。
条件付き更新 を使用すると、特定の条件を満たす場合にのみ行を削除できます。
複数行の削除
削除する行のプライマリキーを取得した後、BatchWriteRow API を呼び出して一括で削除します。
説明 特定の時間より古いデータを自動的に削除するには、生存時間 (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 を使用します。
単一行の削除
行の削除
次のサンプルコードは、テーブルからデータ行を削除する方法の例を示しています。
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));
}
複数行の削除
データを削除する前に、削除する行のプライマリキーを照会する方法を選択します。
プライマリキーを取得したら、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 に基づいて課金されます。
DeleteRow API によって消費される読み取り CU と書き込み CU は、次のように計算されます。
消費される書き込み CU:削除された行のプライマリキー列の合計サイズを 4 KB で除算し、整数に切り上げた値。
消費される読み取り CU:条件チェックが指定されている場合 (IGNORE に設定されていない場合)、プライマリキー列の合計サイズを 4 KB で除算し、整数に切り上げた値。
行の存在条件が満たされないために操作が失敗した場合、1 書き込み CU を消費します。