說明 組成表的基本單位為行,行由主鍵和屬性列組成。其中主鍵是必須的,且每一行的主鍵列的名稱和類型相同;屬性不是必須的,且每一行的屬性可以不同。更多資訊,請參見寬表模型介紹。
刪除單行資料
調用DeleteRow介面刪除一行資料。如果刪除的行不存在,則不會發生任何變化。
刪除單行資料時,您可以使用條件更新功能限制在滿足指定條件時刪除資料。更多資訊,請參見條件更新。
大量刪除資料
擷取到要刪除資料的主鍵資訊後,調用BatchWriteRow介面根據主鍵資訊大量刪除資料。
說明 如果要刪除指定時間之前的資料,您可以使用資料生命週期功能進行資料刪除。更多資訊,請參見資料生命週期(TTL)。
大量刪除資料時,您可以進行如下配置。
使用方式
使用控制台
您可以使用控制台刪除單行資料或者大量刪除資料。
登入Table Store控制台。
在概覽頁面,單擊執行個體操作列的執行個體管理。
在執行個體詳情頁簽的資料表列表地區,單擊資料表名稱。
在資料管理頁簽,選擇單行或者多行要刪除的資料後,單擊頁面下方的大量刪除。
在大量刪除對話方塊,單擊確定。
使用命令列工具CLI
您可以使用命令列工具執行delete
命令刪除一行資料。
以下樣本用於刪除第一主鍵列值為"86"
,第二主鍵列值為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);
//設定條件更新,期望原行存在且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());
//添加到batch操作中。
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());
//添加到batch操作中。
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方法再構造一個請求對失敗的行進行重試。此處只給出構造重試請求的部分。
* 推薦的重試方法是使用SDK的自訂重試策略功能,支援對batch操作的部分行錯誤進行重試。設定重試策略後,調用介面處無需增加重試代碼。
*/
BatchWriteRowRequest retryRequest = batchWriteRowRequest.createRequestForRetry(response.getFailedRows());
}
}
計費說明
根據實際計算消耗折算成CU進行計費。同時根據執行個體類型不同,計費時需要區分按量讀寫CU以及預留讀寫CU。
DeleteRow操作消耗的讀CU和寫CU說明如下:
消耗的寫CU為刪除的行主鍵資料大小除以4 KB向上取整。
如果指定條件檢查不為IGNORE,則消耗行主鍵資料大小除以4 KB向上取整的讀CU。
如果操作不滿足指定的行存在性檢查條件,則操作失敗並消耗1單位寫CU。