在DynamoDB中更新多个记录

Roh*_*han 2 batch-processing amazon-dynamodb

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

not*_*est 6

DynamoDB没有batchUpdate直接的API.它有batch get itembatch write itemAPI.

但是,您可以使用batchWriteItemAPI更新项目.

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

BatchWriteItemSpec

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

TableWriteItems

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

addItemToPut

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

代码示例: -

files - 是表名

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;
            }
Run Code Online (Sandbox Code Playgroud)