Como faço para implementar a paginação no Amazon DynamoDB?

Data da última atualização: 12/08/2022

Quando tento buscar itens de uma tabela do Amazon DynamoDB usando uma operação de consulta ou verificação, a resposta não retorna os resultados completos.

Resolução

Esse problema ocorre nas seguintes condições:

  • Sua operação inicial de verificação ou consulta contém LastEvaluatedKey na resposta.
  • Você não executou uma operação subsequente usando essa chave como ExclusiveStartKey para a próxima solicitação.

Você pode resolver esse problema implementando a paginação para sua tabela do DynamoDB. Paginação é o processo de envio de solicitações subsequentes para continuar quando uma solicitação anterior estiver incompleta. Uma operação de consulta ou verificação no DynamoDB pode retornar resultados incompletos e exigir solicitações subsequentes para atingir todo o conjunto de resultados. Isso ocorre porque o DynamoDB pagina os resultados de uma operação de consulta ou verificação e retorna no máximo 1 MB de dados em uma única operação. Esse é um limite rígido no DynamoDB. Com a paginação, os resultados das operações de verificação e consulta são divididos em páginas de dados com 1 MB ou menos de tamanho.

Para paginar os resultados e recuperar uma página por vez, verifique o resultado de baixo nível de uma operação de verificação ou consulta para ver se o resultado contém o elemento LastEvaluatedKey. Você pode obter os resultados restantes da solicitação inicial usando outra operação de verificação ou consulta com os mesmos parâmetros, mas usando o valor LastEvaluatedKey como o parâmetro ExclusiveStartKey. Se o resultado não incluir o valor LastEvaluatedKey, não haverá itens a serem recuperados.

Para obter mais informações, consulte Paginar resultados de consulta de tabela e Paginar os resultados.

Para implementar a paginação no Boto3 usando LastEvaluatedKey, use o seguinte exemplo de código:

from __future__ import print_function  # Python 2/3 compatibility
import boto3
from botocore.exceptions import ClientError

# Create Client
session = boto3.session.Session()
dynamoDbClient = session.client('dynamodb')

table_name = 'AmazonBins'

# Track number of Items read
item_count = 0

try:
    # Get the first 1MB of data
    response = dynamoDbClient.scan(
        TableName=table_name
    )

except ClientError as error:
    print("Something went wrong: ")
    print(error.response['ResponseMetadata'])

# Track number of Items read
item_count += len(response['Items'])

# Paginate returning up to 1MB of data for each iteration
while 'LastEvaluatedKey' in response:
    try:
        response = dynamoDbClient.scan(
            TableName=table_name,
            ExclusiveStartKey=response['LastEvaluatedKey']
        )
        # Track number of Items read
        item_count += len(response['Items'])

    except ClientError as error:
        print("Something went wrong: ")
        print(error.response['ResponseMetadata'])

print("Total number of items found: {}".format(item_count))

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?