

# Cambio del tipo de datos de una columna
<a name="updates-changing-column-type"></a>

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
<a name="updates-changing-column-type-considerations"></a>

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](updates-and-partitions.md#partitions-dealing-with-schema-mismatch-errors).
+ En el caso de las tablas que solo se crearon con [LazySimpleSerDe](lazy-simple-serde.md), 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](alter-table-replace-columns.md).
+ Solo en el caso de las tablas de Apache Iceberg, puede utilizar la instrucción [ALTER TABLE CHANGE COLUMN](querying-iceberg-alter-table-change-column.md) 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](querying-iceberg-evolving-table-schema.md).

**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
<a name="updates-changing-column-type-use-compatible-data-types"></a>

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;
```