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.
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
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 dans Parquet etORC, vous ne pouvez pas utiliser un type de données différent pour une colonne si la table n'est pas partitionnée.
-
Pour les tables partitionnées dans Parquet andORC, le type de colonne d'une partition peut être différent du type de colonne d'une autre partition, et Athena
CAST
choisira le type souhaité, si possible. Pour plus d’informations, veuillez consulter Évitez les erreurs de non-concordance des schémas pour les tables comportant des partitions. -
Pour les tables créées à l'aide de l'instruction LazySimpleSerDeonly, 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. -
Pour les tables Apache Iceberg uniquement, vous pouvez utiliser l'instruction ALTER TABLE CHANGE COLUMNpour 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 Schéma de table Evolve Iceberg.
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.
Utiliser des types de données compatibles
Dans la mesure du possible, utilisez des types de données compatibles. Le tableau suivant répertorie les types de données qui peuvent être traités comme 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;