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