Connettore Amazon Athena DynamoDB
Il connettore Amazon Athena DynamoDB consente ad Amazon Athena di comunicare con DynamoDB in modo da poter eseguire query sulle tabelle con SQL. Operazioni di scrittura come INSERT INTO non sono supportate.
Questo connettore può essere registrato con il Catalogo Dati Glue Data come catalogo federato. Supporta i controlli di accesso ai dati definiti in Lake Formation a livello di catalogo, database, tabella, colonna, riga e tag. Questo connettore utilizza Glue Connections per centralizzare le proprietà di configurazione in Glue.
Se hai abilitato Lake Formation nel tuo account, il ruolo IAM per il connettore Lambda federato Athena che hai implementato nel file AWS Serverless Application Repository deve avere accesso in lettura in Lake Formation per il AWS Glue Data Catalog.
Prerequisiti
Implementa il connettore sul tuo Account AWS utilizzando la console Athena o AWS Serverless Application Repository. Per ulteriori informazioni, consulta Crea una connessione di un'origine dati o Utilizzare AWS Serverless Application Repository per distribuire un connettore origine dati.
Limitazioni
Se migri le tue connessioni DynamoDB a Catalogo Glue e Lake Formation, verranno riconosciuti solo i nomi minuscoli di tabelle e colonne.
Parametri
Utilizzare i parametri illustrati in questa sezione per configurare il connettore DynamoDB.
Si consiglia di configurare un connettore DynamoDB utilizzando un oggetto di connessioni Glue. Per fare ciò, imposta la variabile di ambiente glue_connection del connettore DynamoDB Lambda sul nome della connessione Glue da utilizzare.
Proprietà delle connessioni Glue
Utilizzare il seguente comando per ottenere lo schema per un oggetto di connessione Glue. Questo schema contiene tutti i parametri che possono essere utilizzati per controllare la connessione.
aws glue describe-connection-type --connection-type DYNAMODB
Proprietà dell'ambiente Lambda
glue_connection: specifica il nome della connessione Glue associata al connettore federato.
Nota
-
Tutti i connettori che utilizzano le connessioni Glue devono utilizzare Gestione dei segreti AWS per memorizzare le credenziali.
-
Il connettore DynamoDB creato utilizzando le connessioni Glue non supporta l'uso di un gestore multiplexing.
-
Il connettore DynamoDB creato utilizzando le connessioni Glue supporta solo 2m
ConnectionSchemaVersion.
Nota
I connettori di origine dati Athena creati il 3 dicembre 2024 e versioni successive utilizzano connessioni AWS Glue.
I nomi e le definizioni dei parametri elencati di seguito si riferiscono ai connettori di origine dati Athena creati senza una connessione Glue associata. Utilizza i seguenti parametri solo quando distribuisci manualmente una versione precedente di un connettore di origine dati Athena o quando la proprietà dell'ambiente glue_connection non è specificata.
Proprietà dell'ambiente Lambda
-
spill_bucket: specifica il bucket Amazon S3 per i dati che superano i limiti della funzione Lambda.
-
spill_prefix: (facoltativo) per impostazione predefinita, viene utilizzata una sottocartella nello
spill_bucketspecificato chiamataathena-federation-spill. Ti consigliamo di configurare un ciclo di vita dell'archiviazione di Amazon S3 in questa posizione per eliminare gli spill più vecchi di un numero predeterminato di giorni o ore. -
spill_put_request_headers: (facoltativo) una mappa codificata in JSON delle intestazioni e dei valori della richiesta per la richiesta
putObjectdi Amazon S3 utilizzata per lo spill (ad esempio,{"x-amz-server-side-encryption" : "AES256"}). Per altre possibili intestazioni, consulta l'argomento relativo a PutObject nella Documentazione di riferimento dell'API di Amazon Simple Storage Service. -
kms_key_id: (facoltativo) per impostazione predefinita, tutti i dati riversati in Amazon S3 vengono crittografati utilizzando la modalità di crittografia autenticata AES-GCM e una chiave generata casualmente. Per fare in modo che la tua funzione Lambda utilizzi chiavi di crittografia più potenti generate da KMS come
a7e63k4b-8loc-40db-a2a1-4d0en2cd8331, puoi specificare l'ID della chiave KMS. -
disable_spill_encryption: (facoltativo) se impostato su
True, disabilita la crittografia dello spill. L'impostazione predefinita èFalse: in questo modo, i dati riversati su S3 vengono crittografati utilizzando AES-GCM tramite una chiave generata casualmente o una chiave generata mediante KMS. La disabilitazione della crittografia dello spill può migliorare le prestazioni, soprattutto se la posizione dello spill utilizza la crittografia lato server. -
disable_glue: (facoltativo) se presente e impostato su true, il connettore non tenta di recuperare metadati supplementari da AWS Glue.
-
glue_catalog: (facoltativo) utilizza questa opzione per specificare un catalogo AWS Glue multi-account. Per impostazione predefinita, il connettore tenta di ottenere i metadati dal proprio account AWS Glue.
-
disable_projection_and_casing: (facoltativo) disabilita la proiezione e la formattazione delle maiuscole. Puoi utilizzarlo se desideri interrogare le tabelle DynamoDB che contengono lettere maiuscole e minuscole nei nomi delle colonne e non desideri specificare una proprietà
columnMappingnella tua tabella AWS Glue.Il parametro
disable_projection_and_casingutilizza i seguenti valori per specificare il comportamento di formattazione di maiuscole e minuscole e della mappatura delle colonne:-
auto: disabilita la proiezione e la formattazione di maiuscole e minuscole quando viene rilevato un tipo precedentemente non supportato e la mappatura dei nomi delle colonne non è impostata sulla tabella. Questa è l'impostazione predefinita.
-
always: disabilita la proiezione e la formattazione di maiuscole e minuscole in modo incondizionato. È utile quando i nomi delle colonne DynamoDB contengono lettere maiuscole e minuscole ma non desideri specificare alcuna mappatura dei nomi delle colonne.
Quando utilizzi il parametro
disable_projection_and_casing, tieni presente i seguenti punti:-
L'utilizzo del parametro può comportare un consumo maggiore di larghezza di banda. Inoltre, se la funzione Lambda non si trova nella stessa Regione AWS dell'origine dati, i costi di trasferimento standard tra Regioni AWS saranno più elevati a causa del maggiore utilizzo della larghezza di banda. Per ulteriori informazioni sui costi di trasferimento tra regioni, consulta Costi di trasferimento di dati AWS per architetture server e serverless
nel blog della rete dei partner AWS. -
Dato che viene trasferito un numero maggiore di byte e poiché un numero maggiore di byte richiede un tempo di deserializzazione maggiore, la latenza complessiva può aumentare.
-
Configurazione di database e tabelle in AWS Glue
Poiché la capacità integrata di inferenza dello schema del connettore è limitata, potresti voler utilizzare AWS Glue per i metadati. Per eseguire questa operazione, devi disporre di un database e una tabella in AWS Glue. Per abilitarli all'uso con DynamoDB, è necessario modificarne le proprietà.
Modifica delle proprietà del database nella console AWS Glue
Accedere alla Console di gestione AWS, quindi aprire la console AWS Glue all'indirizzo https://console.aws.amazon.com/glue/
. -
Nel riquadro di navigazione, espandi Data Catalog (Catalogo dati), quindi seleziona Databases (Database).
Nella pagina Databases (Database), puoi modificare un database esistente oppure scegliere Add database (Aggiungi database) per crearne uno.
-
Nell'elenco dei database, scegli il link del database da modificare.
-
Scegli Modifica.
-
Nella pagina Update a database (Aggiorna un database), alla voce Database settings (Impostazioni database, in Location (Posizione), aggiungi la stringa
dynamo-db-flag. Questa parola chiave indica che il database contiene tabelle utilizzate dal connettore DynamoDB per Athena utilizza per i metadati aggiuntivi ed è richiesto per i database AWS Glue diversi dadefault. La proprietàdynamo-db-flagè utile per filtrare i database negli account che hanno numerosi database. -
Scegli Update Database (Aggiorna database).
Per modificare le proprietà della tabella nella console AWS Glue
Accedere alla Console di gestione AWS, quindi aprire la console AWS Glue all'indirizzo https://console.aws.amazon.com/glue/
. -
Nel riquadro di navigazione, espandi Data Catalog (Catalogo dati), quindi seleziona Tables (Tabelle).
-
Nella pagine Tables (Tabelle), nell'elenco delle tabelle, seleziona il link della tabella che intendi modificare.
-
Scegli Actions (Operazioni), Edit (Modifica).
-
Nella pagina Edit table (Modifica tabella), nella sezione Table properties (Proprietà della tabella), aggiungi le seguenti proprietà della tabella in base alle necessità. Se utilizzi il crawler AWS Glue DynamoDB, queste proprietà vengono impostate automaticamente.
-
DynamoDB: stringa che indica al connettore DynamoDB per Athena che la tabella può essere utilizzata per metadati supplementari. Inserisci la stringa
dynamodbnelle proprietà della tabella in un campo denominato classification (classificazione), con una corrispondenza esatta.Nota
La pagina Imposta le proprietà della tabella che fa parte del processo di creazione della tabella nella console AWS Glue contiene una sezione Formato dati con un campo Classificazione. Qui non puoi immettere o scegliere
dynamodb. Invece, dopo aver creato la tabella, completa le operazioni per modificare la tabella e inserireclassificationedynamodbcome coppia chiave-valore nella sezione Proprietà della tabella. -
sourceTable: proprietà facoltativa della tabella che definisce il nome della tabella di origine in DynamoDB. Utilizza questo valore se le regole di denominazione della tabella AWS Glue non consentono di creare una tabella AWS Glue che abbia lo stesso nome della tua tabella DynamoDB. Ad esempio, le lettere maiuscole non sono consentite nei nomi delle tabelle AWS Glue, ma sono permesse nei nomi delle tabelle DynamoDB.
-
columnMapping: proprietà facoltativa della tabella che definisce le mappature dei nomi delle colonne. Utilizza questo valore se le regole di denominazione delle colonne AWS Glue non consentono di creare una tabella AWS Glue che abbia gli stessi nomi delle colonne della tua tabella DynamoDB. Ad esempio, le lettere maiuscole non sono consentite nei nomi delle colonne AWS Glue, ma sono permesse nei nomi delle colonne DynamoDB. Il valore della proprietà dovrebbe essere nel formato col1=Col1,col2=Col2. Il mapping di colonne si applica solo ai nomi delle colonne di primo livello e non ai campi nidificati.
-
defaultTimeZone: proprietà facoltativa della tabella applicata ai valori
dateodatetimeche non hanno un fuso orario esplicito. L'impostazione di questo valore è una buona pratica per evitare discrepanze tra il fuso orario predefinito dell'origine dei dati e il fuso orario della sessione Athena. -
datetimeFormatMapping: proprietà facoltativa della tabella che specifica il formato
dateodatetimeda utilizzare per l'analisi dei dati da una colonna del tipo di dati AWS Gluedateotimestamp. Se questa proprietà non viene specificata, il connettore tenta di dedurreun formato ISO-8601. Se il connettore non è in grado di dedurre il formato di dateodatetimeoppure di analizzare la stringa non elaborata, il valore viene omesso dal risultato.Il valore
datetimeFormatMappingdeve essere nel formatocol1=someformat1,col2=someformat2. Di seguito sono riportati alcuni formati di esempio:yyyyMMdd'T'HHmmss ddMMyyyy'T'HH:mm:ssSe la tua colonna ha valori
dateodatetimesenza fuso orario e desideri utilizzare la colonna nella clausolaWHERE, imposta la proprietàdatetimeFormatMappingper la colonna.
-
-
Se definisci le colonne in modalità manuale, assicurati di utilizzare i tipi di dati appropriati. Se hai usato un crawler, convalida le colonne e i tipi rilevati dal crawler.
-
Selezionare Salva.
Autorizzazioni richieste
Consulta la sezione Policies del file athena-dynamodb.yaml
-
Accesso in scrittura ad Amazon S3: per trasferire i risultati di query di grandi dimensioni, il connettore richiede l'accesso in scrittura a una posizione in Amazon S3.
-
Athena GetQueryExecution: il connettore utilizza questa autorizzazione per interrompersi rapidamente con esito negativo quando la query a monte di Athena è terminata.
-
AWS Glue Data Catalog: il connettore DynamoDB richiede l'accesso in sola lettura a AWS Glue Data Catalog per ottenere informazioni sullo schema.
-
CloudWatch Logs: il connettore richiede l'accesso a CloudWatch Logs per l'archiviazione dei registri.
-
Accesso in lettura a DynamoDB: il connettore utilizza le operazioni API
DescribeTable,ListSchemas,ListTables,QueryeScan.
Prestazioni
Il connettore DynamoDB per Athena supporta le scansioni in parallelo e tenta di eseguire il pushdown dei predicati come parte delle query DynamoDB. Un predicato hash key con valori X distinti genera X chiamate di query a DynamoDB. Tutti gli altri scenari di predicato danno come risultato un numero Y di chiamate di scansione, dove Y viene determinato euristicamente in base alla dimensione della tabella e alla velocità di trasmissione effettiva allocata. Tuttavia, la selezione di un sottoinsieme di colonne comporta un runtime di esecuzione delle query più lungo.
Viene eseguito il pushdown delle clausole LIMIT e dei predicati semplici, il che può ridurre la quantità di dati scansionati e, di conseguenza, il runtime di esecuzione delle query.
Clausole LIMIT
Una dichiarazione LIMIT N riduce la quantità di dati analizzati dalla query. Con il pushdown LIMIT N, il connettore restituisce solo le righe N ad Athena.
Predicati
Un predicato è un'espressione nella clausola WHERE di una query SQL che valuta a un valore booleano e filtra le righe in base a più condizioni. Per migliorare le funzionalità e ridurre la quantità di dati scansionati, il connettore Athena DynamoDB può combinare queste espressioni e inviarle direttamente a DynamoDB.
I seguenti operatori del connettore DynamoDB di Athena supportano il pushdown dei predicati:
-
Boolean: AND
-
Uguaglianza: EQUAL, NOT_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, IS_NULL
Esempio di pushdown combinato
Per le funzionalità di esecuzione di query avanzate, combina i tipi di pushdown, come nell'esempio seguente:
SELECT * FROM my_table WHERE col_a > 10 and col_b < 10 LIMIT 10
Per un articolo sull'utilizzo del pushdown del predicato per migliorare le prestazioni nelle query federate, incluso DynamoDB, consulta Come migliorare le query federate con il pushdown del predicato in Amazon Athena
Query passthrough
Il connettore DynamoDB supporta le query passthrough e utilizza la sintassi PartiQL. L'operazione dell'API GetItem di DynamoDB non è supportata. Per informazioni sull'interrogazione di DynamoDB utilizzando PartiQL, consulta Istruzioni selezionate PartiQL per DynamoDB nella Guida per sviluppatori Amazon DynamoDB.
Per utilizzare le query passthrough con DynamoDB, utilizzare la seguente sintassi:
SELECT * FROM TABLE( system.query( query => 'query_string' ))
Il seguente esempio di query passthrough DynamoDB utilizza PartiQL per restituire un elenco di dispositivi Fire TV Stick che hanno una proprietà DateWatched successiva al 24/12/22.
SELECT * FROM TABLE( system.query( query => 'SELECT Devices FROM WatchList WHERE Devices.FireStick.DateWatched[0] > '12/24/22'' ))
Risoluzione dei problemi
Filtri multipli su una colonna con chiave di ordinamento
Messaggio di errore: KeyConditionExpressions deve contenere solo una condizione per chiave
Causa: questo problema può verificarsi nella versione 3 del motore Athena nelle query che hanno un filtro con limite sia inferiore sia superiore su una colonna con chiave di ordinamento DynamoDB. Poiché DynamoDB non supporta più di una condizione di filtro su una chiave di ordinamento, quando il connettore tenta di inviare una query a cui sono applicate entrambe le condizioni, viene generato un errore.
Soluzione: aggiorna il connettore alla versione 2023.11.1 o successiva. Per istruzioni sull'aggiornamento di un connettore, consulta Aggiornare un connettore di origine dati.
Costi
I costi di utilizzo del connettore dipendono dalle risorse AWS sottostanti utilizzate. Dato che le query che utilizzano le scansioni possono consumare un numero elevato di unità di capacità di lettura (RCU)
Risorse aggiuntive
-
Per un'introduzione all'utilizzo del connettore Amazon Athena DynamoDB, consulta Accesso, esecuzione di query e join di tabelle Amazon DynamoDB con Athena nella guida AWSPrescriptive Guidance Patterns.
-
Per un articolo su come utilizzare il connettore Athena DynamoDB per interrogare i dati in DynamoDB con SQL e visualizzare approfondimenti in Quick Suite, consulta ilpost del Blog Big Data AWS Visualizza le informazioni Amazon DynamoDB in Quick Suite usando il connettore Amazon Athena DynamoDB e AWS Glue
. -
Per un articolo su come utilizzare il connettore Amazon Athena DynamoDB con Amazon DynamoDB, Athena e Quick Suite per creare una dashboard di governance semplice, consulta il post sulBlog Big Data AWS Eseguire query su tabelle multiaccount di Amazon DynamoDB utilizzando Amazon Athena Federated Query
. Per ulteriori informazioni su questo connettore, visita il sito corrispondente
su GitHub.com.