

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à.

# Accedi, esegui query e unisciti a tabelle Amazon DynamoDB utilizzando Athena
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena"></a>

*Moinul Al-Mamun, Amazon Web Services*

## Riepilogo
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-summary"></a>

Questo modello mostra come configurare una connessione tra Amazon Athena e Amazon DynamoDB utilizzando il connettore Amazon Athena DynamoDB. Il connettore utilizza una funzione AWS Lambda per interrogare i dati in DynamoDB. Non è necessario scrivere alcun codice per configurare la connessione. Una volta stabilita la connessione, è possibile accedere e analizzare rapidamente le tabelle DynamoDB utilizzando [Athena Federated Query per eseguire comandi SQL da Athena](https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-source.html). Puoi anche unire una o più tabelle DynamoDB tra loro o con altre fonti di dati, come Amazon Redshift o Amazon Aurora.

## Prerequisiti e limitazioni
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo con autorizzazioni per gestire tabelle DynamoDB, sorgenti di dati Athena, Lambda e ruoli AWS Identity and Access Management (IAM)
+ Un bucket Amazon Simple Storage Service (Amazon S3) in cui Athena può archiviare i risultati delle query
+ Un bucket S3 in cui il connettore Athena DynamoDB può salvare i dati a breve termine
+ Una regione AWS che supporta la versione [2 del motore Athena](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference-0002.html)
+ Autorizzazioni IAM per accedere ad Athena e ai bucket S3 richiesti
+ [Connettore Amazon Athena DynamoDB](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb), installato

**Limitazioni**

L'interrogazione delle tabelle DynamoDB comporta un costo. Le dimensioni delle tabelle che superano alcuni gigabyte (GBs) possono comportare costi elevati. Si consiglia di considerare i costi prima di eseguire qualsiasi operazione SCAN completa della tabella. Per ulteriori informazioni, consulta [Prezzi di Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/). Per ridurre i costi e ottenere prestazioni elevate, si consiglia di utilizzare sempre LIMIT nella query (ad esempio,`SELECT * FROM table1 LIMIT 10`). Inoltre, prima di eseguire una query JOIN o GROUP BY in un ambiente di produzione, considerate le dimensioni delle tabelle. Se le tue tabelle sono troppo grandi, prendi in considerazione opzioni alternative come [la migrazione della tabella su Amazon](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/) S3.

## Architecture
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-architecture"></a>

Il diagramma seguente mostra come un utente può eseguire una query SQL su una tabella DynamoDB da Athena.

![Flusso di lavoro per connettere Athena e DynamoDB per eseguire una query SQL.](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/e6ff94af-d208-40c7-94e4-af257755a603/images/bc8e0132-b578-463b-bf55-3c39ce359c17.png)


Il diagramma mostra il flusso di lavoro seguente:

1. Per interrogare una tabella DynamoDB, un utente esegue una query SQL da Athena.

1. Athena avvia una funzione Lambda.

1. La funzione Lambda interroga i dati richiesti nella tabella DynamoDB.

1. DynamoDB restituisce i dati richiesti alla funzione Lambda. Quindi, la funzione trasferisce i risultati della query all'utente tramite Athena.

1. La funzione Lambda memorizza i dati nel bucket S3.

**Stack tecnologico**
+ Amazon Athena
+ Amazon DynamoDB
+ Simple Storage Service (Amazon S3)
+ AWS Lambda

## Tools (Strumenti)
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-tools"></a>
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) è un servizio di query interattivo che ti aiuta ad analizzare i dati direttamente in Amazon S3 utilizzando SQL standard.
+ [Amazon Athena DynamoDB Connector](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb) è uno strumento AWS che consente ad Athena di connettersi a DynamoDB e accedere alle tabelle utilizzando query SQL.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) è un servizio di database NoSQL interamente gestito che offre prestazioni elevate, prevedibili e scalabili.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) è un servizio di elaborazione che ti aiuta a eseguire codice senza dover fornire o gestire server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di calcolo che utilizzi.

## Epiche
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-epics"></a>

### Creare tabelle DynamoDB di esempio
<a name="create-sample-dynamodb-tables"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea la prima tabella di esempio.  | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Inserisci dati di esempio nella prima tabella. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>{<br />  "PK1": "1234",<br />  "SK1": "info",<br />  "Salary": "5000"<br /> }</pre><pre>{<br />  "PK1": "1235",<br />  "SK1": "info",<br />  "Salary": "5200"<br /> }</pre> | Developer | 
| Create la seconda tabella di esempio.  | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Inserisci dati di esempio nella seconda tabella. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>{<br />  "PK2": "1234",<br /> "SK2": "bonus",<br /> "Bonus": "500"<br />}</pre><pre>{<br />  "PK2": "1235",<br /> "SK2": "bonus",<br /> "Bonus": "1000"<br />}</pre> | Developer | 

### Creare un'origine dati in Athena per DynamoDB
<a name="create-a-data-source-in-athena-for-dynamodb"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Configura il connettore di origine dati. | Crea un'origine dati per DynamoDB, quindi crea una funzione Lambda per connetterti a quell'origine dati.[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Verifica che la funzione Lambda possa accedere allo spill bucket S3. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)Se riscontri errori, consulta la sezione *Informazioni aggiuntive* di questo schema come guida. | Developer | 

### Accedi alle tabelle DynamoDB da Athena
<a name="access-dynamodb-tables-from-athena"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Interroga le tabelle DynamoDB. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Unisci le due tabelle DynamoDB. | DynamoDB è un data store NoSQL e non supporta l'operazione di join SQL. Di conseguenza, è necessario eseguire un'operazione di join su due tabelle DynamoDB:[See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>SELECT pk1, salary, bonus FROM dydbtable1 t1<br /> JOIN dydbtable2 t2 ON t1.pk1 = t2.pk2;</pre> | Developer | 

## Risorse correlate
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-resources"></a>
+ [Connettore Amazon Athena DynamoDB (](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb)AWS Labs)
+ [Interroga qualsiasi fonte di dati con la nuova query federata di Amazon Athena](https://aws.amazon.com/blogs/big-data/query-any-data-source-with-amazon-athenas-new-federated-query/) (AWS Big Data Blog)
+ [Riferimento alla versione del motore Athena](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference.html) (Athena User Guide)
+ [Semplifica l'estrazione e l'analisi dei dati di Amazon DynamoDB utilizzando AWS Glue e Amazon Athena (AWS](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/) Database Blog)

## Informazioni aggiuntive
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-additional"></a>

Se esegui una query in Athena con `spill_bucket` il `{bucket_name}/folder_name/` formato, puoi ricevere il seguente messaggio di errore:

```
"GENERIC_USER_ERROR: Encountered an exception[java.lang.RuntimeException] from your LambdaFunction[arn:aws:lambda:us-east-1:xxxxxx:function:testdynamodb] executed in context[retrieving meta-data] with message[You do NOT own the spill bucket with the name: s3://amzn-s3-demo-bucket/athena_dynamodb_spill_data/]
This query ran against the "default" database, unless qualified by the query. Please post the error message on our forum  or contact customer support with Query Id: [query-id]"
```

Per risolvere questo errore, aggiorna la variabile di ambiente della funzione Lambda `spill_bucket` a`{bucket_name_only}`, quindi aggiorna la seguente policy Lambda IAM per l'accesso in scrittura ai bucket:

```
{
             "Action": [
                 "s3:GetObject",
                 "s3:ListBucket",
                 "s3:GetBucketLocation",
                 "s3:GetObjectVersion",
                 "s3:PutObject",
                 "s3:PutObjectAcl",
                 "s3:GetLifecycleConfiguration",
                 "s3:PutLifecycleConfiguration",
                 "s3:DeleteObject"
            ],
             "Resource": [
                 "arn:aws:s3:::spill_bucket",
                 "arn:aws:s3:::spill_bucket/*"
            ],
             "Effect": "Allow"
        }
```

In alternativa, puoi rimuovere il connettore sorgente dati Athena creato in precedenza e ricrearlo utilizzando only for. `{bucket_name}` `spill_bucket`