AWS Lambda(Python3.6)からDynamoDBのデータをバッチ登録する

AWS Lambda(Python3.6)からDynamoDBのデータをバッチ登録する

AWS Lambda(Python3.6)からDynamoDBのデータをbatch_writerメソッドを使用してバッチ登録してみます。

import boto3;
def lambda_handler(event, context):
  dynamodb = boto3.resource('dynamodb')
  table = dynamodb.Table('users2')
  with table.batch_writer() as batch:
    batch.put_item(
      Item={
        'user-name': 'test',
        'emp-id': 3
      }
    )
    batch.put_item(
      Item={
        'user-name': 'test',
        'emp-id': 4
      }
    )

このbatch.put_itemを繰り返し記述することで大量データを高速に登録することができます。

但しコード量が長くなってしまうので、for-in文を使用してループします。

以下、100件登録する例です。

import boto3;
def lambda_handler(event, context):
  dynamodb = boto3.resource('dynamodb')
  table = dynamodb.Table('users2')
  with table.batch_writer() as batch:
    for i in range(100): # 100回ループする
      batch.put_item(
        Item={
          'user-name': 'test',
          'emp-id': i
        }
      )

これで100件登録することができます。ここで考えられるのは、キー重複してエラーとなってしまうということが考えられます。例えば既に1件だけでもデータが存在していた場合などです。

これを回避するために、overwrite_by_pkeysというのを指定できます。

batch_write(overwrite_by_pkeys=['partition_key', 'sort_key'])

とするだけです。’partition_key’と’sort_key’には実際の属性名を指定します。

以下200回ループして登録するプログラムを実行してみます。(既に100件の重複データがあ存在するとします)

import boto3;
def lambda_handler(event, context):
  dynamodb = boto3.resource('dynamodb')
  table = dynamodb.Table('users2')
  with table.batch_writer(overwrite_by_pkeys=['user-name', 'emp-id']) as batch:
    for i in range(200):
      batch.put_item(
        Item={
          'user-name': 'test',
          'emp-id': i
        }
      )

正常に新たに100件追加されることが確認できます。結構便利な機能ですね。

put_itemメソッドで登録するのは「AWS Lambda(Python3.6)からDynamoDBにデータ登録する」参考ください。

コメント

タイトルとURLをコピーしました