Java SDK 修改、新增或删除数据表中单行的属性列,支持指定数据版本号,适用于按主键定位行后增量调整列数据的场景。
前提条件
安装 Tablestore Java SDK并初始化客户端。
功能说明
public UpdateRowResponse updateRow(UpdateRowRequest updateRowRequest) throws TableStoreException, ClientException按主键定位单行后增量更新属性列。通过 RowUpdateChange 携带主键和列变更操作,结果通过 response.getConsumedCapacity() 获取消耗 CU。
以下示例修改数据表 update_row_demo 中主键值为 row1 的行,将属性列 col1 的值改为 changed_val1。
String tableName = "update_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
rowUpdateChange.put("col1", ColumnValue.fromString("changed_val1"));
UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));
System.out.println("RequestId: " + response.getRequestId());
System.out.println("Write CU: " + response.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());关键参数:
tableName(必选):更新的数据表名称。
primaryKey(必选):主键信息,必须包含全部主键列。
columnsToUpdate(必选):通过
RowUpdateChange的put/deleteColumn/deleteColumns方法添加列变更。
参数说明
通过 RowUpdateChange 携带单行更新信息,各参数说明如下。
名称 | 类型 | 说明 |
tableName(必选) | String | 更新的数据表名称。 |
primaryKey(必选) | PrimaryKey | 主键信息,包括主键列名称和主键值。
|
columnsToUpdate(必选) | List<Pair<Column, Type>> | 待更新的属性列变更列表。通过 |
condition(可选) | Condition | 写入条件,详情请参见条件更新。 |
场景示例
写入指定版本号的属性列
通过 put 的第三个参数指定属性列的数据版本号(毫秒时间戳),适用于按业务时间归档历史值的场景。
String tableName = "update_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
// 第三个参数指定数据版本号(毫秒时间戳)
long version = System.currentTimeMillis();
rowUpdateChange.put("col2", ColumnValue.fromString("val2"), version);
client.updateRow(new UpdateRowRequest(rowUpdateChange));删除属性列指定版本
通过 deleteColumn 删除指定版本号的列数据,其他版本保留。
String tableName = "update_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
// 删除 col2 列指定版本号(毫秒时间戳)的数据
rowUpdateChange.deleteColumn("col2", 1747893563831L);
client.updateRow(new UpdateRowRequest(rowUpdateChange));删除整个属性列
通过 deleteColumns 删除属性列的所有版本数据。
String tableName = "update_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowUpdateChange rowUpdateChange = new RowUpdateChange(tableName, primaryKey);
// 删除整个 col2 属性列(所有版本)
rowUpdateChange.deleteColumns("col2");
client.updateRow(new UpdateRowRequest(rowUpdateChange));