

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
<a name="EMRforDynamoDB.Querying"></a>

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\$1features* dans le didacticiel ([Étape 5 : copier des données dans DynamoDB](EMRforDynamoDB.Tutorial.CopyDataToDDB.md)).

**Topics**
+ [Utilisation de fonctions d’agrégation](#EMRforDynamoDB.Querying.AggregateFunctions)
+ [Utilisation des clauses GROUP BY et HAVING](#EMRforDynamoDB.Querying.GroupByAndHaving)
+ [Jointure de deux tables DynamoDB](#EMRforDynamoDB.Querying.JoiningTwoTables)
+ [Jointure de tables de sources différentes](#EMRforDynamoDB.Querying.JoiningTablesFromDifferentSources)

## Utilisation de fonctions d’agrégation
<a name="EMRforDynamoDB.Querying.AggregateFunctions"></a>

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
<a name="EMRforDynamoDB.Querying.GroupByAndHaving"></a>

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\$1features*.

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

## Jointure de deux tables DynamoDB
<a name="EMRforDynamoDB.Querying.JoiningTwoTables"></a>

L’exemple suivant mappe une autre table Hive (*east\$1coast\$1states*) à 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\$1coast\$1states :

```
1. CREATE EXTERNAL TABLE ddb_east_coast_states (state_name STRING, state_alpha STRING)
2. STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
3. TBLPROPERTIES ("dynamodb.table.name" = "EastCoastStates",
4. "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
<a name="EMRforDynamoDB.Querying.JoiningTablesFromDifferentSources"></a>

Dans l’exemple suivant, s3\$1east\$1coast\$1states est une table Hive associée à un fichier CSV stocké dans Amazon S3. La table *ddb\$1features* 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 ».

```
1. create external table s3_east_coast_states (state_name STRING, state_alpha STRING)
2. ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
3. 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%';
```