Tous les produits
Search
Centre de documentation

MaxCompute:Opérations sur les colonnes

Dernière mise à jour :Aug 21, 2026

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

Ajouter des colonnes ou des commentaires

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 :

Supprimer des colonnes

Supprime des colonnes d'une table partitionnée ou non partitionnée existante.

Modifier les types de données des colonnes

Modifie le type de données d'une colonne existante.

Modifier l'ordre des colonnes

Ajuste l'ordre d'une colonne spécifiée dans une table.

Renommer une colonne

Modifie le nom d'une colonne dans une table partitionnée ou non partitionnée existante.

Modifier le commentaire d'une colonne

Modifie le commentaire d'une colonne dans une table partitionnée ou non partitionnée existante.

Modifier le nom et le commentaire d'une colonne

Modifie simultanément le nom et le commentaire d'une colonne dans une table partitionnée ou non partitionnée existante.

Modifier la propriété NOT NULL d'une colonne

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

    Remarque

    Y 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.

    Data type conversion table

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é Nullable et déterminer si la colonne autorise les valeurs NULL :

    • Si Nullable est true, les valeurs NULL sont autorisées.

    • Si Nullable est false, 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 :