Cambio del tipo de datos de una columna - Amazon Athena

Cambio del tipo de datos de una columna

Es posible que desee utilizar un tipo de columna diferente cuando el tipo existente ya no pueda contener la cantidad de información requerida. Por ejemplo, los valores de una columna de ID pueden superar el tamaño del tipo de datos INT y requerir el uso del tipo de datos BIGINT.

Consideraciones

Cuando tenga previsto utilizar un tipo de datos diferente para una columna, tenga en cuenta los siguientes puntos:

  • En la mayoría de los casos, no puede cambiar el tipo de datos de una columna de forma directa. En su lugar, se vuelve a crear la tabla de Athena y se define la columna con el tipo de datos nuevo.

  • Solo es posible leer determinados tipos de datos como otros tipos de datos. Consulte en la tabla de esta sección los tipos de datos que se pueden gestionar de esa manera.

  • En el caso de los datos en formato Parquet y ORC, no es posible utilizar un tipo de datos diferente para una columna si la tabla no se encuentre particionada.

  • Para las tablas particionadas con formato Parquet y ORC, el tipo de las columnas de una partición puede ser diferente al que tienen en otra y Athena aplicará CAST para asignar el deseado, si es posible. Para obtener más información, consulte Evitar los errores de discrepancia de esquemas en las tablas con particiones.

  • En el caso de las tablas que solo se crearon con LazySimpleSerDe, es posible utilizar la instrucción ALTER TABLE REPLACE COLUMNS para sustituir las columnas existentes por un tipo de datos diferente, pero todas las columnas existentes que desee conservar también deben redefinirse en la instrucción o, de lo contrario, se eliminarán. Para obtener más información, consulte ALTER TABLE REPLACE COLUMNS.

  • Solo en el caso de las tablas de Apache Iceberg, puede utilizar la instrucción ALTER TABLE CHANGE COLUMN para cambiar el tipo de datos de una columna. ALTER TABLE REPLACE COLUMNS no es compatible con las tablas de Iceberg. Para obtener más información, consulte Evolución del esquema de tabla de Iceberg.

importante

Recomendamos encarecidamente que compruebe y verifique las consultas antes de realizar traducciones de tipos de datos. Si Athena no puede utilizar el tipo de datos de destino, es posible que falle la consulta CREATE TABLE.

Uso de tipos de datos compatibles

Siempre que sea posible, utilice tipos de datos compatibles. En la siguiente tabla se enumeran los tipos de datos que se pueden gestionar como otros tipos de datos:

Tipo de datos original Tipos de datos de destino disponibles
STRING BYTE, TINYINT, SMALLINT, INT, BIGINT
BYTE TINYINT, SMALLINT, INT, BIGINT
TINYINT SMALLINT, INT, BIGINT
SMALLINT INT, BIGINT
INT BIGINT
FLOAT DOUBLE

En el siguiente ejemplo, se utiliza la instrucción CREATE TABLE de la tabla orders_json original para crear una tabla nueva denominada orders_json_bigint. La tabla nueva utiliza BIGINT en lugar de INT como tipo de datos para la columna `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 consulta siguiente se ejecuta correctamente, de forma similar a la consulta SELECT original, antes de cambiar el tipo de datos:

Select * from orders_json LIMIT 10;