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

3 minuto de leitura
0

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

Resolução

Esse problema ocorre devido a essas duas condições:

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

Para resolver esse problema, implemente a paginação na sua tabela do DynamoDB. Paginação é o processo de enviar 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 obter o conjunto completo 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. O máximo de dados é 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.

Para implementar a paginação no Amazon DynamoDB, use a funcionalidade de paginação integrada. Execute um comando semelhante a este exemplo:

use DynamoDB.Paginator.Query.paginate

client = boto3.client("dynamodb")
paginator = client.get_paginator("scan")
params = {}

for page in paginator.paginate(params):
# do something

Você também pode paginar seus resultados e recuperá-los uma página por vez. Para ver se o resultado contém o elemento LastEvaluatedKey, verifique o resultado de baixo nível de uma operação de verificação ou consulta. Para obter os resultados restantes, use outra operação de verificação ou consulta com os mesmos parâmetros. Para a segunda operação, use 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 resultados.

Para usar LastEvaluatedKey para implementar a paginação no Boto3, execute um comando semelhante a este exemplo:

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))
AWS OFICIAL
AWS OFICIALAtualizada há 8 meses