

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Modification du type de données d’une colonne
<a name="updates-changing-column-type"></a>

Vous souhaiterez peut-être utiliser un autre type de colonne lorsque le type existant ne peut plus contenir la quantité d'informations requise. Par exemple, les valeurs d'une colonne ID peuvent dépasser la taille du type de données `INT` et nécessiter l'utilisation du type de données `BIGINT`.

## Considérations
<a name="updates-changing-column-type-considerations"></a>

Lorsque vous envisagez d'utiliser un autre type de données pour une colonne, tenez compte des points suivants : 
+ Dans la plupart des cas, vous ne pouvez pas modifier directement le type de données d'une colonne. À la place, vous recréez la table Athena et définissez la colonne avec le nouveau type de données. 
+ Seuls certains types de données peuvent être lus dans d'autres types de données. Consultez la table de cette section pour les types de données qui peuvent traités de cette manière.
+ Pour les données au format Parquet et ORC, vous ne pouvez pas utiliser un autre type de données pour une colonne si la table n'est pas partitionnée. 
+ Pour les tables partitionnées dans Parquet et ORC, le type de colonne d'une partition peut être différent de celui d'une autre partition, et Athena convertira (`CAST`) au type souhaité, si possible. Pour plus d'informations, consultez [Éviter les erreurs de non-correspondance de schéma pour les tables avec des partitions](updates-and-partitions.md#partitions-dealing-with-schema-mismatch-errors).
+ Pour les tables créées à l'aide de l'instruction [LazySimpleSerDe](lazy-simple-serde.md)only, il est possible d'utiliser l'`ALTER TABLE REPLACE COLUMNS`instruction pour remplacer les colonnes existantes par un type de données différent, mais toutes les colonnes existantes que vous souhaitez conserver doivent également être redéfinies dans l'instruction, sinon elles seront supprimées. Pour de plus amples informations, veuillez consulter [ALTER TABLE REPLACE COLUMNS](alter-table-replace-columns.md).
+ Pour les tables Apache Iceberg uniquement, vous pouvez utiliser l'instruction [ALTER TABLE CHANGE COLUMN](querying-iceberg-alter-table-change-column.md)pour modifier le type de données d'une colonne. `ALTER TABLE REPLACE COLUMNS` n'est pas pris en charge pour les tables Iceberg. Pour de plus amples informations, veuillez consulter [Modification du schéma de table Iceberg](querying-iceberg-evolving-table-schema.md).

**Important**  
Nous vous recommandons vivement de tester et de vérifier vos requêtes avant d'effectuer des conversions de type de données. Si Athena ne peut pas utiliser le type de données cible, la requête `CREATE TABLE` risque d'échouer. 

## Utilisation de types de données compatibles
<a name="updates-changing-column-type-use-compatible-data-types"></a>

Dans la mesure du possible, utilisez des types de données compatibles. Le tableau suivant répertorie les types de données dont le traitement est semblable à celui d’autres types de données :


| Type de données d'origine | Types de données cibles disponibles | 
| --- | --- | 
| STRING | BYTE, TINYINT, SMALLINT, INT, BIGINT | 
| BYTE | TINYINT, SMALLINT, INT, BIGINT | 
| TINYINT | SMALLINT, INT, BIGINT | 
| SMALLINT | INT, BIGINT | 
| INT | BIGINT | 
| FLOAT | DOUBLE | 

L'exemple suivant utilise l'instruction `CREATE TABLE` de la table `orders_json` d'origine pour créer une nouvelle table appelée `orders_json_bigint`. La nouvelle table utilise `BIGINT` plutôt que `INT` comme type de données pour la colonne ``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 requête suivante s'exécute correctement, comme dans la requête `SELECT` d'origine, avant le changement du type de données :

```
Select * from orders_json 
LIMIT 10;
```