Modificare il tipo di dati di una colonna - 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à.

Modificare il tipo di dati di una colonna

Potresti voler utilizzare un tipo di colonna diverso quando il tipo esistente non può più contenere la quantità di informazioni richieste. Ad esempio, i valori di una colonna ID potrebbero superare la dimensione del tipo di dati INT e richiedere l'uso del tipo di dati BIGINT.

Considerazioni

Quando si prevede di utilizzare un tipo di dati diverso per una colonna, considerare i seguenti punti:

  • Nella maggior parte dei casi, non è possibile modificare direttamente il tipo di dati di una colonna. Al contrario, si ricrea la tabella Athena e si definisce la colonna con il nuovo tipo di dati.

  • Solo alcuni tipi di dati possono essere letti come altri tipi di dati. Consulta la tabella in questa sezione per i tipi di dati che possono essere trattati in tal modo.

  • Per i dati in Parquet andORC, non è possibile utilizzare un tipo di dati diverso per una colonna se la tabella non è partizionata.

  • Per le tabelle partizionate in Parquet eORC, il tipo di colonna di una partizione può essere diverso dal tipo di colonna di un'altra partizione e Athena utilizzerà CAST il tipo desiderato, se possibile. Per informazioni, consultare Evita gli errori di mancata corrispondenza dello schema per le tabelle con partizioni.

  • Per le tabelle create utilizzando l'LazySimpleSerDeunico, è possibile utilizzare l'ALTER TABLE REPLACE COLUMNSistruzione per sostituire le colonne esistenti con un tipo di dati diverso, ma tutte le colonne esistenti che si desidera conservare devono essere ridefinite nell'istruzione, altrimenti verranno eliminate. Per ulteriori informazioni, consulta ALTER TABLE REPLACE COLUMNS.

  • Solo per le tabelle Apache Iceberg, puoi utilizzare l'istruzione ALTER TABLE CHANGE COLUMN per modificare il tipo di dati di una colonna. ALTER TABLE REPLACE COLUMNS non è supportato per le tabelle Iceberg. Per ulteriori informazioni, consulta Evolve lo schema della tabella Iceberg.

Importante

Consigliamo vivamente di testare e verificare le query prima di modificare il tipo di dati. Se Athena non è in grado di utilizzare il tipo di dati di destinazione, la query CREATE TABLE potrebbe avere esito negativo.

Utilizza tipi di dati compatibili

Quando possibile, utilizza tipi di dati compatibili. La tabella seguente elenca i tipi di dati che possono essere trattati come altri tipi di dati:

Tipo di dati originale Tipi di dati di destinazione disponibili
STRING BYTE, TINYINT, SMALLINT, INT, BIGINT
BYTE TINYINT, SMALLINT, INT, BIGINT
TINYINT SMALLINT, INT, BIGINT
SMALLINT INT, BIGINT
INT BIGINT
FLOAT DOUBLE

L'esempio seguente mostra l'utilizzo dell'istruzione CREATE TABLE per la tabella orders_json originale per creare una nuova tabella denominata orders_json_bigint. La nuova tabella utilizza BIGINT anziché INT come tipo di dati per la colonna `o_shippriority`.

CREATE EXTERNAL TABLE orders_json_bigint ( `o_orderkey` int, `o_custkey` int, `o_orderstatus` string, `o_totalprice` double, `o_orderdate` string, `o_orderpriority` string, `o_clerk` string, `o_shippriority` BIGINT ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 's3://amzn-s3-demo-bucket/orders_json';

La seguente query viene eseguita correttamente, in modo analogo alla query SELECT originale, prima della modifica del tipo di dati:

Select * from orders_json LIMIT 10;