Accedi, esegui query e unisciti a tabelle Amazon DynamoDB utilizzando Athena - Prontuario AWS

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

Creato da Moinul Al-Mamun () AWS

Ambiente: produzione

Tecnologie: analisi; database; senza server

AWSservizi: Amazon Athena; Amazon DynamoDB; Lambda; Amazon S3 AWS

Riepilogo

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 da Athena. SQL 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

Prerequisiti

  • Un AWS account attivo con autorizzazioni per gestire tabelle DynamoDB, origini dati Athena, Lambda e ruoli Identity AWS 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 AWS regione che supporta la versione 2 del motore Athena

  • IAMautorizzazioni per accedere ad Athena e ai bucket S3 richiesti

  • Connettore Amazon 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 sull'intera tabella. SCAN Per ulteriori informazioni, consulta Prezzi di Amazon DynamoDB. Per ridurre i costi e ottenere prestazioni elevate, si consiglia di utilizzare sempre LIMIT nelle 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 S3.

Architettura

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

Flusso di lavoro per connettere Athena e DynamoDB per eseguire una query. SQL

Il diagramma mostra il flusso di lavoro seguente:

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

  2. Athena avvia una funzione Lambda.

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

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

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

Stack tecnologico

  • Amazon Athena

  • Amazon DynamoDB

  • Amazon S3

  • AWSLambda

Strumenti

  • Amazon Athena è un servizio di query interattivo che ti aiuta ad analizzare i dati direttamente in Amazon S3 utilizzando standard. SQL

  • Amazon Athena DynamoDB Connector è uno strumento AWS che consente ad Athena di connettersi a DynamoDB e accedere alle tabelle tramite query. SQL

  • Amazon DynamoDB è un servizio di database SQL No completamente gestito che offre prestazioni veloci, prevedibili e scalabili.

  • AWSLambda è un servizio di elaborazione che ti aiuta a eseguire il codice senza dover effettuare il provisioning o gestire i server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.

Epiche

AttivitàDescrizioneCompetenze richieste

Crea la prima tabella di esempio.

  1. Accedi alla console di AWS gestione e apri la console DynamoDB.

  2. Scegliere Create table (Crea tabella).

  3. Per il nome della tabella, inserisci dydbtable1.

  4. Per la chiave di partizione, immettere. PK1

  5. Per la chiave di ordinamento, immettere SK1.

  6. Nella sezione Impostazioni tabella, scegli Personalizza impostazioni.

  7. Nella sezione Table class, scegli DynamoDB Standard.

  8. Nella sezione Impostazioni della capacità di lettura/scrittura, per la modalità Capacità, scegli On-demand.

  9. Nella sezione Encryption at rest, scegli Owned by Amazon DynamoDB.

  10. Scegliere Create table (Crea tabella).

Developer

Inserisci dati di esempio nella prima tabella.

  1. Aprire la console DynamoDB.

  2. Nel riquadro di navigazione, scegli Tabella, quindi scegli la tua tabella nella colonna Nome.

  3. Scegli Azioni, quindi scegli Crea elemento.

  4. Scegli la JSONvisualizzazione.

  5. Nella barra del titolo dell'editor Attributi, disattiva View DynamoDB JSON.

  6. Nell'editor Attributi, inserisci i seguenti dati di esempio uno per uno:

{ "PK1": "1234", "SK1": "info", "Salary": "5000" }
{ "PK1": "1235", "SK1": "info", "Salary": "5200" }
Developer

Create la seconda tabella di esempio.

  1. Aprire la console DynamoDB.

  2. Scegliere Create table (Crea tabella).

  3. Per Nome tabella, immettete dydbtable2.

  4. In Partition key (Chiave di partizione), inserisci PK2.

  5. Per il tasto Sort, immettere. SK2

  6. Nella sezione Impostazioni tabella, scegli Personalizza impostazioni.

  7. Nella sezione Table class, scegli DynamoDB Standard.

  8. Nella sezione Impostazioni della capacità di lettura/scrittura, per la modalità Capacità, scegli On-demand.

  9. Nella sezione Encryption at rest, scegli Owned by Amazon DynamoDB.

  10. Scegliere Create table (Crea tabella).

Developer

Inserisci dati di esempio nella seconda tabella.

  1. Aprire la console DynamoDB.

  2. Nel riquadro di navigazione, scegli Tabella, quindi scegli la tua tabella nella colonna Nome.

  3. Scegli Azioni, quindi scegli Crea elemento.

  4. Nella barra del titolo dell'editor Attributi, disattiva View DynamoDB JSON.

  5. Nell'editor Attributi, inserisci i seguenti dati di esempio uno per uno:

{ "PK2": "1234", "SK2": "bonus", "Bonus": "500" }
{ "PK2": "1235", "SK2": "bonus", "Bonus": "1000" }
Developer
AttivitàDescrizioneCompetenze richieste

Configura il connettore di origine dati.

Crea un'origine dati per DynamoDB, quindi crea una funzione Lambda per connetterti a quell'origine dati.

  1. Accedi alla console di AWS gestione e apri la console Athena.

  2. Nel riquadro di navigazione, scegli Origini dati, quindi scegli Crea origine dati.

  3. Scegli l'origine dati Amazon DynamoDB, quindi scegli Avanti.

  4. Nella sezione Dettagli dell'origine dati, per Nome dell'origine dati, inserisci testDynamo DB.

  5. Nella sezione Dettagli di connessione, seleziona una funzione Lambda già distribuita o scegli Crea funzione Lambda se non disponi di una funzione Lambda da utilizzare per questo modello. Nota: per ulteriori informazioni sulla creazione di una funzione Lambda, consulta Guida introduttiva a Lambda nella Lambda Developer Guide.

  6. (Facoltativo) Se scegli la funzione Crea Lambda, devi configurare il AWS CloudFormation modello incluso dall'applicazione Java prima di distribuire quello stack. Il modello include ApplicationName, SpillBucket AthenaCatalogName, e altre impostazioni dell'applicazione. Nota: dopo aver distribuito questa applicazione basata su Java, lo stack crea una funzione Lambda che consente ad Athena di comunicare con DynamoDB. In questo modo le tabelle sono accessibili tramite comandi. SQL

  7. Implementa la tua funzione Lambda.

  8. Scegli Next (Successivo).

Developer

Verifica che la funzione Lambda possa accedere allo spill bucket S3.

  1. Aprire la console Lambda.

  2. Nel riquadro di navigazione, scegli Funzioni, quindi scegli la funzione che hai creato in precedenza.

  3. Scegli la scheda Configurazione.

  4. Nel riquadro di sinistra, scegli Variabili di ambiente, quindi conferma che il valore della chiave èspill_bucket.

  5. Nel riquadro di sinistra, scegli Autorizzazioni, quindi nella sezione Ruolo di esecuzione, scegli il IAM ruolo associato. Nota: verrai indirizzato al IAM ruolo associato alla tua funzione Lambda nella IAM console.

  6. Conferma di avere l'autorizzazione di scrittura su spill_bucket bucket.

Se riscontri errori, consulta la sezione Informazioni aggiuntive di questo schema come guida.

Developer
AttivitàDescrizioneCompetenze richieste

Interroga le tabelle DynamoDB.

  1. Accedi alla console di AWS gestione e apri la console Athena.

  2. Nel riquadro di navigazione, scegli Origini dati, quindi scegli Crea origine dati.

  3. Nel riquadro di navigazione, scegli Query Editor (Editor della query).

  4. Nella scheda Editor, nella sezione Dati, per Origine dati, scegli la tua fonte di dati per Origine dati.

  5. Per Database, scegli il database.

  6. Per Query 1, inserisci la seguente query: SELECT * FROM dydbtable1 t1;

  7. Scegliete Esegui, quindi verificate l'output nella tabella.

  8. Per Query 2, inserisci la seguente interrogazione: SELECT * FROM dydbtable2 t2;

  9. Scegliete Esegui, quindi verificate l'output nella tabella.

Developer

Unisci le due tabelle DynamoDB.

DynamoDB non è un archivio dati e SQL non supporta SQL l'operazione di join. Di conseguenza, è necessario eseguire un'operazione di join su due tabelle DynamoDB:

  1. Scegliete l'icona con il segno più per creare un'altra query.

  2. Per Query 3, inserisci la seguente query:

SELECT pk1, salary, bonus FROM dydbtable1 t1 JOIN dydbtable2 t2 ON t1.pk1 = t2.pk2;
Developer

Risorse correlate

Informazioni aggiuntive

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 IAM politica Lambda per l'accesso alla scrittura nel 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 di origine dati Athena creato in precedenza e ricrearlo utilizzando only for. {bucket_name} spill_bucket