DynamoDB - Table de requête

L'interrogation d'une table nécessite principalement la sélection d'une table, la spécification d'une clé de partition et l'exécution de la requête; avec la possibilité d'utiliser des index secondaires et d'effectuer un filtrage plus approfondi via des opérations d'analyse.

Utilisez la console GUI, Java ou une autre option pour effectuer la tâche.

Table de requête à l'aide de la console GUI

Effectuez quelques requêtes simples en utilisant les tables précédemment créées. Tout d'abord, ouvrez la console àhttps://console.aws.amazon.com/dynamodb

Choisir Tables dans le volet de navigation et sélectionnez Replydans la liste des tableaux. Sélectionnez ensuite leItems onglet pour voir les données chargées.

Sélectionnez le lien de filtrage des données ("Scan: [Table] Reply") sous le Create Item bouton.

Dans l'écran de filtrage, sélectionnez Requête pour l'opération. Entrez la valeur de clé de partition appropriée et cliquez surStart.

le Reply table renvoie ensuite les éléments correspondants.

Table de requête à l'aide de Java

Utilisez la méthode de requête en Java pour effectuer des opérations de récupération de données. Il faut spécifier la valeur de la clé de partition, la clé de tri étant facultative.

Codez une requête Java en créant d'abord un querySpec objectdécrivant les paramètres. Passez ensuite l'objet à la méthode de requête. Nous utilisons la clé de partition des exemples précédents.

Vous pouvez consulter l'exemple suivant -

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

Notez que la requête utilise la clé de partition, cependant, les index secondaires fournissent une autre option pour les requêtes. Leur flexibilité permet d'interroger des attributs non clés, un sujet qui sera abordé plus loin dans ce tutoriel.

La méthode d'analyse prend également en charge les opérations de récupération en rassemblant toutes les données de la table. leoptional .withFilterExpression empêche les éléments en dehors des critères spécifiés d'apparaître dans les résultats.

Plus tard dans ce tutoriel, nous discuterons scanningen détail. Maintenant, jetez un œil à l'exemple suivant -

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