在DynamoDB中更新多条记录

问题描述:

如何在单个查询中更新DynamoDB中的多个记录? 我有一个csv文件作为基于csv文件的输入,我必须更新数据库中的多个记录(只有一个属性)。 有没有可用的API?或者这可以使用批处理(Spring-batch)来完成?在DynamoDB中更新多条记录

DynamoDB直接没有batchUpdate API。它确实有batch get itembatch write item API。

但是,您可以使用batchWriteItem API更新该项目。

1)使用下面BatchWriteItemSpec类构建请求

BatchWriteItemSpec

2)使用以下TableWriteItems类构造一个需要被更新的项目

TableWriteItems

3 )使用下面的addItemToPut方法(或withItemsToPut)添加新属性

addItemToPut

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; 
      }