Alteração do tipo de dados de uma coluna - Amazon Athena

Alteração do tipo de dados de uma coluna

Convém usar outro tipo de coluna quando o tipo existente não puder mais conter a quantidade de informações necessárias. Por exemplo, os valores de uma coluna de ID podem exceder o tamanho do tipo de dados INT e exigir o uso do tipo de dados BIGINT.

Considerações

Ao planejar usar um tipo de dados diferente para uma coluna, leve em consideração os seguintes pontos:

  • Na maioria dos casos, você não pode alterar diretamente o tipo de dados de uma coluna. Em vez disso, você recria a tabela do Athena e define a coluna com o novo tipo de dados.

  • Apenas certos tipos de dados podem ser lidos como outros tipos de dados. Consulte a tabela nesta seção para ver os tipos de dados que podem ser tratados dessa forma.

  • Para dados em formato Parquet e ORC, você não pode usar um tipo de dados diferente para uma coluna se a tabela não estiver particionada.

  • Para tabelas particionadas no Parquet e no ORC, o tipo de coluna de uma partição pode ser diferente do tipo de coluna de outra partição, e o Athena aplicará CAST ao tipo desejado, se possível. Para ter mais informações, consulte Evitar erros de não correspondência de esquema para tabelas com partições.

  • Para tabelas criadas usando o LazySimpleSerDe apenas, é possível usar a declaração ALTER TABLE REPLACE COLUMNS para substituir colunas existentes por um tipo de dados diferente, mas todas as colunas existentes que você deseja manter também devem ser redefinidas na declaração, caso contrário, elas serão excluídas. Para ter mais informações, consulte ALTER TABLE REPLACE COLUMNS.

  • Para tabelas Apache Iceberg apenas, você pode usar a declaração ALTER TABLE CHANGE COLUMN para alterar o tipo de dados de uma coluna. A declaração ALTER TABLE REPLACE COLUMNS não é suportada para tabelas Iceberg. Para ter mais informações, consulte Evoluir o esquema de tabelas do Iceberg.

Importante

É altamente recomendável testar e verificar suas consultas antes de executar as conversões de tipo de dados. Se o Athena não puder usar o tipo de dados de destino, a consulta CREATE TABLE poderá falhar.

Usar tipos de dados compatíveis

Sempre que possível, use tipos de dados compatíveis. A tabela a seguir lista os tipos de dados que podem ser tratados como outros tipos de dados:

Tipos de dados originais Tipos de dados de destino disponíveis
STRING BYTE, TINYINT, SMALLINT, INT, BIGINT
BYTE TINYINT, SMALLINT, INT, BIGINT
TINYINT SMALLINT, INT, BIGINT
SMALLINT INT, BIGINT
INT BIGINT
FLOAT DOUBLE

O exemplo a seguir usa a instrução CREATE TABLE da tabela orders_json original para criar uma nova tabela chamada orders_json_bigint. A nova tabela usa BIGINT em vez de INT como tipo de dados para a coluna `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';

A seguinte consulta é executada com êxito, semelhante à consulta SELECT original, antes que o tipo de dados seja alterado:

Select * from orders_json LIMIT 10;