Connettore Amazon Athena DynamoDB - Amazon Athena

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

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 2mConnectionSchemaVersion.

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_bucket specificato chiamata athena-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 putObject di 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à columnMapping nella tua tabella AWS Glue.

    Il parametro disable_projection_and_casing utilizza 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
  1. Accedere alla Console di gestione AWS, quindi aprire la console AWS Glue all'indirizzo https://console.aws.amazon.com/glue/.

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

  3. Nell'elenco dei database, scegli il link del database da modificare.

  4. Scegli Modifica.

  5. 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 da default. La proprietà dynamo-db-flag è utile per filtrare i database negli account che hanno numerosi database.

  6. Scegli Update Database (Aggiorna database).

Per modificare le proprietà della tabella nella console AWS Glue
  1. Accedere alla Console di gestione AWS, quindi aprire la console AWS Glue all'indirizzo https://console.aws.amazon.com/glue/.

  2. Nel riquadro di navigazione, espandi Data Catalog (Catalogo dati), quindi seleziona Tables (Tabelle).

  3. Nella pagine Tables (Tabelle), nell'elenco delle tabelle, seleziona il link della tabella che intendi modificare.

  4. Scegli Actions (Operazioni), Edit (Modifica).

  5. 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 dynamodb nelle 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 inserire classification e dynamodb come 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 date o datetime che 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 date o datetime da utilizzare per l'analisi dei dati da una colonna del tipo di dati AWS Glue date o timestamp. Se questa proprietà non viene specificata, il connettore tenta di dedurre un formato ISO-8601. Se il connettore non è in grado di dedurre il formato di date o datetime oppure di analizzare la stringa non elaborata, il valore viene omesso dal risultato.

      Il valore datetimeFormatMapping deve essere nel formato col1=someformat1,col2=someformat2. Di seguito sono riportati alcuni formati di esempio:

      yyyyMMdd'T'HHmmss ddMMyyyy'T'HH:mm:ss

      Se la tua colonna ha valori date o datetime senza fuso orario e desideri utilizzare la colonna nella clausola WHERE, imposta la proprietà datetimeFormatMapping per la colonna.

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

  7. Selezionare Salva.

Autorizzazioni richieste

Consulta la sezione Policies del file athena-dynamodb.yaml per i dettagli completi delle policy IAM richieste da questo connettore. L'elenco che segue riporta un riepilogo delle autorizzazioni richieste.

  • 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, Query e Scan.

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 nel Blog sui Big Data diAWS.

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), consulta attentamente le informazioni sui prezzi di Amazon DynamoDB.

Risorse aggiuntive