Connettore Amazon Athena DynamoDB - Amazon Athena

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

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.

Se hai abilitato Lake Formation nel tuo account, il ruolo IAM per il tuo connettore Lambda federato Athena che hai distribuito nell'accesso in lettura deve avere accesso in lettura in AWS Serverless Application Repository Lake Formation a. AWS Glue Data Catalog

Prerequisiti

Parametri

Utilizza le variabili di ambiente Lambda illustrate in questa sezione per configurare il connettore DynamoDB.

  • 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 il riferimento PutObjectall'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 metadati dal proprio account. AWS Glue

  • disable_projection_and_casing: (facoltativo) disabilita la proiezione e la formattazione delle maiuscole. Utilizzatelo se desiderate interrogare le tabelle DynamoDB i cui nomi di colonna contengono maiuscole e minuscole e non desiderate specificare columnMapping una proprietà sulla 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. Si tratta dell'impostazione di default.

    • 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 la sezione Costi di trasferimento AWS dati per le architetture server e serverless nel blog di Partner Network. 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à di inferenza dello schema integrata nel connettore è limitata, potresti volerla utilizzare AWS Glue per i metadati. A tale scopo, è necessario disporre di un database e di una tabella. AWS Glue Per abilitarli all'uso con DynamoDB, è necessario modificarne le proprietà.

Per modificare le proprietà del database nella AWS Glue console
  1. Accedere AWS Management Console e aprire la AWS Glue console all'indirizzo https://console.aws.amazon.com/glue/.

  2. Nel riquadro di navigazione, espandi Data Catalog, quindi scegli 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 Aggiorna un database, in Impostazioni del database, per Posizione, aggiungi la stringadynamo-db-flag. Questa parola chiave indica che il database contiene tabelle che il connettore Athena DynamoDB utilizza per metadati supplementari ed è necessaria per database diversi da. AWS Glue 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à delle tabelle nella console AWS Glue
  1. Accedere AWS Management Console e aprire la AWS Glue console all'indirizzo https://console.aws.amazon.com/glue/.

  2. Nel riquadro di navigazione, espandi Data Catalog, quindi scegli Tabelle.

  3. Nella pagina Tabelle, nell'elenco delle tabelle, scegli il nome collegato della tabella che desideri 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 si utilizza 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 AWS Glue console 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. Usalo se le regole di denominazione delle AWS Glue tabelle ti impediscono di creare una AWS Glue tabella con lo stesso nome della tabella DynamoDB. Ad esempio, le lettere maiuscole non sono consentite nei nomi delle AWS Glue tabelle, ma sono consentite nei nomi delle tabelle DynamoDB.

    • columnMapping: proprietà facoltativa della tabella che definisce le mappature dei nomi delle colonne. Usalo se le regole di denominazione delle AWS Glue colonne ti impediscono di creare una AWS Glue tabella con gli stessi nomi di colonna della tabella DynamoDB. Ad esempio, le lettere maiuscole non sono consentite nei nomi delle AWS Glue colonne, ma sono consentite nei nomi delle colonne di 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à opzionale della tabella che viene applicata a datetime valori date o valori 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à opzionale della tabella che specifica il datetime formato date or da utilizzare per l'analisi dei dati da una colonna del tipo di dati AWS Glue date ortimestamp. 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 fallire rapidamente quando la query Athena upstream è terminata.

  • AWS Glue Data Catalog— Il connettore DynamoDB richiede l'accesso in sola lettura per ottenere informazioni sullo AWS Glue Data Catalog schema.

  • CloudWatch Registri: il connettore richiede l'accesso ai CloudWatch registri per l'archiviazione dei log.

  • 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 di AWS .

Interrogazioni pass-through

Il connettore DynamoDB supporta le query passthrough e utilizza la sintassi PartiQL. L'operazione API GetItemDynamoDB non è supportata. Per informazioni sull'interrogazione di DynamoDB utilizzando PartiQL, consulta le istruzioni PartiQL select per DynamoDB nella Amazon DynamoDB Developer Guide.

Per utilizzare le query passthrough con DynamoDB, utilizzate 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à successiva al 24/12/22. DateWatched

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: KeyConditionExpressionsdeve 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 Aggiornamento di un connettore origine dati.

Costi

I costi di utilizzo del connettore dipendono dalle AWS risorse 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