在DynamoDB中更新多条记录
问题描述:
如何在单个查询中更新DynamoDB中的多个记录? 我有一个csv文件作为基于csv文件的输入,我必须更新数据库中的多个记录(只有一个属性)。 有没有可用的API?或者这可以使用批处理(Spring-batch)来完成?在DynamoDB中更新多条记录
答
DynamoDB直接没有batchUpdate
API。它确实有batch get item
和batch write item
API。
但是,您可以使用batchWriteItem
API更新该项目。
1)使用下面BatchWriteItemSpec
类构建请求
2)使用以下TableWriteItems
类构造一个需要被更新的项目
3 )使用下面的addItemToPut
方法(或withItemsToPut
)添加新属性
的batchWriteItem
API创建一个新的项,如果该项目(即分区键)不可用。如果分区键可用,它将更新现有项目。你的用例属于这个类别。
代码示例: -
文件 - 是表名
文件名 - 分区键
transcriptionnew - 添加新的属性(或者可以更新现有属性值)
DynamoDB dynamoDB = new DynamoDB(dynamoDBClient);
Item itemUpdate1 = new Item();
itemUpdate1.withKeyComponent("fileName", "file1")
.withString("transcriptionnew", "new value");
Item itemUpdate2 = new Item();
itemUpdate2.withKeyComponent("fileName", "file2")
.withString("transcriptionnew", "new value");
TableWriteItems tableWriteItems = new TableWriteItems("files").withItemsToPut(itemUpdate1, itemUpdate2);
BatchWriteItemSpec batchWriteItemSpec = new BatchWriteItemSpec().withTableWriteItems(tableWriteItems);
BatchWriteItemOutcome batchWriteItemOutCome = dynamoDB.batchWriteItem(batchWriteItemSpec);
if (batchWriteItemOutCome.getUnprocessedItems().isEmpty()) {
//All items are processed
return true;
}