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にデータ登録する」参考ください。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント