Java (AWS SDK v2) での DynamoDB UpdateItem
UpdateItem は1つのアイテムの特定の属性を変更し(アイテムが存在しなければ作成し)、それ以外はそのまま残します。AWS SDK for Java 2.x では、updateExpression を持つ UpdateItemRequest を構築します。
Code
import java.util.HashMap;
import java.util.Map;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.model.ReturnValue;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemResponse;
public class UpdateItemExample {
public static void main(String[] args) {
try (DynamoDbClient ddb = DynamoDbClient.builder()
.region(Region.US_EAST_1)
.build()) {
Map<String, AttributeValue> key = new HashMap<>();
key.put("Artist", AttributeValue.builder().s("Arturo Sandoval").build());
key.put("SongTitle", AttributeValue.builder().s("Cubano Chant").build());
Map<String, String> names = new HashMap<>();
names.put("#upd0", "Genre");
names.put("#upd1", "Year");
names.put("#upd2", "Awards");
Map<String, AttributeValue> values = new HashMap<>();
values.put(":updValue0", AttributeValue.builder().s("Latin Jazz").build());
values.put(":updValue1", AttributeValue.builder().n("1994").build());
values.put(":updValue2", AttributeValue.builder().n("1").build());
UpdateItemRequest request = UpdateItemRequest.builder()
.tableName("Music")
.key(key)
.updateExpression("SET #upd0 = :updValue0, #upd1 = :updValue1 ADD #upd2 :updValue2")
.expressionAttributeNames(names)
.expressionAttributeValues(values)
.returnValues(ReturnValue.ALL_NEW)
.build();
UpdateItemResponse response = ddb.updateItem(request);
System.out.println(response.attributes()); // the item after the update
} catch (DynamoDbException e) {
System.err.println(e.getMessage());
}
}
}Explanation
key— 更新するアイテムの完全なプライマリキー。updateExpression— 1つ以上の句:SETは属性を代入します(#upd0 = :updValue0はGenreを設定、#upd1 = :updValue1はYearを設定)。すべての属性はexpressionAttributeNamesを介してエイリアス化されるので、Yearのような予約語は常に安全です。- 数値に対する
ADDはアトミックなインクリメントを行います(ADD #upd2 :updValue2はAwardsに 1 を加えます)。並行処理下でも安全で、read-modify-write の競合はありません。REMOVEは属性を削除し、DELETEはセットから要素を除去します。
expressionAttributeValues—:placeholder→ 型付きAttributeValueのマップ。returnValues(ReturnValue.ALL_NEW)— 更新後の完全なアイテムをresponse.attributes()で返します(他にUPDATED_NEW、ALL_OLD、UPDATED_OLD、NONE)。- アップサートのセマンティクス —
UpdateItemはキーが存在しなければアイテムを作成します。更新のみにするにはconditionExpression(例:attribute_exists(Artist))を追加します。 - レガシーな
attributeUpdatesマップより更新式を優先しましょう。式は1回のリクエストで複数の句、エイリアス、条件をサポートします。
Do it visually
DynamoDB Expression Builder は名前/値のマップとともに SET / ADD / REMOVE の句を構築し、実行可能なコードをコピーします。
GUI でアイテムを編集するには(フィールドを変更し、生成された UpdateExpression を確認し、コードをコピー)、DynoTable をダウンロードしてください。
Related examples
- DynamoDB UpdateItem in Go — AWS SDK for Go v2 による同じ更新。
- DynamoDB PutItem in Java — 代わりにアイテム全体を置き換える。
- DynamoDB update expressions —
SET、ADD、REMOVE、DELETE、およびイディオム。 - Understanding ReturnValues — 各
ReturnValuesオプションが何を返すか。 - "Attribute name is a reserved keyword" — ここでエイリアスマップが任意でない理由。
- "Invalid UpdateExpression" syntax errors — よくある SET/ADD の構文ミスの解読。
References
- UpdateItem — Amazon DynamoDB API Reference
- Use UpdateItem with an AWS SDK or CLI — Amazon DynamoDB Developer Guide
- DynamoDbClient — AWS SDK for Java 2.x API Reference
- UpdateItemRequest — AWS SDK for Java 2.x API Reference
- Update expressions — Amazon DynamoDB Developer Guide
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。