DynamoDB - Tabella delle query

L'interrogazione di una tabella richiede principalmente la selezione di una tabella, la specifica di una chiave di partizione e l'esecuzione della query; con la possibilità di utilizzare indici secondari ed eseguire un filtraggio più approfondito attraverso le operazioni di scansione.

Utilizzare la console della GUI, Java o un'altra opzione per eseguire l'attività.

Tabella query utilizzando la console della GUI

Eseguire alcune semplici query utilizzando le tabelle create in precedenza. Innanzitutto, apri la console inhttps://console.aws.amazon.com/dynamodb

Scegliere Tables dal riquadro di navigazione e selezionare Replydall'elenco delle tabelle. Quindi seleziona il fileItems scheda per vedere i dati caricati.

Selezionare il collegamento del filtro dei dati ("Scansione: [Tabella] Rispondi") sotto il file Create Item pulsante.

Nella schermata di filtraggio, seleziona Query per l'operazione. Immettere il valore della chiave di partizione appropriato e fare clic suStart.

Il Reply table quindi restituisce gli elementi corrispondenti.

Tabella query utilizzando Java

Utilizzare il metodo di query in Java per eseguire operazioni di recupero dei dati. Richiede di specificare il valore della chiave di partizione, con la chiave di ordinamento come opzionale.

Codifica una query Java creando prima un file querySpec objectdescrivere i parametri. Quindi passare l'oggetto al metodo di query. Usiamo la chiave di partizione degli esempi precedenti.

Puoi rivedere il seguente esempio:

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()); 
      } 
   } 
}

Si noti che la query utilizza la chiave di partizione, tuttavia, gli indici secondari forniscono un'altra opzione per le query. La loro flessibilità consente l'interrogazione di attributi non chiave, un argomento che verrà discusso più avanti in questo tutorial.

Il metodo di scansione supporta anche le operazioni di recupero raccogliendo tutti i dati della tabella. Iloptional .withFilterExpression impedisce agli elementi al di fuori dei criteri specificati di apparire nei risultati.

Più avanti in questo tutorial, discuteremo scanningin dettaglio. Ora, dai un'occhiata al seguente esempio:

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()); 
      } 
   } 
}