Saltar al contenido

¿Cómo puedo obtener todos los elementos de una tabla de DynamoDB sin especificar el primario? key?

Este dilema se puede tratar de diversas maneras, sin embargo te damos la que en nuestra opinión es la solución más completa.

Solución:

Amazon DynamoDB proporciona la operación de escaneo para este propósito, que devuelve uno o más artículos y su attributes realizando un escaneo completo de una tabla. Tenga en cuenta las dos limitaciones siguientes:

  • Según el tamaño de su tabla, es posible que deba usar la paginación para recuperar el conjunto de resultados completo:

    Nota

    Si la cantidad total de elementos escaneados supera el límite de 1 MB, el escaneo se detiene y los resultados se devuelven al usuario con una LastEvaluatedKey para continuar el escaneo en una operación posterior. Los resultados también incluyen el número de elementos que superan el límite. Un escaneo puede dar como resultado que ningún dato de la tabla cumpla con los criterios de filtro.

    El conjunto de resultados finalmente es consistente.

  • La operación de escaneo es potencialmente costosa tanto en rendimiento como en unidades de capacidad consumidas (es decir, precio), consulte la sección Rendimiento de escaneo y consulta en Query and Scan en Amazon DynamoDB:

    […] Además, a medida que crece una tabla, la operación de exploración se ralentiza. La operación de escaneo examina cada elemento para los valores solicitados, y puede usar el rendimiento aprovisionado para una tabla grande en una sola operación. Para tiempos de respuesta más rápidos, diseñe sus tablas de manera que puedan usar las API Query, Get o BatchGetItem en su lugar. O bien, diseñe su aplicación para usar operaciones de escaneo de una manera que minimice el impacto en la tasa de solicitud de su tabla. Para obtener más información, consulte Pautas de rendimiento aprovisionado en Amazon DynamoDB. [emphasis mine]

Puede encontrar más detalles sobre esta operación y algunos ejemplos de fragmentos en Escaneo de tablas con el SDK de AWS para la API de bajo nivel de PHP para Amazon DynamoDB, siendo el ejemplo más simple que ilustra la operación:

$dynamodb = new AmazonDynamoDB();

$scan_response = $dynamodb->scan(array(
    'TableName' => 'ProductCatalog' 
));

foreach ($scan_response->body->Items as $item)

    echo "

Item Number:" . (string) $item->Id->AmazonDynamoDB::TYPE_NUMBER; echo "
Item Name: " . (string) $item->Title->AmazonDynamoDB::TYPE_STRING ."

";

Hola, puedes descargar usando boto3. en pitón

import boto3
from boto3.dynamodb.conditions import Key, Attr

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Table')
response = table.scan()
items = response['Items']
while 'LastEvaluatedKey' in response:
    print(response['LastEvaluatedKey'])
    response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
    items.extend(response['Items'])

Supuse que estabas usando PHP pero no lo mencionaste (editado). Encontré esta pregunta buscando en Internet y desde que obtuve la solución funcionando, para los que usan nodejs Aquí hay una solución simple usando scan:

  var dynamoClient = new AWS.DynamoDB.DocumentClient();
  var params = 
    TableName: config.dynamoClient.tableName, // give it your table name 
    Select: "ALL_ATTRIBUTES"
  ;

  dynamoClient.scan(params, function(err, data) 
    if (err) 
       console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
     else 
       console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
    
  );

Asumo mismo código se puede traducir a PHP también utilizando diferentes SDK de AWS

Aquí tienes las comentarios y puntuaciones

Recuerda algo, que tienes autorización de interpretar si descubriste tu incógnita en el momento preciso.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *