本文介紹如何通過 Java SDK 對錶格儲存的資料進行批次更新操作,包括寫入資料、修改資料和刪除資料,支援同時操作多個表的資料。
注意事項
服務端檢查到部分操作的參數錯誤時會拋出參數錯誤異常,此時該請求中的所有操作都將不執行。
前提條件
方法說明
public BatchWriteRowResponse batchWriteRow(BatchWriteRowRequest batchWriteRowRequest) throws TableStoreException, ClientException範例程式碼
以下範例程式碼使用批量資料操作方法在 test_table 表中插入一行資料。
public static void batchWriteRowExample(SyncClient client) {
// 構造請求資料
BatchWriteRowRequest batchWriteRowRequest = new BatchWriteRowRequest();
// 添加 RowPutChange
PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"))
.build();
RowPutChange rowPutChange = new RowPutChange("test_table", primaryKey);
batchWriteRowRequest.addRowChange(rowPutChange);
// 調用 batchWriteRow 方法進行批量資料操作
BatchWriteRowResponse batchWriteRowResponse = client.batchWriteRow(batchWriteRowRequest);
// 返回結果處理
System.out.println("* RequestId: " + batchWriteRowResponse.getRequestId());
System.out.println("* Is All Succeeded: " + batchWriteRowResponse.isAllSucceed());
if(!batchWriteRowResponse.isAllSucceed()) {
System.out.println("* Failed Rows: " + batchWriteRowResponse.getFailedRows().size());
for(BatchWriteRowResponse.RowResult rowResult:batchWriteRowResponse.getFailedRows()) {
System.out.println(batchWriteRowRequest.getRowChange(rowResult.getTableName(), rowResult.getIndex()).getPrimaryKey() + " | " + rowResult.getError());
}
}
}不同類型的資料操作範例程式碼參考如下。
RowPutChange:寫入行資料。
PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder() .addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1")) .build(); RowPutChange rowPutChange = new RowPutChange("test_table", primaryKey); batchWriteRowRequest.addRowChange(rowPutChange);寫入行資料時添加屬性列。
// 添加屬性列 rowPutChange.addColumn("col1", ColumnValue.fromString("val1")); // 添加自訂資料版本號碼的屬性列 rowPutChange.addColumn("col2", ColumnValue.fromString("val2"), System.currentTimeMillis());RowUpdateChange:更新行資料,您可以修改屬性列的值、添加資料列、刪除屬性列的某個版本或整個屬性列。
PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder() .addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1")) .build(); RowUpdateChange rowUpdateChange = new RowUpdateChange("test_table", primaryKey); rowUpdateChange.put("col1", ColumnValue.fromString("changed_val1")); batchWriteRowRequest.addRowChange(rowUpdateChange);更新行資料時添加或刪除屬性列。
// 添加屬性列 rowUpdateChange.put("col3", ColumnValue.fromString("val3")); // 添加自訂資料版本號碼的屬性列 rowUpdateChange.put("col4", ColumnValue.fromString("val4"), System.currentTimeMillis()); // 刪除屬性列 rowUpdateChange.deleteColumns("col2");RowDeleteChange:刪除行資料。
PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder() .addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1")) .build(); RowDeleteChange rowDeleteChange = new RowDeleteChange("test_table", primaryKey); batchWriteRowRequest.addRowChange(rowDeleteChange);