2017-04-18 46 views
1

DynamoDBで複数のレコードを1つのクエリでどのように更新できますか? 私はcsvファイルに基づいて入力としてcsvファイルを持っています。私はDB内の複数のレコード(1つの属性のみ)を更新する必要があります。 利用できるAPIはありますか? またはこれはバッチ処理(春バッチ)を使用して行うことができますか?DynamoDBで複数のレコードを更新する

答えて

3

DynamoDBにはbatchUpdate APIが直接存在しません。それはbatch get itembatch write item APIを持っています。

ただし、batchWriteItem APIを使用してアイテムを更新できます。

1)を更新する必要がある項目を構築するために以下TableWriteItemsクラスを使用して)要求BatchWriteItemSpec

を構築するBatchWriteItemSpecクラス下に使用

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; 
      } 
関連する問題