更新单行数据

更新时间:
复制 MD 格式

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(必选):通过 RowUpdateChangeput / deleteColumn / deleteColumns 方法添加列变更。

参数说明

通过 RowUpdateChange 携带单行更新信息,各参数说明如下。

名称

类型

说明

tableName(必选)

String

更新的数据表名称。

primaryKey(必选)

PrimaryKey

主键信息,包括主键列名称和主键值。

  • 主键列数据类型包括 STRING、INTEGER 和 BINARY。

  • 主键个数和类型必须与数据表的主键 schema 保持一致。

columnsToUpdate(必选)

List<Pair<Column, Type>>

待更新的属性列变更列表。通过 RowUpdateChange 的方法添加列变更操作:put 新增或修改属性列,deleteColumn 删除指定版本的列数据,deleteColumns 删除整个属性列。详情请参见场景示例。

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));

相关文档