

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Esecuzioni di query sui dati in DynamoDB
<a name="EMRforDynamoDB.Querying"></a>

Negli esempi seguenti vengono illustrati i diversi modi in cui puoi utilizzare HiveQL per eseguire query sui dati archiviati in DynamoDB.

Questi esempi si riferiscono alla tabella *ddb\_features* del tutorial ([Fase 5: copia dei dati in DynamoDB](EMRforDynamoDB.Tutorial.CopyDataToDDB.md)).

**Topics**
+ [Uso delle funzioni di aggregazione](#EMRforDynamoDB.Querying.AggregateFunctions)
+ [Uso delle clausole GROUP BY e HAVING](#EMRforDynamoDB.Querying.GroupByAndHaving)
+ [Unione di due tabelle DynamoDB](#EMRforDynamoDB.Querying.JoiningTwoTables)
+ [Unione di tabelle da origini diverse](#EMRforDynamoDB.Querying.JoiningTablesFromDifferentSources)

## Uso delle funzioni di aggregazione
<a name="EMRforDynamoDB.Querying.AggregateFunctions"></a>

HiveQL fornisce funzioni integrate per il riepilogo dei valori dei dati. Ad esempio, è possibile utilizzare la funzione `MAX` per trovare il valore più grande per una colonna selezionata. Nell'esempio seguente viene restituita l'elevazione della caratteristica più alta nello stato del Colorado.

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

## Uso delle clausole GROUP BY e HAVING
<a name="EMRforDynamoDB.Querying.GroupByAndHaving"></a>

Puoi utilizzare la clausola `GROUP BY` per raccogliere dati all'interno di più record. Questa clausola viene spesso utilizzata con una funzione di aggregazione come `SUM`, `COUNT`, `MIN` o `MAX`. È possibile utilizzare la clausola `HAVING` anche per eliminare tutti i risultati che non soddisfano determinati criteri.

L'esempio seguente restituisce un elenco delle elevazioni più alte dagli stati che hanno più di cinque caratteristiche nella tabella *ddb\_features*.

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

## Unione di due tabelle DynamoDB
<a name="EMRforDynamoDB.Querying.JoiningTwoTables"></a>

L'esempio seguente mappa un'altra tabella Hive (*east\_coast\_states*) a una tabella in DynamoDB. L'istruzione `SELECT` è un join tra queste due tabelle. Il join viene calcolato nel cluster e in seguito viene restituito. L'unione non si svolge in DynamoDB. 

Consideriamo una tabella DynamoDB EastCoastStates denominata che contiene i seguenti dati:

```
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
```

Supponiamo che la tabella sia disponibile come tabella esterna Hive denominata east\_coast\_states:

```
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");
```

Il join seguente restituisce gli stati sulla costa orientale degli Stati Uniti che hanno almeno tre caratteristiche:

```
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;
```

## Unione di tabelle da origini diverse
<a name="EMRforDynamoDB.Querying.JoiningTablesFromDifferentSources"></a>

In questo esempio, s3\_east\_coast\_states è una tabella Hive associata a un file CSV archiviato in Amazon S3. La tabella *ddb\_features* è associata ai dati in DynamoDB. Nell'esempio seguente vengono unite queste due tabelle, restituendo le caratteristiche geografiche dagli stati i cui nomi iniziano con "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%';
```