¿Cómo puedo implementar la paginación en Amazon DynamoDB?

3 minutos de lectura
0

Cuando utilizo una operación de consulta o análisis para obtener elementos de una tabla de Amazon DynamoDB, la respuesta no devuelve todos los resultados.

Resolución

Este problema se debe a estas dos situaciones:

  • La respuesta de la operación inicial de consulta o análisis contiene LastEvaluatedKey.
  • No ha utilizado esta clave como ExclusiveStartKey en la solicitud siguiente para realizar una operación posterior.

Para solucionar este problema, implemente la paginación para la tabla de DynamoDB. El proceso de paginación consiste en enviar solicitudes posteriores para continuar con una solicitud anterior incompleta. Una operación de consulta o análisis en DynamoDB puede devolver resultados incompletos, de modo que se requerirán solicitudes posteriores para obtener todo el conjunto de resultados. Esto se debe a que DynamoDB pagina los resultados de una operación de consulta o análisis y devuelve 1 MB de datos como máximo por operación. El volumen máximo de datos es un límite estricto en DynamoDB. Con la paginación, los resultados de las operaciones de análisis y consulta se dividen en páginas de datos de 1 MB o menos.

Para implementar la paginación en Amazon DynamoDB, utilice la función de paginación integrada. Ejecute un comando similar al de este ejemplo:

use DynamoDB.Paginator.Query.paginate

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

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

También puede paginar los resultados y recuperarlos página por página. Para saber si el resultado contiene el elemento LastEvaluatedKey, compruebe el resultado de nivel inferior de una operación de análisis o consulta. Para obtener el resto de resultados, utilice otra operación de análisis o consulta con los mismos parámetros. En la segunda operación, utilice LastEvaluatedKey como parámetro ExclusiveStartKey. Si el resultado no incluye el valor LastEvaluatedKey, significa que no hay elementos que recuperar.

Para obtener más información, consulte Paginación de los resultados de la consulta de la tabla y Paginación de los resultados.

Para usar LastEvaluatedKey con el fin de implementar la paginación en Boto3, ejecute un comando similar al de este ejemplo:

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))
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 9 meses