LoginSignup
0
0

More than 1 year has passed since last update.

pythonを利用したdynamoDBからのレコード取得(1MB以上のレコード数)

Posted at

はじめに

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'])
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0