Interrogation de données dans DynamoDB - Amazon DynamoDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Interrogation de données dans DynamoDB

Les exemples suivants présentent différentes façons d'utiliser HiveQL pour interroger des données stockées dans DynamoDB.

Ces exemples font référence à la table ddb_features dans le didacticiel (Étape 5 : copier des données dans DynamoDB).

Utilisation de fonctions d'agrégation

HiveQL fournit des fonctions intégrées pour la synthèse des valeurs de données. Vous pouvez par exemple utiliser la fonction MAX pour rechercher la plus grande valeur dans une colonne sélectionnée. L'exemple suivant renvoie l'altitude de la particularité la plus élevée dans l'État du Colorado.

SELECT MAX(elev_in_ft) FROM ddb_features WHERE state_alpha = 'CO';

Utilisation des clauses GROUP BY et HAVING

Vous pouvez utiliser la clause GROUP BY pour collecter les données de plusieurs enregistrements. Elle est souvent utilisé avec une fonction d'agrégation telle que SUM, COUNT, MIN ou MAX. Vous pouvez également utiliser la clause HAVING pour écarter tous les résultats ne répondant pas à certains critères.

L'exemple suivant renvoie la liste des altitudes les plus élevées des États qui comptent plus de cinq particularités dans la table ddb_features.

SELECT state_alpha, max(elev_in_ft) FROM ddb_features GROUP BY state_alpha HAVING count(*) >= 5;

Jointure de deux tables DynamoDB

L'exemple suivant mappe une autre table Hive (east_coast_states) à une table dans DynamoDB. L'instruction SELECT opère une jointure entre ces deux tables. La jointure est calculée sur le cluster, puis renvoyée. La jointure n'a pas lieu dans DynamoDB.

Prenons l'exemple d'une table DynamoDB EastCoastStates nommée contenant les données suivantes :

StateName StateAbbrev Maine ME New Hampshire NH Massachusetts MA Rhode Island RI Connecticut CT New York NY New Jersey NJ Delaware DE Maryland MD Virginia VA North Carolina NC South Carolina SC Georgia GA Florida FL

Supposons que la table est disponible en tant que table externe Hive nommée east_coast_states :

CREATE EXTERNAL TABLE ddb_east_coast_states (state_name STRING, state_alpha STRING) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "EastCoastStates", "dynamodb.column.mapping" = "state_name:StateName,state_alpha:StateAbbrev");

La jointure suivante renvoie les États de la côte Est des États-Unis qui possèdent au moins trois particularités :

SELECT ecs.state_name, f.feature_class, COUNT(*) FROM ddb_east_coast_states ecs JOIN ddb_features f on ecs.state_alpha = f.state_alpha GROUP BY ecs.state_name, f.feature_class HAVING COUNT(*) >= 3;

Jointure de tables de sources différentes

Dans l'exemple suivant, s3_east_coast_states est une table Hive associée à un fichier CSV stocké dans Amazon S3. La table ddb_features est associée à des données dans DynamoDB. L'exemple suivant joint ces deux tables pour renvoyer les particularités géographiques des États dont le nom commence par « New ».

create external table s3_east_coast_states (state_name STRING, state_alpha STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://bucketname/path/subpath/';
SELECT ecs.state_name, f.feature_name, f.feature_class FROM s3_east_coast_states ecs JOIN ddb_features f ON ecs.state_alpha = f.state_alpha WHERE ecs.state_name LIKE 'New%';