2017-04-18 120 views
1

如何在單個查詢中更新DynamoDB中的多個記錄? 我有一個csv文件作爲基於csv文件的輸入,我必須更新數據庫中的多個記錄(只有一個屬性)。 有沒有可用的API?或者這可以使用批處理(Spring-batch)來完成?在DynamoDB中更新多條記錄

回答

3

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