批量更新数据

本文介绍如何通过 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);

相关文档