表格存儲提供了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);
//設置條件更新,期望原行存在且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接口,查詢指定主鍵范圍內的數據,并獲取待刪除數據的主鍵信息。具體操作,請參見范圍讀取數據。
如果要刪除滿足指定條件的數據,請創建多元索引后,使用多元索引查詢滿足指定條件的數據,并獲取待刪除數據的主鍵信息。具體操作,請參見創建多元索引和使用SDK通過多元索引查詢數據。
調用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()); } }
文檔內容是否對您有幫助?