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 COLUMNS
istruzione 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;