全部產品
Search
文件中心

Tablestore:批次更新資料

更新時間:Jun 27, 2025

本文介紹如何通過 Java SDK 對錶格儲存的資料進行批次更新操作,包括寫入資料、修改資料和刪除資料,支援同時操作多個表的資料。

注意事項

服務端檢查到部分操作的參數錯誤時會拋出參數錯誤異常,此時該請求中的所有操作都將不執行。

前提條件

初始化Tablestore Client

方法說明

public BatchWriteRowResponse batchWriteRow(BatchWriteRowRequest batchWriteRowRequest) throws TableStoreException, ClientException

BatchWriteRowRequest 參數說明

名稱

類型

說明

rowChangesGroupByTable(必選)

Map<String, List<RowChange>>

行資料巨集指令清單,包括資料表名稱和資料操作類型。資料操作類型包括寫入資料、更新資料和刪除資料。

範例程式碼

以下範例程式碼使用批量資料操作方法在 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);

相關文檔