Tablestore SDK for Java を使用して、完全なプライマリキーで識別される行内の属性列を追加、変更、または削除します。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化します。
説明
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 (任意) |
|
更新条件です。デフォルトでは、Tablestore は行が存在するかどうかを確認しません。 条件の設定方法については、「条件付き更新の使用」をご参照ください。 |
|
returnType (任意) |
|
戻り値の型。デフォルト値は アトミックカウンターの設定方法については、「アトミックカウンターの使用」をご参照ください。 |
|
returnColumnNames (任意) |
|
更新後の値を返す対象の属性列です。このパラメーターはアトミックカウンターにのみ適用されます。 |
属性列変更メソッド
次のメソッドを呼び出して、columnsToUpdate に変更を追加します。
-
put: 属性列を追加するか、新しいバージョンを書き込みます。データバージョン番号を指定できます。 -
deleteColumn: 属性カラムの指定されたバージョンを削除します。 -
deleteColumns: 属性列のすべてのバージョンを削除します。 -
increment:INTEGER型の属性列をアトミックにインクリメントします。
レスポンス
UpdateRowResponse には、次の操作固有フィールドが含まれます。
|
フィールド |
型 |
説明 |
|
|
|
|
シナリオ
バージョン番号を指定した属性列の書き込み
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 を使用して、属性列の 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.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));