Java SDK 可按完整主鍵新增、修改或刪除一行中的屬性列。
前提條件
安裝 Tablestore Java SDK並初始化用戶端。
功能說明
調用 updateRow 按完整主鍵更新一行資料,可新增或修改屬性列、刪除屬性列的指定版本或全部版本,以及執行原子計數。
public UpdateRowResponse updateRow(UpdateRowRequest updateRowRequest) throws TableStoreException, ClientException
以下樣本修改資料表 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"));
client.updateRow(new UpdateRowRequest(rowUpdateChange));
參數說明
UpdateRowRequest 包含以下參數。
|
名稱 |
類型 |
說明 |
|
rowChange(必選) |
|
單行更新配置。 |
|
transactionId(可選) |
|
局部事務 ID。僅在局部事務內更新資料時設定。 關於如何擷取和使用該 ID,請參見局部事務。 |
行變更
rowChange 的類型為 RowUpdateChange,包含以下參數。
|
名稱 |
類型 |
說明 |
|
tableName(必選) |
|
資料表名稱。 |
|
primaryKey(必選) |
|
行主鍵。必須包含資料表的全部主鍵列,且列名稱、順序和類型必須與資料表的主鍵結構一致。主鍵列支援 |
|
columnsToUpdate(必選) |
|
屬性列變更列表。通過 |
|
condition(可選) |
|
更新條件,預設不檢查行是否存在。 關於條件的配置方法,請參見條件更新。 |
|
returnType(可選) |
|
傳回型別。預設值為 關於原子計數器的配置方法,請參見原子計數器。 |
|
returnColumnNames(可選) |
|
要返回更新後值的屬性列名稱。僅用於原子計數器情境。 |
屬性列變更方法
通過以下方法向 columnsToUpdate 添加屬性列變更。
-
put:新增屬性列或寫入屬性列的新版本,可指定資料版本號碼。 -
deleteColumn:刪除屬性列的指定版本。 -
deleteColumns:刪除屬性列的全部版本。 -
increment:對INTEGER類型屬性列執行原子加操作。
傳回值
UpdateRowResponse 包含以下業務欄位。
|
欄位 |
類型 |
說明 |
|
|
|
更新後的屬性列,通過 |
情境樣本
寫入指定版本號碼的屬性列
通過 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));