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?