はじめに
DynamoDBから大量にレコードを取得することに困ったので、備忘録
一度に取得できるデータ量について
一度に取得できるデータ量は1MBまでと決まっているので、それを超える量のデータは1度では取得しきれずに、複数回データを取得することが必要である。
複数回データを取得する方法
前回までのレコード取得でどこまでを取得しているかを引数に渡す必要がある。
全レコード取得できていないときには、responseに「LastEvaluatedKey」というキーを持っている。
そのキーを引数に入れて再度DBにアクセスすることで、続きからデータを取得することができる。
全件取得するためには、LastEvaluatedKeyが帰ってこなくなるまで、無限ループさせてやれば良い。
import boto3
from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('TABLE_NAME')
response = table.query(
KeyConditionExpression = Key('pk').eq('XXX'),
)
# 下記のwhile内で取得したレコードを連結するための箱(data)の準備
data = response['Items']
# レスポンスに LastEvaluatedKey が含まれなくなるまで無限ループ
while 'LastEvaluatedKey' in response:
response = table.query(
KeyConditionExpression = Key('pk').eq('XXX'),
ExclusiveStartKey=response['LastEvaluatedKey']
)
# dataにレコードを追加
data.extend(response['Items'])