Procedure consigliate per l'utilizzo di Athena con AWS Glue - 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à.

Procedure consigliate per l'utilizzo di Athena con AWS Glue

Quando si utilizza Athena con AWS Glue Data Catalog, è possibile utilizzare AWS Glue per creare database e tabelle (schema) da interrogare in Athena oppure è possibile utilizzare Athena per creare schemi e quindi utilizzarli nei servizi correlati. AWS Glue Questo argomento fornisce alcune osservazioni e best practice da seguire quando si utilizza uno dei due metodi.

Athena utilizza in background Trino per elaborare le dichiarazioni DML e Hive per elaborare le dichiarazioni DDL che creano e modificano gli schemi. Con queste tecnologie, ci sono un paio di convenzioni da seguire affinché Athena AWS Glue e io lavoriamo bene insieme.

In questo argomento

Nomi database, tabella e colonne

Quando crei uno schema AWS Glue per eseguire una query in Athena, considera quanto segue:

  • I caratteri accettabili per i nomi di database, i nomi delle tabelle e i nomi delle colonne AWS Glue devono essere una stringa UTF-8 e devono essere scritti in minuscolo. Tieni presente che Athena riduce automaticamente tutti i nomi maiuscoli nelle query DDL quando crea database, tabelle o colonne. La lunghezza della stringa non deve essere inferiore a 1 o superiore a 255 byte. I caratteri che possono essere utilizzati includono gli spazi.

  • Attualmente è possibile inserire degli spazi iniziali all'inizio dei nomi. Poiché questi spazi iniziali possono essere difficili da rilevare e possono causare problemi di usabilità dopo la creazione, evitate di creare inavvertitamente nomi di oggetti con spazi iniziali.

  • Se utilizzi un AWS::Glue::Database AWS CloudFormation modello per creare un AWS Glue database e non specifichi un nome di database, genera AWS Glue automaticamente un nome di database nel formato resource_name—random_string che non è compatibile con Athena.

  • È possibile utilizzare AWS Glue Catalog Manager per rinominare le colonne, ma non i nomi delle tabelle o dei database. Per ovviare a questa limitazione, è necessario utilizzare una definizione del vecchio database per creare un database con il nuovo nome. Quindi si utilizzano le definizioni delle tabelle del vecchio database per ricreare le tabelle nel nuovo database. Per fare ciò, puoi usare AWS CLI o AWS Glue SDK. Per le fasi, consulta Utilizzo di AWS CLI per ricreare un AWS Glue database e le relative tabelle.

Per ulteriori informazioni su database e tabelle in AWS Glue, consulta Databases and Tables nella AWS Glue Developer Guide.

Utilizzo dei AWS Glue crawler

AWS Glue i crawler aiutano a scoprire lo schema dei set di dati e a registrarli come tabelle nel Data Catalog. AWS Glue I crawler analizzano i dati e ne determinano lo schema. Inoltre, il crawler è in grado di rilevare e registrare le partizioni. Per ulteriori informazioni, consultare Definizione di crawler nella Guida per gli sviluppatori di AWS Glue . Le tabelle dei dati correttamente sottoposte a ricerca per indicizzazione possono essere interrogate da Athena.

Nota

Athena non riconosce i pattern di esclusione specificati per un AWS Glue crawler. Ad esempio, se disponi di un bucket Amazon S3 che contiene i file .csv e .json ed escludi i file .json dal crawler, Athena esegue query su entrambi i gruppi di file. Per evitare ciò, posizionare i file che si desidera escludere in una posizione diversa.

Pianificazione di un crawler per mantenere sincronizzati AWS Glue Data Catalog e Amazon S3

AWS Glue i crawler possono essere configurati per essere eseguiti secondo una pianificazione o su richiesta. Per ulteriori informazioni, consulta la sezione relativa alle pianificazioni per processi e crawler nella guida per sviluppatori di AWS Glue .

Se disponi di dati per una tabella partizionata che arrivano a un orario fisso, puoi configurare un AWS Glue crawler da eseguire nei tempi previsti per rilevare e aggiornare le partizioni della tabella. In questo modo, non sarà più necessario eseguire un comando MSCK REPAIR, potenzialmente lungo e costoso, né eseguire manualmente un comando ALTER TABLE ADD PARTITION. Per ulteriori informazioni, consulta la sezione relativa alle partizioni tabella nella guida per sviluppatori AWS Glue .

Utilizzo di più origini dati con i crawler

Quando un AWS Glue crawler esegue la scansione di Amazon S3 e rileva più directory, utilizza un'euristica per determinare dove si trova la radice di una tabella nella struttura di directory e quali directory sono partizioni per la tabella. Nei casi in cui gli schemi rilevati in due o più directory siano analoghi, il crawler potrebbe trattarli come partizioni invece di tabelle separate. Un metodo per aiutare il crawler a rilevare singole tabelle è aggiungere la directory radice di ciascuna tabella come datastore per il crawler.

Le seguenti partizioni in Amazon S3 sono un esempio:

s3://DOC-EXAMPLE-BUCKET/folder1/table1/partition1/file.txt s3://DOC-EXAMPLE-BUCKET/folder1/table1/partition2/file.txt s3://DOC-EXAMPLE-BUCKET/folder1/table1/partition3/file.txt s3://DOC-EXAMPLE-BUCKET/folder1/table2/partition4/file.txt s3://DOC-EXAMPLE-BUCKET/folder1/table2/partition5/file.txt

Se gli schemi per table1 e table2 sono simili e una singola origine dati è impostata su s3://DOC-EXAMPLE-BUCKET/folder1/ in AWS Glue, il crawler potrebbe creare una singola tabella con due colonne di partizione: una che contiene table1 e table2, e l'altra contenente partition1 tramite partition5.

Per fare in modo che il AWS Glue crawler crei due tabelle separate, imposta il crawler in modo che abbia due origini dati e, come illustrato nella procedura seguente. s3://DOC-EXAMPLE-BUCKET/folder1/table1/ s3://DOC-EXAMPLE-BUCKET/folder1/table2

Per aggiungere un data store S3 a un crawler esistente in AWS Glue

  1. Accedi AWS Management Console e apri la AWS Glue console all'indirizzo https://console.aws.amazon.com/glue/.

  2. Nel riquadro di navigazione, selezionare Crawlers (Crawler).

  3. Scegli il link al tuo crawler, quindi scegli Edit (Modifica).

  4. Per Fase 2: Scegli origini dei dati e classificatori, scegli Edit (Modifica).

  5. Nella sezione Data sources (Origini dei dati), scegli Add a data source (Aggiungi un'origine dei dati).

  6. Nella finestra di dialogo Add data source (Aggiungi origine dei dati), per S3 path (Percorso S3), scegli Browse (Sfoglia).

  7. Scegli il bucket che vuoi utilizzare e poi seleziona Choose (Scegli).

    L'origine dei dati che hai aggiunto viene visualizzata nell'elenco Data sources (Origini dei dati).

  8. Seleziona Successivo.

  9. Nella pagina Configure security settings (Configura impostazioni di sicurezza), crea o scegli un ruolo IAM per il crawler, quindi scegli Next (Avanti).

  10. Assicurati che il percorso S3 termini con una barra finale, quindi scegli Add an S3 data source (Aggiungi un'origine dei dati S3).

  11. Nella pagina Set output and scheduling (Imposta l'output e la pianificazione), per Output configuration (Configurazione dell'output), scegli il database di destinazione.

  12. Seleziona Successivo.

  13. Nella pagina Review and update (Verifica e aggiorna), rivedi le scelte che hai fatto. Per modificare un passaggio, scegli Edit (Modifica).

  14. Scegli Aggiorna.

Sincronizzazione dello schema di partizione per evitare "HIVE_PARTITION_SCHEMA_MISMATCH"

Per ogni tabella all'interno del AWS Glue Data Catalog con colonne di partizione, lo schema viene archiviato a livello di tabella e per ogni singola partizione all'interno della tabella. Lo schema per le partizioni viene popolato da un AWS Glue crawler basato sul campione di dati che legge all'interno della partizione. Per ulteriori informazioni, consulta Utilizzo di più origini dati con i crawler.

Quando Athena esegue una query, convalida lo schema della tabella e lo schema qualsiasi partizione necessaria per la query. La convalida confronta i tipi di dati di colonna in ordine e verifica che corrispondano per le colonne che si sovrappongono. Ciò impedisce operazioni inattese, come l'aggiunta o la rimozione di colonne dal centro di una tabella. Se Athena rileva che lo schema di una partizione differisce dallo schema della tabella, Athena potrebbe non essere in grado di elaborare la query e restituisce l'errore HIVE_PARTITION_SCHEMA_MISMATCH.

Vi sono vari modi per risolvere questo problema. In primo luogo, se i dati sono stati aggiunti accidentalmente, è possibile eliminare i file di dati che generano la differenza tra gli schemi, eliminare la partizione e ripetere il crawling dei dati. In secondo luogo, è possibile eliminare la singola partizione ed eseguire quindi MSCK REPAIR all'interno di Athena per ricreare la partizione impiegando lo schema della tabella. Questa seconda opzione funziona solo se si è certi che lo schema applicato continuerà a leggere i dati correttamente.

Aggiornamento dei metadati della tabella

Dopo una scansione, il AWS Glue crawler assegna automaticamente determinati metadati alla tabella per renderla compatibile con altre tecnologie esterne come Apache Hive, Presto e Spark. Occasionalmente, il crawler potrebbe assegnare le proprietà dei metadati in modo errato. Correggi manualmente le proprietà AWS Glue prima di interrogare la tabella usando Athena. Per ulteriori informazioni, consulta la sezione relativa alla visualizzazione e modifica dei dettagli tabella nella Guida per sviluppatori AWS Glue .

AWS Glue può assegnare erroneamente i metadati quando un file CSV contiene virgolette su ogni campo di dati, sbagliando la proprietà. serializationLib Per ulteriori informazioni, consulta Dati CSV tra virgolette.

Utilizzo dei file CSV

Nei file CSV, talvolta i valori dei dati destinati a ciascuna colonna sono scritti tra virgolette; inoltre nei file CSV potrebbero essere presenti dei valori di intestazione che non fanno parte dei dati da analizzare. Quando usi AWS Glue per creare uno schema da questi file, segui le istruzioni riportate in questa sezione.

Dati CSV tra virgolette

Potresti avere un file CSV che dispone di campi dati racchiusi tra virgolette doppie come l'esempio seguente:

"John","Doe","123-555-1231","John said \"hello\"" "Jane","Doe","123-555-9876","Jane said \"hello\""

Per eseguire una query in Athena su una tabella creata da un file CSV contenente valori tra virgolette, è necessario modificare le proprietà della tabella in modo da AWS Glue utilizzare OpenCSV. SerDe Per ulteriori informazioni su OpenCSV SerDe, vedere. OpenCSV per l'elaborazione di file SerDe CSV

Per modificare le proprietà delle tabelle nella console AWS Glue
  1. Nel riquadro di navigazione della AWS Glue console, scegli Tabelle.

  2. Scegli il collegamento per la tabella che desideri modificare, quindi scegli Actions (Operazioni), Edit table details (Modifica tabella).

  3. Nella pagina Edit table (Modifica tabella), apporta le modifiche seguenti:

    • Per Serialization lib (Libreria serializzazione), inserisci org.apache.hadoop.hive.serde2.OpenCSVSerde.

    • Per Parametri Serde, inserisci i seguenti valori per le chiavi escapeChar, quoteChar e separatorChar:

      • Per escapeChar, inserire una barra rovesciata (\).

      • Per quoteChar, inserire una virgoletta doppia (").

      • Per separatorChar, inserire una virgola (,).

  4. Selezionare Salva.

Per ulteriori informazioni, consulta la sezione relativa alla visualizzazione e modifica dei dettagli tabella nella Guida per sviluppatori AWS Glue .

Aggiornamento delle proprietà AWS Glue delle tabelle a livello di codice

È possibile utilizzare l'operazione AWS Glue UpdateTableAPI o il comando CLI update-table per modificare il SerDeInfo blocco nella definizione della tabella, come nel seguente esempio JSON.

"SerDeInfo": { "name": "", "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde", "parameters": { "separatorChar": "," "quoteChar": "\"" "escapeChar": "\\" } },

File CSV con intestazioni

Quando definisci una tabella in Athena con un'istruzione CREATE TABLE, puoi utilizzare la proprietà tabella skip.header.line.count per ignorare gli header nei dati CSV, come nell'esempio seguente.

... STORED AS TEXTFILE LOCATION 's3://DOC-EXAMPLE-BUCKET/csvdata_folder/'; TBLPROPERTIES ("skip.header.line.count"="1")

In alternativa, puoi rimuovere gli header CSV in anticipo in modo che le informazioni degli header non siano incluse nei risultati delle query di Athena di Athena. Un modo per raggiungere questo obiettivo è utilizzare i AWS Glue job, che eseguono operazioni di estrazione, trasformazione e caricamento (ETL). È possibile scrivere script AWS Glue utilizzando un linguaggio che è un'estensione del dialetto PySpark Python. Per ulteriori informazioni, consulta Authoring Jobs in AWS Glue nella AWS Glue Developer Guide.

L'esempio seguente mostra una funzione in AWS Glue uno script che scrive un frame dinamico utilizzando from_options e imposta l'opzione writeHeader format su false, che rimuove le informazioni di intestazione:

glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://DOC-EXAMPLE-BUCKET/MYTABLEDATA/"}, format = "csv", format_options = {"writeHeader": False}, transformation_ctx = "datasink2")

AWS Glue indicizzazione e filtraggio delle partizioni

Quando Athena esegue una query su tabelle partizionate, recupera e filtra le partizioni della tabella disponibili nel sottoinsieme pertinente alla query. Quando vengono aggiunti nuovi dati e partizioni, è necessario più tempo per elaborare le partizioni e il runtime delle query può aumentare. Se si dispone di una tabella con un numero elevato di partizioni che cresce nel tempo, considerare l'uso di indicizzazione e filtro delle partizioni AWS Glue . L'indicizzazione delle partizioni consente ad Athena di ottimizzare l'elaborazione delle partizioni e migliorare le prestazioni delle query su tabelle altamente partizionate. L'impostazione del filtro delle partizioni nelle proprietà di una tabella è un processo a due fasi:

  1. Creazione di un indice di partizione in AWS Glue.

  2. Abilitazione del filtro delle partizioni per la tabella.

Creazione di un indice di partizione

Per istruzioni su come creare un indice di partizione in AWS Glue, consulta Working with partition indexes nella Developer Guide. AWS Glue Per le limitazioni relative agli indici di partizione in AWS Glue, consulta la sezione Informazioni sugli indici di partizione in quella pagina.

Abilitazione del filtro delle partizioni

Per abilitare il filtro delle partizioni per la tabella, è necessario impostare una nuova proprietà della tabella in AWS Glue. Per istruzioni su come impostare le proprietà della tabella in AWS Glue, consulta la pagina Configurazione della proiezione delle partizioni. Quando modificate i dettagli della tabella in AWS Glue, aggiungete la seguente coppia chiave-valore alla sezione Proprietà della tabella:

  • Per Key (Chiave), aggiungi partition_filtering.enabled

  • Per Value (Valore), aggiungi true

È possibile disabilitare la proiezione delle partizioni su questa tabella in qualsiasi momento impostando partition_filtering.enabled su false.

Dopo aver completato le fasi precedenti, sarà possibile tornare alla console Athena per eseguire la query sui dati.

Per ulteriori informazioni sull'utilizzo dell'indicizzazione e del filtraggio delle partizioni, consulta Migliorare le prestazioni delle query di Amazon Athena utilizzando gli indici delle AWS Glue Data Catalog partizioni nel Big Data Blog.AWS

Utilizzo dei dati geospaziali

AWS Glue non supporta nativamente Woonown Text (WKT), Wooden Binary (WKB) o altri tipi di dati PostGIS. Il AWS Glue classificatore analizza i dati geospaziali e li classifica utilizzando i tipi di dati supportati per il formato, ad esempio per CSV. varchar Come per altre AWS Glue tabelle, potrebbe essere necessario aggiornare le proprietà delle tabelle create da dati geospaziali per consentire ad Athena di analizzare questi tipi di dati così come sono. Per ulteriori informazioni, consulta Utilizzo dei AWS Glue crawler e Utilizzo dei file CSV. Athena potrebbe non essere in grado di analizzare alcuni tipi di dati geospaziali nelle tabelle così come sono. AWS Glue Per ulteriori informazioni sull'utilizzo dei dati geospaziali in Athena, consulta Esecuzione di query su dati geospaziali.

Utilizzo AWS Glue di job per ETL con Athena

AWS Glue i lavori eseguono operazioni ETL. Un AWS Glue job esegue uno script che estrae i dati dalle fonti, li trasforma e li carica in destinazioni. Per ulteriori informazioni, consulta Authoring Jobs in AWS Glue nella AWS Glue Developer Guide.

Creazione di tabelle utilizzando Athena per lavori ETL AWS Glue

Alle tabelle da te create in Athena devi aggiungere una proprietà di tabella, denominata classification, che identifica il formato dei dati. Ciò consente di AWS Glue utilizzare le tabelle per i lavori ETL. I valori di classificazione possono essere avro, csv, json, orc, parquet o xml. Di seguito è riportata un'istruzione CREATE TABLE di esempio in Athena:

CREATE EXTERNAL TABLE sampleTable ( column1 INT, column2 INT ) STORED AS PARQUET TBLPROPERTIES ( 'classification'='parquet')

Se la proprietà della tabella non è stata aggiunta al momento della creazione della tabella, è possibile aggiungerla utilizzando la AWS Glue console.

Per aggiungere la proprietà della tabella di classificazione utilizzando la AWS Glue console

  1. Accedere AWS Management Console e aprire la AWS Glue console all'indirizzo https://console.aws.amazon.com/glue/.

  2. Nel pannello di navigazione della console, seleziona Tables (Tabelle).

  3. Scegli il collegamento per la tabella che desideri modificare, quindi scegli Actions (Operazioni), Edit table details (Modifica tabella).

  4. Scorri verso il basso fino alla sezione Table properties (Proprietà della tabella).

  5. Scegli Aggiungi.

  6. In Chiave, inserire classification.

  7. Per Value (Valore), inserisci un tipo di dati (ad esempio, json).

  8. Selezionare Salva.

    Nella sezione Table details (Dettagli della tabella), il tipo di dati che hai inserito appare nel campo Classification (Classificazione) della tabella.

Per ulteriori informazioni, consulta l'argomento relativo all'utilizzo delle tabelle nella Guida per sviluppatori AWS Glue .

Utilizzo di processi ETL per ottimizzare le prestazioni delle query

AWS Glue jobs possono aiutarti a trasformare i dati in un formato che ottimizza le prestazioni delle query in Athena. I formati dei dati influiscono moltissimo sulle prestazioni delle query e sui costi delle query in Athena.

Si consiglia di utilizzare i formati di dati Parquet e ORC. AWS Glue supporta la scrittura in entrambi questi formati di dati, il che può semplificare e velocizzare la trasformazione dei dati in un formato ottimale per Athena. Per ulteriori informazioni su questi formati e altri modi per migliorare le prestazioni, consulta i 10 migliori suggerimenti per l'ottimizzazione delle prestazioni per Amazon Athena.

Conversione di tipi di dati SMALLINT e TINYINT su INT durante la conversione in ORC

Per ridurre la probabilità che Athena non sia in grado di leggere i tipi di dati TINYINT e SMALLINT i tipi di dati prodotti da AWS Glue un processo ETL, SMALLINT converti TINYINT e INT verso quando usi la procedura guidata o scrivi uno script per un processo ETL.

Automazione dei lavori per ETL AWS Glue

È possibile configurare i processi AWS Glue ETL in modo che vengano eseguiti automaticamente in base ai trigger. Questa funzionalità è ideale quando i dati dall'esterno AWS vengono inviati a un bucket Amazon S3 in un formato non ottimale per l'esecuzione di query in Athena. Per ulteriori informazioni, consulta Attivazione dei processi AWS Glue nella Guida per sviluppatori di AWS Glue .