MaxCompute permet de modifier les colonnes des tables existantes. Vous pouvez ajouter ou supprimer des colonnes et changer leurs types de données pour répondre aux exigences métier.
Commandes
Le tableau suivant décrit les commandes SQL MaxCompute dédiées aux opérations sur les colonnes.
Actions | Description | Rôle | Plateforme |
Ajoute des colonnes ou des commentaires à une table partitionnée ou non partitionnée existante. | Utilisateurs disposant de l'autorisation Alter sur la table | Exécutez ces commandes sur les plateformes suivantes : | |
Supprime des colonnes d'une table partitionnée ou non partitionnée existante. | |||
Modifie le type de données d'une colonne existante. | |||
Ajuste l'ordre d'une colonne spécifiée dans une table. | |||
Modifie le nom d'une colonne dans une table partitionnée ou non partitionnée existante. | |||
Modifie le commentaire d'une colonne dans une table partitionnée ou non partitionnée existante. | |||
Modifie simultanément le nom et le commentaire d'une colonne dans une table partitionnée ou non partitionnée existante. | |||
Modifie la propriété NOT NULL d'une colonne qui n'est pas une clé de partition. |
Remarques d'utilisation
L'évolution du schéma implique des opérations telles que l'ajout de colonnes avec des types de données complexes, la suppression de colonnes, le réordonnancement des colonnes et la modification de leurs types de données. Lorsque vous réorganisez les colonnes, ajoutez puis réorganisez des colonnes, ou supprimez des colonnes, le comportement en lecture et en écriture de la table est affecté et les limitations suivantes s'appliquent :
Si le type de tâche est MapReduce 1.0, les tâches Graph ne peuvent ni lire ni écrire des données dans la table modifiée.
-
Pour les tâches CUPID, seules les versions Spark suivantes peuvent lire les données de la table. L'écriture de données dans la table n'est pas possible.
Spark-2.3.0-odps0.34.0
Spark-3.1.1-odps0.34.0
Les tâches PAI peuvent lire les données de la table, mais ne peuvent pas y écrire.
Pour les tâches Hologres, si vous utilisez une version de Hologres antérieure à la 1,3, vous ne pouvez ni lire ni écrire dans la table modifiée lorsque vous la référencez en tant que table externe.
Après une évolution du schéma, la commande CLONE TABLE n'est pas prise en charge.
Streaming Tunnel signale une erreur si une évolution du schéma a eu lieu.
Ajouter des colonnes ou des commentaires
Vous pouvez ajouter des colonnes ou des commentaires à une table partitionnée ou non partitionnée existante. Pour plus d'informations sur les contraintes, consultez la section Remarques d'utilisation. MaxCompute prend en charge l'ajout de colonnes de type STRUCT, telles que STRUCT<x: STRING, y: BIGINT> et MAP<STRING, STRUCT<x: DOUBLE, y: DOUBLE>>.
-
Prérequis
Exécutez la commande
setproject odps.schema.evolution.enable=true;pour activer l'évolution du schéma.Autorisations : il s'agit d'une propriété au niveau du projet. Pour exécuter cette commande, vous devez être le propriétaire du projet ou disposer du rôle Super_Administrator ou Admin au niveau du projet. Pour plus d'informations, consultez la rubrique Attribuer un rôle de gestion intégré à un utilisateur.
Délai d'effet : la modification prend effet en environ 10 minutes.
-
Syntaxe
ALTER TABLE <table_name> ADD COLUMNS [IF NOT EXISTS] (<col_name1> <type1> COMMENT ['<col_comment>'] [, <col_name2> <type2> COMMENT '<col_comment>'...] ); -
Paramètres
Paramètre
Obligatoire
Description
table_name
Oui
Nom de la table à modifier. Les nouvelles colonnes sont ajoutées à la fin de la table.
col_name
Oui
Nom de la nouvelle colonne.
type
Oui
Type de données de la nouvelle colonne.
col_comment
Non
Commentaire associé à la nouvelle colonne.
-
Exemples
-
Exemple 1 : ajoutez deux colonnes à la table sale_detail.
ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(customer_name STRING, education BIGINT); -
Exemple 2 : ajoutez deux colonnes avec des commentaires à la table sale_detail.
ALTER TABLE sale_detail ADD COLUMNS (customer_name STRING COMMENT 'Customer', education BIGINT COMMENT 'Education' ); -
Exemple 3 : ajoutez une colonne de type de données complexe à la table sale_detail.
ALTER TABLE sale_detail ADD COLUMNS (region_info struct<province:string, area:string>); -
Exemple 4 : si vous utilisez IF NOT EXISTS pour ajouter une colonne qui existe déjà, la commande renvoie un message de succès sans ajouter la colonne une seconde fois.
-- The statement is successful, but the ID column is not repeatedly added. ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(id bigint); -
Exemple 5 : ajoutez une colonne à une table Delta.
CREATE TABLE delta_table_test (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) TBLPROPERTIES ("transactional"="true"); ALTER TABLE delta_table_test ADD COLUMNS (val2 bigint);
-
Supprimer des colonnes
Vous pouvez supprimer une ou plusieurs colonnes d'une table partitionnée ou non partitionnée existante. Pour plus d'informations sur les contraintes, consultez la section Remarques d'utilisation.
-
Prérequis
Exécutez la commande
setproject odps.schema.evolution.enable=true;pour activer l'évolution du schéma.Autorisations : il s'agit d'une propriété au niveau du projet. Pour exécuter cette commande, vous devez être le propriétaire du projet ou disposer du rôle Super_Administrator ou Admin au niveau du projet. Pour plus d'informations, consultez la rubrique Attribuer un rôle de gestion intégré à un utilisateur.
Délai d'effet : la modification prend effet en environ 10 minutes.
-
Syntaxe
-- Delete a single column. ALTER TABLE <table_name> DROP COLUMN <col_name>; -- Delete multiple columns. ALTER TABLE <table_name> DROP COLUMNS <col_name1>[, <col_name2>...]; -
Paramètres
table_name : obligatoire. Nom de la table à modifier.
col_name : obligatoire. Nom de la colonne à supprimer.
-
Exemples
-- Example 1: Delete the customer_id column from the sale_detail table. ALTER TABLE sale_detail DROP COLUMNS customer_id; -- Example 2: Delete the shop_name and total_price columns from the sale_detail table. ALTER TABLE sale_detail DROP COLUMNS shop_name, total_price;
Modifier les types de données des colonnes
Vous pouvez modifier le type de données d'une colonne existante. Pour plus d'informations sur les contraintes, consultez la section Remarques d'utilisation.
-
Prérequis
Exécutez la commande
setproject odps.schema.evolution.enable=true;pour activer l'évolution du schéma.Autorisations : il s'agit d'une propriété au niveau du projet. Pour exécuter cette commande, vous devez être le propriétaire du projet ou disposer du rôle Super_Administrator ou Admin au niveau du projet. Pour plus d'informations, consultez la rubrique Attribuer un rôle de gestion intégré à un utilisateur.
Délai d'effet : la modification prend effet en environ 10 minutes.
-
Syntaxe
ALTER TABLE <table_name> CHANGE [COLUMN] <old_column_name> <new_column_name> <new_data_type>; -
Paramètres
Paramètre
Obligatoire
Description
table_name
Oui
Nom de la table contenant la colonne.
old_column_name
Oui
Nom de la colonne à modifier.
new_column_name
Oui
Nouveau nom de la colonne.
old_column_name peut être identique à new_column_name, ce qui indique que le nom de la colonne n'est pas modifié. Toutefois, new_column_name ne peut pas être identique au nom d'une autre colonne que old_column_name.
new_data_type
Oui
Nouveau type de données de la colonne.
-
Exemple
-- Change the data type of the id field in the sale_detail table from BIGINT to STRING. ALTER TABLE sale_detail CHANGE COLUMN id id STRING; -
Conversions de types de données prises en charge
RemarqueY indique que la conversion est prise en charge. N indique que la conversion n'est pas prise en charge. - indique que la conversion ne s'applique pas. Y() indique que la conversion est prise en charge si la condition entre parenthèses est remplie.

Modifier l'ordre des colonnes
Vous pouvez modifier l'ordre des colonnes d'une table partitionnée ou non partitionnée existante. Pour plus d'informations sur les contraintes, consultez la section Remarques d'utilisation.
-
Prérequis
Exécutez la commande
setproject odps.schema.evolution.enable=true;pour activer l'évolution du schéma.Autorisations : il s'agit d'une propriété au niveau du projet. Pour exécuter cette commande, vous devez être le propriétaire du projet ou disposer du rôle Super_Administrator ou Admin au niveau du projet. Pour plus d'informations, consultez la rubrique Attribuer un rôle de gestion intégré à un utilisateur.
Délai d'effet : la modification prend effet en environ 10 minutes.
-
Syntaxe
ALTER TABLE <table_name> CHANGE <old_column_name> <new_column_name> <column_type> AFTER <column_name>; -
Paramètres
Paramètre
Obligatoire
Description
table_name
Oui
Nom de la table à modifier.
old_column_name
Oui
Nom de la colonne à déplacer.
new_col_name
Oui
Nouveau nom de la colonne.
new_col_name peut être identique à old_column_name, ce qui indique que le nom de la colonne n'est pas modifié. Toutefois, new_col_name ne peut pas être identique à un autre nom de colonne que old_column_name.
column_type
Oui
Type de données d'origine de la colonne. Il ne peut pas être modifié.
column_name
Oui
Déplace la colonne à réorganiser après column_name.
-
Exemples
-- Change the name of the customer column in the sale_detail table to customer_id and move it after the total_price column. ALTER TABLE sale_detail CHANGE customer customer_id STRING AFTER total_price; -- Move the customer_id column in the sale_detail table after the total_price column without changing the column name. ALTER TABLE sale_detail CHANGE customer_id customer_id STRING AFTER total_price;
Renommer une colonne
Vous pouvez modifier le nom d'une colonne dans une table partitionnée ou non partitionnée existante.
-
Syntaxe
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> RENAME TO <new_col_name>; -
Paramètres
Paramètre
Obligatoire
Description
table_name
Oui
Nom de la table à modifier.
old_col_name
Oui
Nom actuel de la colonne. La colonne doit exister.
new_col_name
Oui
Nouveau nom de la colonne. Le nom de la colonne doit être unique au sein de la table.
-
Exemple
-- Rename the customer_name column in the sale_detail table to customer. ALTER TABLE sale_detail CHANGE COLUMN customer_name RENAME TO customer;
Modifier le commentaire d'une colonne
Vous pouvez modifier le commentaire d'une colonne dans une table partitionnée ou non partitionnée existante.
-
Syntaxe
ALTER TABLE <table_name> CHANGE COLUMN <col_name> COMMENT '<col_comment>'; -
Paramètres
Paramètre
Obligatoire
Description
table_name
Oui
Nom de la table à modifier.
col_name
Oui
Nom de la colonne dont vous souhaitez modifier le commentaire. La colonne doit exister.
col_comment
Oui
Nouveau commentaire, qui doit être une chaîne valide. La longueur maximale est de 1 024 octets.
-
Exemple
-- Change the comment of the customer column in the sale_detail0113 table. ALTER TABLE sale_detail0113 CHANGE COLUMN customer COMMENT 'customer';
Modifier le nom et le commentaire d'une colonne
Vous pouvez modifier le nom et le commentaire d'une colonne dans une table partitionnée ou non partitionnée.
-
Syntaxe
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> <new_col_name> <column_type> COMMENT '<col_comment>'; -
Paramètres
Paramètre
Obligatoire
Description
table_name
Oui
Nom de la table à modifier.
old_col_name
Oui
Nom actuel de la colonne à modifier. La colonne doit exister.
new_col_name
Oui
Nouveau nom de la colonne. Le nom de la colonne doit être unique au sein de la table.
column_type
Oui
Type de données de la colonne.
col_comment
Facultatif
Nouveau commentaire. La longueur maximale est de 1 024 octets.
-
Exemple
-- Change the name of the customer column in the sale_detail table to customer_newname and change its comment to 'customer'. ALTER TABLE sale_detail CHANGE COLUMN customer customer_newname STRING COMMENT 'customer';
Modifier la propriété NOT NULL d'une colonne
Vous pouvez modifier la propriété NOT NULL d'une colonne qui n'est pas une clé de partition. Par exemple, si une colonne qui n'est pas une clé de partition est définie pour ne pas autoriser les valeurs NULL, vous pouvez utiliser cette commande pour la modifier afin qu'elle accepte les valeurs NULL.
Cette opération est irréversible : vous ne pouvez pas revenir en arrière et interdire à nouveau les valeurs NULL après les avoir autorisées.
-
Exécutez la commande
DESC EXTENDED table_name;pour afficher la propriétéNullableet déterminer si la colonne autorise les valeurs NULL :Si
Nullableesttrue, les valeurs NULL sont autorisées.Si
Nullableestfalse, les valeurs NULL ne sont pas autorisées.
-
Syntaxe
ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> NULL; -
Paramètres
Paramètre
Obligatoire
Description
table_name
Oui
Nom de la table à modifier.
old_col_name
Oui
Nom de la colonne qui n'est pas une clé de partition à modifier. La colonne doit exister.
-
Exemple
-- Create a partitioned table in which the id column cannot be NULL. CREATE TABLE null_test(id INT NOT NULL, name STRING) PARTITIONED BY (ds string); -- View table properties. DESC EXTENDED null_test; -- The following result is returned: +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | id | int | | | false | NULL | | | name | string | | | true | NULL | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | ds | string | | +------------------------------------------------------------------------------------+ -- Allow the id column to be NULL. ALTER TABLE null_test CHANGE COLUMN id NULL; -- View table properties. DESC EXTENDED null_test; -- The following result is returned: +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | id | int | | | true | NULL | | | name | string | | | true | NULL | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | ds | string | | +------------------------------------------------------------------------------------+
Références
Pour plus d'informations sur les opérations relatives aux tables, consultez les rubriques suivantes :