Come posso creare e utilizzare tabelle partizionate in Amazon Athena?

5 minuti di lettura
0

Desidero creare tabelle partizionate in Amazon Athena e utilizzarle per migliorare le mie query.

Breve descrizione

Partizionando le tabelle Athena, puoi limitare la quantità di dati scansionati da ogni query, migliorando così le prestazioni e riducendo i costi. Il partizionamento divide la tabella in parti e mantiene insieme i dati correlati sulla base dei valori delle colonne. Le partizioni fungono da colonne virtuali e aiutano a ridurre la quantità di dati scansionati per query.

Quando crei una tabella e partizioni i dati, tieni presente quanto segue:

  • È necessario archiviare i dati nei bucket Amazon Simple Storage Service (Amazon S3) come partizione.
  • Includi le colonne di partizionamento e la posizione principale dei dati partizionati quando crei la tabella.
  • Scegli l'approccio appropriato per caricare le partizioni nel catalogo dati AWS Glue. Quando si eseguono le query, la tabella fa riferimento al catalogo dati.
  • Usa la proiezione delle partizioni per dati altamente partizionati in Amazon S3.

Risoluzione

Ecco alcune cose da tenere presente quando crei una tabella con partizioni.

Archivia su Amazon S3

I dati devono essere partizionati e archiviati su Amazon S3. I dati partizionati possono essere in uno dei seguenti formati:

  • Formato in stile Hive (esempio: s3://doc-example-bucket/example-folder/year=2021/month=01/day=01/myfile.csv)
    Nota: il percorso include i nomi delle chiavi di partizione e i relativi valori (esempio: anno=2021)
  • Formato in stile non Hive (esempio: s3://doc-example-bucket/example-folder/2021/01/01/myfile.csv)

Includi informazioni sul partizionamento durante la creazione della tabella

L'istruzione CREATE TABLE deve includere i dettagli del partizionamento. Utilizza PARTITIONED BY per definire le colonne della partizione e LOCATION per specificare la posizione principale dei dati partizionati. Esegui una query simile alla seguente:

CREATE EXTERNAL TABLE doc-example-table (
first string,
last string,
username string
)
PARTITIONED BY (year string, month string, day string)
STORED AS parquet
LOCATION 's3://doc-example-bucket/example-folder'

Sostituisci quanto segue nella query:

  • doc-example-table con il nome della tabella che stai creando
  • doc-example-bucket con il nome del bucket S3 in cui memorizzi la tabella
  • cartella di esempio con il nome della tua cartella S3
  • nome, cognome e nome utente con i nomi delle colonne
  • anno, mese e giorno con i nomi delle colonne delle partizioni

Carica le partizioni nel Catalogo dati con un approccio appropriato al tuo caso d'uso

Dopo aver creato la tabella, aggiungi le partizioni al Catalogo dati. Puoi farlo utilizzando uno dei seguenti approcci:

  • Utilizza la query MSCK REPAIR TABLE per i dati in formato Hive: Il comando MSCK REPAIR TABLE analizza un file system, come Amazon S3, alla ricerca di partizioni compatibili con HIVE. Il comando li confronta con le partizioni già presenti nella tabella e quindi aggiunge le nuove partizioni al catalogo dati. Esegui un comando simile al seguente:
    Nota: questo approccio non è una best practice se si dispone di più di qualche migliaio di partizioni. Le tue richieste DDL potrebbero comportare problemi di time out. Per ulteriori informazioni, consulta Perché la mia query MSCK REPAIR TABLE non aggiunge partizioni al catalogo dati AWS Glue?
MSCK REPAIR TABLE doc-example-table
  • Usa la query ALTER TABLE ADD PARTITION per un formato dati in stile Hive e non in stile Hive: Il comando ALTER TABLE ADD PARTITION aggiunge una o più partizioni al Catalogo dati. Nel comando, specifica il nome della colonna della partizione e le coppie di valori insieme al percorso Amazon S3 in cui sono archiviati i file di dati per quella partizione. È possibile aggiungere una partizione o un batch di partizioni per query eseguendo comandi simili ai seguenti:
ALTER TABLE doc-example-table ADD PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
ALTER TABLE doc-example-table ADD
PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
PARTITION (year='2020', month='06', day='01') LOCATION 's3://doc-example-bucket/example-folder/2020/06/01/'
  • Usa il crawler AWS Glue per un formato dati in stile Hive e non in stile Hive: Puoi utilizzare il crawler Glue per dedurre automaticamente lo schema della tabella dal set di dati, creare la tabella e quindi aggiungere le partizioni al Catalogo dati. In alternativa, puoi utilizzare il crawler solo per aggiungere partizioni a una tabella creata manualmente con l'istruzione CREATE TABLE. Per utilizzare il crawler per aggiungere partizioni, quando lo definisci, specifica una o più tabelle del Catalogo dati esistenti come origine della ricerca per indicizzazione anziché specificare gli archivi di dati. Il crawler esegue la scansione degli archivi di dati specificati dalle tabelle del Catalogo dati. Non vengono create nuove tabelle. Le tabelle create manualmente vengono invece aggiornate e vengono aggiunte nuove partizioni. Per ulteriori informazioni, consulta Setting crawler configuration options.
  • Usa la proiezione delle partizioni per dati altamente partizionati in Amazon S3: Quando si dispone di dati altamente partizionati in Amazon S3, l'aggiunta di partizioni al Catalogo dati può risultare poco pratica e richiedere molto tempo. Le query in una tabella altamente partizionata non vengono completate rapidamente. In questi casi, è possibile utilizzare la funzione di proiezione delle partizioni per velocizzare l'elaborazione delle query di tabelle altamente partizionate e automatizzare la gestione delle partizioni. Nella proiezione delle partizioni, i valori e le posizioni delle partizioni vengono calcolati in base alla configurazione anziché alla lettura da un repository, come il Catalogo dati. Ciò significa che non è necessario aggiungere partizioni al Catalogo dati con la proiezione delle partizioni. Poiché le operazioni in memoria sono in genere più veloci delle operazioni remote, la proiezione delle partizioni può ridurre il runtime delle query su tabelle altamente partizionate. La funzione di proiezione delle partizioni attualmente funziona con valori enumerati, numeri interi, date o tipi di colonne con partizione injected. Per ulteriori informazioni, consulta Partition Projection with Amazon Athena.

Informazioni correlate

Perché non ottengo alcun record quando interrogo la mia tabella Amazon Athena?

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa