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à.
Gestire gli aggiornamenti dello schema
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.
Argomenti
Operazioni di aggiornamento dello schema supportate in base al formato dei dati
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, osservate che Parquet e C ORC sono formati colonnari con diversi metodi di accesso alle colonne predefiniti. Per impostazione predefinita, Parquet accede alle colonne per nome e ORC per 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. Allo stesso modo, per ORC utilizzare la orc.column.index.access
proprietà per controllare il metodo di accesso alle colonne. Per ulteriori informazioni, consulta Comprendi l'accesso all'indice per Apache e Apache Parquet ORC.
CSVe TSV consentono di eseguire tutte le manipolazioni dello schema tranne il riordino delle colonne o l'aggiunta di colonne all'inizio della tabella. Ad esempio, se l'evoluzione dello schema richiede solo la ridenominazione delle colonne ma non la loro rimozione, puoi scegliere di creare le tabelle in o. CSV TSV Se avete bisogno di rimuovere delle colonne, non utilizzate CSV o TSV utilizzate invece uno qualsiasi degli altri formati supportati, preferibilmente un formato colonnare, come Parquet o. ORC
Aggiornamento tipo di schema atteso | Riepilogo | CSV(con e senza intestazioni) e TSV | JSON | AVRO | PARQUET: letto per nome (impostazione predefinita) | PARQUET: letto per indice | ORC: Lettura per indice (impostazione predefinita) | ORC: letto per nome |
---|---|---|---|---|---|---|---|---|
Rinomina colonne | Memorizza i dati in CSV and TSV o in ORC e Parquet se vengono letti per indice. | Y | N | N | N | Y | Y | N |
Aggiungi colonne all'inizio o al centro della tabella | Archivia i tuoi dati in JSONAVRO, o in Parquet e ORC se vengono letti per nome. Non utilizzare CSV eTSV. | N | Y | Y | Y | N | N | Y |
Aggiungi colonne alla fine di una tabella | Archivia i tuoi dati in CSV or TSVJSON,AVRO,ORC, o Parquet. | Y | Y | Y | Y | Y | Y | Y |
Rimuovi colonne | Archivia i tuoi dati in JSONAVRO, o Parquet andORC, se vengono letti per nome. Non utilizzare CSV eTSV. | N | Y | Y | Y | N | N | Y |
Riordina colonne | Archivia i tuoi dati in AVRO JSON or ORC e Parquet se vengono letti per 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 andORC, la modifica di un tipo di dati funziona solo per le tabelle partizionate. | Y | Y | Y | Y | Y | Y | Y |
Comprendi l'accesso all'indice per Apache e Apache Parquet ORC
PARQUETe ORC sono formati di archiviazione dati colonnari 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: Letto per 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, specificare queste SerDe proprietà nelle CREATE
TABLE
query è facoltativo e 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 PARTITION
Utilizzate 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: Letto per indice
Per impostazione predefinita, una tabella in ORCviene letta per indice. 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 eseguire la ORC lettura per nome, che consente di aggiungere colonne al centro della tabella o rimuovere colonne dall'internoORC, impostate la SerDe proprietà orc.column.index.access
su false
nell'CREATE
TABLE
istruzione. In questa configurazione, perderai la possibilità di rinominare le colonne.
Nota
Nella versione 2 del motore Athena, quando le ORC tabelle sono impostate per la lettura per nome, Athena richiede che tutti i nomi delle colonne nei ORC file siano in minuscolo. Poiché Apache Spark non utilizza nomi di campo in minuscolo quando genera fileORC, 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 illustra come modificare il file per renderlo letto ORC per 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://amzn-s3-demo-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 parquet.column.index.access
SerDe proprietà impostata su. true