DynamoDB: tabla de consultas

La consulta de una tabla requiere principalmente seleccionar una tabla, especificar una clave de partición y ejecutar la consulta; con las opciones de usar índices secundarios y realizar un filtrado más profundo a través de operaciones de escaneo.

Utilice la consola GUI, Java u otra opción para realizar la tarea.

Tabla de consultas usando la consola GUI

Realice algunas consultas sencillas utilizando las tablas creadas anteriormente. Primero, abra la consola enhttps://console.aws.amazon.com/dynamodb

Escoger Tables en el panel de navegación y seleccione Replyde la lista de la tabla. Luego seleccione elItems pestaña para ver los datos cargados.

Seleccione el enlace de filtrado de datos ("Escanear: [Tabla] Responder") debajo del Create Item botón.

En la pantalla de filtrado, seleccione Consulta para la operación. Ingrese el valor de la clave de partición apropiado y haga clic enStart.

los Reply la tabla luego devuelve elementos coincidentes.

Tabla de consultas usando Java

Utilice el método de consulta en Java para realizar operaciones de recuperación de datos. Requiere especificar el valor de la clave de partición, con la clave de clasificación como opcional.

Codifique una consulta Java creando primero una querySpec objectdescribiendo parámetros. Luego, pase el objeto al método de consulta. Usamos la clave de partición de los ejemplos anteriores.

Puede revisar el siguiente ejemplo:

import java.util.HashMap;
import java.util.Iterator;

import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.ItemCollection;
import com.amazonaws.services.dynamodbv2.document.QueryOutcome;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.document.spec.QuerySpec;
import com.amazonaws.services.dynamodbv2.document.utils.NameMap;

public class ProductsQuery {  
   public static void main(String[] args) throws Exception {  
      AmazonDynamoDBClient client = new AmazonDynamoDBClient() 
         .withEndpoint("http://localhost:8000");  
      
      DynamoDB dynamoDB = new DynamoDB(client);  
      Table table = dynamoDB.getTable("Products");  
      HashMap<String, String> nameMap = new HashMap<String, String>(); 
      nameMap.put("#ID", "ID");  
      HashMap<String, Object> valueMap = new HashMap<String, Object>(); 
      valueMap.put(":xxx", 122);
      QuerySpec querySpec = new QuerySpec() 
         .withKeyConditionExpression("#ID = :xxx") 
         .withNameMap(new NameMap().with("#ID", "ID")) 
         .withValueMap(valueMap);  
      
      ItemCollection<QueryOutcome> items = null; 
      Iterator<Item> iterator = null; 
      Item item = null;  
      try { 
         System.out.println("Product with the ID 122"); 
         items = table.query(querySpec);  
         iterator = items.iterator(); 
         
         while (iterator.hasNext()) { 
            item = iterator.next(); 
            System.out.println(item.getNumber("ID") + ": " 
               + item.getString("Nomenclature")); 
         } 
      } catch (Exception e) { 
         System.err.println("Cannot find products with the ID number 122"); 
         System.err.println(e.getMessage()); 
      } 
   } 
}

Tenga en cuenta que la consulta utiliza la clave de partición, sin embargo, los índices secundarios proporcionan otra opción para las consultas. Su flexibilidad permite la consulta de atributos no clave, un tema que se discutirá más adelante en este tutorial.

El método de exploración también admite operaciones de recuperación mediante la recopilación de todos los datos de la tabla. losoptional .withFilterExpression evita que aparezcan en los resultados elementos fuera de los criterios especificados.

Más adelante en este tutorial, discutiremos scanningen detalle. Ahora, eche un vistazo al siguiente ejemplo:

import java.util.Iterator;

import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.ItemCollection;
import com.amazonaws.services.dynamodbv2.document.ScanOutcome;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.document.spec.ScanSpec;
import com.amazonaws.services.dynamodbv2.document.utils.NameMap;
import com.amazonaws.services.dynamodbv2.document.utils.ValueMap;

public class ProductsScan {  
   public static void main(String[] args) throws Exception {  
      AmazonDynamoDBClient client = new AmazonDynamoDBClient() 
         .withEndpoint("http://localhost:8000");  
      
      DynamoDB dynamoDB = new DynamoDB(client);  
      Table table = dynamoDB.getTable("Products");  
      ScanSpec scanSpec = new ScanSpec() 
         .withProjectionExpression("#ID, Nomenclature , stat.sales") 
         .withFilterExpression("#ID between :start_id and :end_id") 
         .withNameMap(new NameMap().with("#ID",  "ID")) 
         .withValueMap(new ValueMap().withNumber(":start_id", 120)
         .withNumber(":end_id", 129));  
      
      try { 
         ItemCollection<ScanOutcome> items = table.scan(scanSpec);  
         Iterator<Item> iter = items.iterator(); 
        
         while (iter.hasNext()) {
            Item item = iter.next(); 
            System.out.println(item.toString()); 
         } 
      } catch (Exception e) { 
         System.err.println("Cannot perform a table scan:"); 
         System.err.println(e.getMessage()); 
      } 
   } 
}