Aggiornare tabelle con partizioni - Amazon Athena

Aggiornare tabelle con partizioni

In Athena, una tabella e le relative partizioni devono utilizzare gli stessi formati di dati, tuttavia i loro schemi possono differire. Quando si crea una nuova partizione, questa in genere eredita lo schema della tabella. Nel corso del tempo, gli schemi possono iniziare a differire. I motivi includono:

  • Se lo schema della tua tabella cambia, gli schemi delle partizioni non vengono aggiornati per mantenere la sincronizzazione con lo schema della tabella.

  • Il crawler di AWS Glue consente di individuare i dati in partizioni con schemi diversi. Questo significa che, se crei una tabella in Athena con AWS Glue, dopo che il crawler ha termina l'elaborazione gli schemi della tabella e le relative partizioni potrebbero essere differenti.

  • Se aggiungi delle partizioni direttamente tramite un'API AWS.

Athena elabora correttamente le tabelle con partizioni se soddisfano i seguenti vincoli. Se tali requisiti non vengono soddisfatti, Athena emette un errore HIVE_PARTITION_SCHEMA_MISMATCH.

  • Ciascuno schema di partizione è compatibile con lo schema della tabella.

  • Il formato di dati della tabella consente il tipo di aggiornamento che si desidera eseguire: aggiunta, eliminazione, riordinamento o modifica del tipo di dati di una colonna.

    Ad esempio, per i formati CSV e TSV è possibile rinominare colonne, aggiungere nuove colonne alla fine della tabella e modificare il tipo di dati di una colonna se i tipi sono compatibili, ma non è possibile rimuovere colonne. Per altri formati, è possibile aggiungere o rimuovere colonne oppure modificare il tipo di dati di una colonna in un altro tipo se i tipi sono compatibili. Per ulteriori informazioni, consulta il Riepilogo: aggiornamenti e formati di dati in Athena.

Evitare errori di mancata corrispondenza tra schemi per tabelle con partizioni

All'inizio dell'esecuzione di una query, Athena verifica lo schema della tabella controllando che ogni tipo di dati colonna sia compatibile tra la tabella e la partizione.

  • Per i tipi di storage dei dati Parquet e ORC, Athena si avvale dei nomi delle colonne e li utilizza per la verifica del proprio schema basato sul nome di colonna. Ciò consente di eliminare gli errori HIVE_PARTITION_SCHEMA_MISMATCH per le tabelle con partizioni in Parquet e ORC. (Questo vale per ORC se la proprietà SerDe è impostata per accedere all'indice per nome: orc.column.index.access=FALSE. Parquet legge l'indice per nome per impostazione predefinita).

  • Per CSV, JSON e Avro, Athena usa una verifica dello schema basata sull'indice. Questo significa che, se si verifica un errore di mancata corrispondenza di schema, è necessario eliminare la partizione che provoca tale differenza e ricrearla, in modo che Athena possa eseguire le query senza errori.

Athena confronta lo schema della tabella con gli schemi della partizione. Se crei una tabella in Athena con il crawler di AWS Glue in formato CSV, JSON e AVRO, quando il crawler ha terminato l'elaborazione gli schemi della tabella e delle relative partizioni potrebbero essere differenti. Se non c'è corrispondenza tra lo schema della tabella e gli schemi delle partizioni, le query falliranno in Athena a causa dell'errore di verifica dello schema simile a questo: 'crawler_test.click_avro' è dichiarato come tipo "string", ma la partizione "partition_0 = 2017-01-17" ha dichiarato la colonna "col68" come tipo "doppio"'.

Una tipica soluzione per questi errori è eliminare la partizione che provoca l'errore e ricrearla. Per ulteriori informazioni, consulta ALTER TABLE DROP PARTITION e ALTER TABLE ADD PARTITION.