Gestione degli aggiornamenti degli schemi - 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à.

Gestione degli aggiornamenti degli schemi

Questa sezione fornisce delle linee guida su come gestire gli aggiornamenti degli schemi per vari formati di dati. Athena è un motore di schema-on-read interrogazione. Ciò significa che quando si crea una tabella in Athena, applica schemi durante la lettura dei dati. Non modifica né riscrive i dati sottostanti.

Se si prevedono delle modifiche agli schemi tabella, è consigliabile crearli in un formato di dati idoneo alle proprie esigenze. Il tuo obiettivo è riutilizzare query Athena esistenti anziché modificare gli schemi, evitando così errori di mancata corrispondenza tra gli schemi durante l'esecuzione di query su tabelle con partizioni.

Per raggiungere questi obiettivi, scegli un formato di dati della tabella in base alla tabella nell'argomento seguente.

Riepilogo: Aggiornamenti e formati di dati in Athena

La tabella seguente riepiloga i formati di storage dei dati e le relative manipolazioni supportate per gli schemi. Utilizza questa tabella per scegliere più facilmente il formato che ti consenta di continuare a utilizzare le query Athena anche man mano che i tuoi schemi cambiano nel corso del tempo.

In questa tabella, osserva che Parquet e ORC sono formati di colonna con diversi metodi di accesso predefiniti alle colonne. Per impostazione predefinita, Parquet accederà alle colonne in base al nome, mentre ORC in base all'indice (valore ordinale). Pertanto, Athena fornisce una SerDe proprietà definita durante la creazione di una tabella per attivare il metodo di accesso alle colonne predefinito che consente una maggiore flessibilità con l'evoluzione dello schema.

Per Parquet, la proprietà parquet.column.index.access può essere configurata su true, impostando così il metodo di accesso alle colonne in base al numero ordinale della colonna. Impostando questa proprietà su false, il metodo di accesso alle colonne cambierà, impiegando il nome della colonna. Analogamente, per ORC utilizza la proprietà orc.column.index.access per controllare il metodo di accesso alle colonne. Per ulteriori informazioni, consulta Accesso per indice in ORC e Parquet.

CSV e TSV consentono di eseguire qualsiasi manipolazione degli schemi, eccetto il riordinamento di colonne o l'aggiunta di colonne all'inizio della tabella. Ad esempio, se l'evoluzione del tuo schema richiede solo la ridenominazione delle colonne ma non la loro rimozione, è puoi decidere di creare le tabelle in CSV o TSV. Se è invece necessaria la rimozione di colonne, non utilizzare CSV o TSV, ma impiega invece uno qualsiasi degli altri formati supportati, preferibilmente un formato di colonna, ad esempio ORC o Parquet.

Aggiornamenti di schemi e formati di dati in Athena
Aggiornamento tipo di schema atteso Riepilogo CSV (con e senza intestazioni) e TSV JSON AVRO PARQUET: lettura in base al nome (predefinito) PARQUET: lettura in base a indice ORC: lettura in base a indice (predefinito) ORC: lettura in base al nome
Rinomina colonne Archivia i tuoi dati in CSV e TSV oppure in ORC e Parquet se vengono letti in base all'indice. Y N N N Y Y N
Aggiungi colonne all'inizio o al centro della tabella Archivia i tuoi dati in JSON e AVRO oppure in ORC e Parquet se vengono letti in base al nome. Non utilizzare CSV e TSV. N Y Y Y N N Y
Aggiungi colonne alla fine di una tabella Archivia i tuoi dati in CSV o TSV, JSON, AVRO, ORC o Parquet. Y Y Y Y Y Y Y
Rimuovi colonne Archivia i tuoi dati in JSON e AVRO oppure in Parquet e ORC se vengono letti in base al nome. Non utilizzare CSV e TSV. N Y Y Y N N Y
Riordina colonne Archivia i tuoi dati in AVRO, JSON oppure in ORC e Parquet se vengono letti in base al nome. N Y Y Y N N Y
Modifica il tipo di dati di una colonna Archivia i dati in qualunque formato, ma testa la query in Athena per verificare che i tipi di dati siano compatibili. Per Parquet e ORC, la modifica di un tipo di dati funziona solo per tabelle partizionate. Y Y Y Y Y Y Y

Accesso per indice in ORC e Parquet

PARQUET e ORC sono formati colonnari di storage dei dati che possono essere letti per indice o per nome. Archiviando i dati in uno di questi formati è possibile eseguire tutte le operazioni sugli schemi ed eseguire le query Athena senza errori di mancata corrispondenza di schemi.

  • Athena legge ORC per indice per impostazione predefinita, come definito in SERDEPROPERTIES ( 'orc.column.index.access'='true'). Per ulteriori informazioni, consulta ORC: lettura in base all'indice.

  • Athena legge Parquet per nome per impostazione predefinita, come definito in SERDEPROPERTIES ( 'parquet.column.index.access'='false'). Per ulteriori informazioni, consulta Parquet: lettura in base al nome.

Poiché si tratta di impostazioni predefinite, la specificazione di queste SerDe proprietà nelle CREATE TABLE query è facoltativa, in quanto vengono utilizzate implicitamente. Quando sono utilizzate, consentono di eseguire alcune operazioni di aggiornamento dello schema, impedendone altre. Per abilitare tali operazioni, esegui un'altra CREATE TABLE query e modifica le impostazioni. SerDe

Nota

Le SerDe proprietà non vengono propagate automaticamente a ciascuna partizione. ALTER TABLE ADD PARTITIONUtilizzate le istruzioni per impostare le SerDe proprietà per ogni partizione. Per automatizzare il processo, scrivi uno script che esegue le istruzioni ALTER TABLE ADD PARTITION.

Le seguenti sezioni descrivono in dettaglio questi casi.

ORC: lettura in base all'indice

Una tabella in ORC viene letta in base all'indice per impostazione predefinita. Questo è definito dalla seguente sintassi:

WITH SERDEPROPERTIES ( 'orc.column.index.access'='true')

La lettura per indice consente l'assegnazione di un nuovo nome alle colonne. Tuttavia, in tal caso non sarà più possibile rimuovere colonne o aggiungerle al centro della tabella.

Per fare in modo che ORC venga letto per nome, il che ti consentirà di aggiungere colonne al centro della tabella o rimuovere colonne in ORC, imposta la SerDe proprietà su false nell'orc.column.index.accessistruzione. CREATE TABLE In questa configurazione, perderai la possibilità di rinominare le colonne.

Nota

Nel motore di Athena versione 2, quando le tabelle ORC sono impostate per la lettura per nome, Athena richiede che tutti i nomi delle colonne nei file ORC siano minuscoli. Poiché Apache Spark non utilizza nomi di campo minuscoli quando genera file ORC, Athena potrebbe non essere in grado di leggere i dati così generati. La soluzione alternativa consiste nel rinominare le colonne in modo che siano in minuscolo, oppure nell'utilizzare la versione 3 del motore Athena.

L'esempio seguente spiega come modificare la lettura ORC in modo che avvenga in base al nome:

CREATE EXTERNAL TABLE orders_orc_read_by_name ( `o_comment` string, `o_orderkey` int, `o_custkey` int, `o_orderpriority` string, `o_orderstatus` string, `o_clerk` string, `o_shippriority` int, `o_orderdate` string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' WITH SERDEPROPERTIES ( 'orc.column.index.access'='false') STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' LOCATION 's3://DOC-EXAMPLE-BUCKET/orders_orc/';

Parquet: lettura in base al nome

Una tabella in Parquet viene letta in base al nome per impostazione predefinita. Questo è definito dalla seguente sintassi:

WITH SERDEPROPERTIES ( 'parquet.column.index.access'='false')

La lettura per nome consente di aggiungere colonne al centro della tabella e di rimuovere colonne. Tuttavia, in tal caso si non sarà più possibile rinominare le colonne.

Per fare in modo che Parquet venga letto per indice, che consentirà di rinominare le colonne, è necessario creare una tabella con la parquet.column.index.access SerDe proprietà impostata su. true