在DynamoDB中更新多个记录

时间:2017-04-18 09:19:48

标签: amazon-dynamodb batch-processing

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

1 个答案:

答案 0 :(得分:6)

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

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

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

BatchWriteItemSpec

2)使用下面的TableWriteItems类来构建需要更新的项目

TableWriteItems

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

addItemToPut

如果项目(即分区键)不可用,batchWriteItem API会创建一个新项目。如果分区键可用,它将更新现有项。您的用例属于此类别。

代码示例: -

文件 - 是表名

fileName - 是分区键

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