DynamoDB: obtención de elementos

Para recuperar un elemento en DynamoDB es necesario utilizar GetItem y especificar el nombre de la tabla y la clave principal del elemento. Asegúrese de incluir una clave primaria completa en lugar de omitir una parte.

Por ejemplo, omitir la clave de clasificación de una clave compuesta.

El comportamiento de GetItem se ajusta a tres valores predeterminados:

  • Se ejecuta como una lectura eventualmente consistente.
  • Proporciona todos los atributos.
  • No detalla su consumo unitario de capacidad.

Estos parámetros le permiten anular el comportamiento predeterminado de GetItem.

Recuperar un artículo

DynamoDB garantiza la confiabilidad al mantener múltiples copias de elementos en múltiples servidores. Cada escritura exitosa crea estas copias, pero su ejecución requiere un tiempo considerable; significando eventualmente consistente. Esto significa que no puede intentar una lectura inmediatamente después de escribir un elemento.

Puede cambiar la lectura finalmente coherente predeterminada de GetItem, sin embargo, el costo de más datos actuales sigue siendo el consumo de más unidades de capacidad; específicamente, dos veces más. Nota DynamoDB normalmente logra coherencia en cada copia en un segundo.

Puede utilizar la consola GUI, Java u otra herramienta para realizar esta tarea.

Recuperación de elementos mediante Java

El uso de Java en operaciones de recuperación de elementos requiere crear una instancia de clase de DynamoDB, una instancia de clase de tabla y llamar al método getItem de la instancia de tabla. Luego, especifique la clave principal del artículo.

Puede revisar el siguiente ejemplo:

DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient( 
   new ProfileCredentialsProvider()));  
Table table = dynamoDB.getTable("ProductList");  
Item item = table.getItem("IDnum", 109);

En algunos casos, es necesario especificar los parámetros para esta operación.

El siguiente ejemplo usa .withProjectionExpression y GetItemSpec para especificaciones de recuperación -

GetItemSpec spec = new GetItemSpec() 
   .withPrimaryKey("IDnum", 122) 
   .withProjectionExpression("IDnum, EmployeeName, Department") 
   .withConsistentRead(true);

Item item = table.getItem(spec);
System.out.println(item.toJSONPretty());

También puede revisar el siguiente ejemplo más grande para una mejor comprensión.

Note- La siguiente muestra puede asumir una fuente de datos creada previamente. Antes de intentar ejecutar, adquiera bibliotecas de soporte y cree las fuentes de datos necesarias (tablas con las características requeridas u otras fuentes referenciadas).

Esta muestra también utiliza Eclipse IDE, un archivo de credenciales de AWS y AWS Toolkit dentro de un proyecto Eclipse AWS Java.

package com.amazonaws.codesamples.document;

import java.io.IOException
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.DeleteItemOutcome;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.Table;

import com.amazonaws.services.dynamodbv2.document.UpdateItemOutcome;
import com.amazonaws.services.dynamodbv2.document.spec.DeleteItemSpec;
import com.amazonaws.services.dynamodbv2.document.spec.UpdateItemSpec;
import com.amazonaws.services.dynamodbv2.document.utils.NameMap;
import com.amazonaws.services.dynamodbv2.document.utils.ValueMap;
import com.amazonaws.services.dynamodbv2.model.ReturnValue;

public class GetItemOpSample {
   static DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient(
      new ProfileCredentialsProvider()));
   
   static String tblName = "ProductList";
   public static void main(String[] args) throws IOException {
      createItems();
      retrieveItem();
      
      // Execute updates
      updateMultipleAttributes();
      updateAddNewAttribute();
      updateExistingAttributeConditionally();
      
      // Item deletion
      deleteItem();
   }
   private static void createItems() {
      Table table = dynamoDB.getTable(tblName);
      try {
         Item item = new Item()
            .withPrimaryKey("ID", 303)
            .withString("Nomenclature", "Polymer Blaster 4000")
            .withStringSet( "Manufacturers",
            new HashSet<String>(Arrays.asList("XYZ Inc.", "LMNOP Inc.")))
            .withNumber("Price", 50000)
            .withBoolean("InProduction", true)
            .withString("Category", "Laser Cutter");
            table.putItem(item);
            
         item = new Item()
            .withPrimaryKey("ID", 313)
            .withString("Nomenclature", "Agitatatron 2000")
            .withStringSet( "Manufacturers",
            new HashSet<String>(Arrays.asList("XYZ Inc,", "CDE Inc.")))
            .withNumber("Price", 40000)
            .withBoolean("InProduction", true)
            .withString("Category", "Agitator");
         
         table.putItem(item);
      } catch (Exception e) {
         System.err.println("Cannot create items.");
         System.err.println(e.getMessage());
      }
   }
   private static void retrieveItem() {
      Table table = dynamoDB.getTable(tableName);
      try {
         Item item = table.getItem("ID", 303, "ID, Nomenclature, Manufacturers", null);
         System.out.println("Displaying retrieved items...");
         System.out.println(item.toJSONPretty());
      } catch (Exception e) {
         System.err.println("Cannot retrieve items.");
         System.err.println(e.getMessage());
      }
   }
}