プライマリキーで行を特定し、属性列を増分で追加、変更、または削除します。必要に応じて、バージョン番号を指定できます。Java SDK では、単一行に対するアトミックな更新に UpdateRow を使用します。一般的なユースケースには、ステータスフィールドの更新、履歴値のアーカイブ、論理削除が含まれます。
前提条件
Tablestore SDK for Java がインストールされており、OTSClient インスタンスが初期化されていること。
説明
public UpdateRowResponse updateRow(UpdateRowRequest updateRowRequest) throws TableStoreException, ClientException
プライマリキーで単一行を特定し、その属性列を増分で更新します。 RowUpdateChange を使用して、プライマリキーと列変更操作を保持します。消費キャパシティーユニット (CU) は response.getConsumedCapacity() から取得します。
次の例では、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());
パラメーター
RowUpdateChange オブジェクトには、単一行の更新ペイロードが含まれます。各パラメーターを次に示します。
|
名前 |
タイプ |
説明 |
|
tableName (必須) |
String |
更新するデータテーブルの名前。 |
|
primaryKey (必須) |
PrimaryKey |
プライマリキー情報。プライマリキー列名と値が含まれます。
|
|
columnsToUpdate (必須) |
(メソッド呼び出しで設定) |
属性列の変更リスト。次の
各操作のコードサンプルについては、「シナリオ」セクションをご参照ください。 |
|
condition (オプション) |
Condition |
書き込み条件を指定します。詳細については、「条件付き更新」をご参照ください。 |
シナリオ
バージョン番号を指定した属性列の書き込み
put の第 3 引数に、属性列のバージョン番号 (ミリ秒単位のタイムスタンプ) を指定します。この方法を使用すると、ビジネス時刻に紐づく履歴値をアーカイブできます。
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);
// 第 3 引数としてバージョン番号 (ミリ秒単位のタイムスタンプ) を指定します。
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 を使用すると、1 回の操作で属性列のすべてのバージョンを削除できます。
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));