Tous les produits
Search
Centre de documentation

MaxCompute:ALTER TABLE

Dernière mise à jour :Aug 10, 2026

Modifie la structure, les propriétés ou les partitions d'une table existante.

Notes d'utilisation

Les opérations d'évolution de schéma (ajout de colonnes de type complexe, suppression de colonnes, réorganisation des colonnes ou modification des types de données) altèrent le comportement en lecture/écriture de la table. Si vous réorganisez, ajoutez et réorganisez, ou supprimez une colonne, les limites suivantes s'appliquent :

  • Si le type de tâche est MapReduce 1.0, les tâches Graph ne peuvent ni lire ni écrire dans la table modifiée.

  • Pour les tâches CUPID, seules les versions Spark suivantes peuvent lire la table. Elles ne peuvent pas y écrire :

    • Spark-2.3.0-odps0.34.0

    • Spark-3.1.1-odps0.34.0

  • Les tâches PAI peuvent lire 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 lorsqu'elle est référencée comme table externe.

  • En cas d'évolution de schéma, l'instruction CLONE TABLE n'est pas prise en charge.

  • En cas d'évolution de schéma, une erreur est signalée lors de l'utilisation de Streaming Tunnel.

Modifier le propriétaire de la table

ALTER TABLE <table_name> changeowner TO <new_owner>;

Paramètres :

Paramètre

Obligatoire

Description

table_name

Oui

Nom de la table dont vous souhaitez modifier le propriétaire.

new_owner

Oui

Nom du compte du nouveau propriétaire.

Exemple :

-- Transfer ownership of the test1 table to ALIYUN$xxx@aliyun.com.
ALTER TABLE test1 changeowner TO 'ALIYUN$xxx@aliyun.com';

Modifier le commentaire de la table

ALTER TABLE <table_name> SET COMMENT '<new_comment>';

Paramètres :

Paramètre

Obligatoire

Description

table_name

Oui

Nom de la table dont vous souhaitez modifier le commentaire.

new_comment

Oui

Nouveau texte du commentaire.

Exemple :

ALTER TABLE sale_detail SET COMMENT 'new comments for table sale_detail';

Exécutez DESC <table_name> pour vérifier le commentaire mis à jour.

Mettre à jour le LastModifiedTime d'une table

L'opération touch définit LastModifiedTime à l'heure actuelle, ce qui redémarre le calcul du cycle de vie de la table.

ALTER TABLE <table_name> touch;

Exemple :

ALTER TABLE sale_detail touch;

Modifier les propriétés de cluster d'une table

Ajoute ou supprime des propriétés de cluster pour une table partitionnée.

Important

Les propriétés de cluster ne peuvent être modifiées que pour les tables partitionnées. Les tables non partitionnées ne peuvent pas modifier leurs propriétés de cluster après leur création. La modification affecte uniquement les nouvelles partitions (y compris celles créées par INSERT OVERWRITE). Les anciennes partitions conservent leurs propriétés de cluster d'origine. Étant donné que cette instruction n'affecte que les nouvelles partitions, vous ne pouvez pas spécifier de partition dans cette instruction.

Syntaxe :

-- Add hash cluster properties.
ALTER TABLE <table_name> [clustered BY (<col_name> [, <col_name>, ...]) [sorted BY (<col_name> [ASC | DESC]
  [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> buckets];

-- Remove hash or range cluster properties from a table.
ALTER TABLE <table_name> NOT clustered;

-- Add range cluster properties (bucket count is optional; the system auto-determines the optimal count).
ALTER TABLE <table_name> [RANGE clustered BY (<col_name> [, <col_name>, ...]) [sorted BY (<col_name> [ASC | DESC]
  [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> buckets];

-- Remove range cluster properties from a partition or a table.
ALTER TABLE <table_name> NOT clustered;
ALTER TABLE <table_name> PARTITION [<pt_spec>] NOT clustered;

Les paramètres sont identiques à ceux de l'instruction CREATE TABLE.

Exemple :

-- Create a partitioned table.
CREATE TABLE IF NOT EXISTS sale_detail(
  shop_name     STRING,
  customer_id   STRING,
  total_price   DOUBLE)
PARTITIONED BY (sale_date STRING, region STRING);

-- Add hash cluster properties. New partitions are stored with these settings.
ALTER TABLE sale_detail clustered BY (customer_id) sorted BY (customer_id) INTO 10 buckets;

Pour plus de détails sur les types de clustering, consultez les rubriques Hash Clustering et Range clustering.

Modifier les propriétés d'une PK Delta Table

-- Update the bucket count for a partitioned PK Delta Table.
ALTER TABLE <table_name> SET tblproperties("write.bucket.num"="64");

-- Update the bucket count for a non-partitioned PK Delta Table.-- Existing data is redistributed based on the new bucket count.
ALTER TABLE <table_name> REWRITE tblproperties("write.bucket.num"="128");

-- Update the retain property: the time range (in hours) for Time Travel queries.
ALTER TABLE <table_name> SET tblproperties("acid.data.retain.hours"="60");

Renommer une table

Renomme une table sans modifier ses données.

ALTER TABLE <table_name> RENAME TO <new_table_name>;

Paramètres :

Paramètre

Obligatoire

Description

table_name

Oui

Table à renommer.

new_table_name

Oui

Nouveau nom. Une erreur est renvoyée si une table portant ce nom existe déjà.

Exemple :

ALTER TABLE sale_detail RENAME TO sale_detail_rename;

Modifier la période de cycle de vie

Modifie la période de cycle de vie d'une table partitionnée ou non partitionnée existante.

ALTER TABLE <table_name> SET LIFECYCLE <days>;

Paramètres :

Paramètre

Obligatoire

Description

table_name

Oui

Nom de la table dont vous souhaitez modifier la période de cycle de vie.

days

Oui

Nouvelle période de cycle de vie, en jours. Doit être un entier positif.

Exemple :

-- Modify the lifecycle of sale_detail_rename to 50 days.
ALTER TABLE sale_detail_rename SET LIFECYCLE 50;

Activer ou désactiver le cycle de vie

Active ou désactive le cycle de vie pour une table ou une partition spécifique.

ALTER TABLE <table_name> PARTITION [<pt_spec>] {enable|disable} LIFECYCLE;

Paramètres :

Paramètre

Obligatoire

Description

table_name

Oui

Nom de la table.

pt_spec

Non

Partition cible. Format : partition_col1=val1, partition_col2=val2, .... Pour les tables à partitions multiniveaux, spécifiez toutes les valeurs de partition.

enable

Réapplique la récupération du cycle de vie à la table et à ses partitions en utilisant leurs configurations de cycle de vie actuelles. Mettez à jour les configurations de cycle de vie avant l'activation si nécessaire pour éviter une récupération involontaire des données.

disable

Empêche la table et toutes ses partitions d'être récupérées. Cette option est prioritaire sur tout paramètre enable au niveau de la partition. Les configurations de cycle de vie et les indicateurs au niveau de la partition sont conservés et peuvent toujours être modifiés lorsque le cycle de vie est désactivé.

Exemples :

-- Example 1: Disable the lifecycle for the sale_detail_rename table.
ALTER TABLE sale_detail_rename disable LIFECYCLE;

-- Example 2: Add test partitions.
ALTER TABLE sale_detail_rename ADD IF NOT EXISTSPARTITION (sale_date='201910', region='shanghai') PARTITION (sale_date='201911', region='shanghai')
  PARTITION (sale_date='201912', region='shanghai') PARTITION (sale_date='202001', region='shanghai')
  PARTITION (sale_date='202002', region='shanghai') PARTITION (sale_date='201910', region='beijing')
  PARTITION (sale_date='201911', region='beijing') PARTITION (sale_date='201912', region='beijing')
  PARTITION (sale_date='202001', region='beijing') PARTITION (sale_date='202002', region='beijing');

-- Disable the lifecycle for a single partition.
ALTER TABLE sale_detail_rename PARTITION (sale_date='201912', region='shanghai') disable LIFECYCLE;

Ajouter une partition

Ajoutez une ou plusieurs partitions à une table partitionnée existante.

Notes d'utilisation

  • Pour une table à partitions multiniveaux, spécifiez les valeurs de toutes les colonnes de clé de partition lors de l'ajout d'une partition.

  • Cette opération ajoute uniquement des valeurs de partition. Elle n'ajoute pas de colonnes de clé de partition.

Syntaxe

ALTER TABLE <table_name> ADD [IF NOT EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec> PARTITION <pt_spec>...];

Paramètres

Paramètre

Obligatoire

Description

table_name

Oui

Nom de la table partitionnée.

IF NOT EXISTS

Non

Supprime l'erreur si la partition existe déjà.

pt_spec

Oui

Partition à ajouter, au format (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col est une colonne de clé de partition et partition_col_value est sa valeur. Les noms des colonnes de clé de partition ne sont pas sensibles à la casse. Les valeurs de partition sont sensibles à la casse.

Exemples

Les exemples suivants utilisent une table partitionnée nommée sale_detail. Pour créer cette table, consultez la rubrique Créer et supprimer des tables.

CREATE TABLE IF NOT EXISTS sale_detail(
  shop_name     STRING,
  customer_id   STRING,
  total_price   DOUBLE)
PARTITIONED BY (sale_date STRING, region STRING);
  • Ajouter une seule partition

    Ajoutez une partition pour la région de Hangzhou en décembre 2025.

    ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='202512', region='hangzhou');
  • Ajouter plusieurs partitions à la fois

    Ajoutez deux partitions pour les régions de Pékin et Shanghai en décembre 2025.

    ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='202512', region='beijing') PARTITION (sale_date='202512', region='shanghai');
  • Spécification de partition incomplète (erreur)

    La spécification d'une partie seulement d'une clé de partition multiniveau renvoie une erreur. Les colonnes sale_date et region sont toutes deux requises.

    ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='20260111');
    
    -- Error returned:
    -- FAILED: ODPS-0130071:[1,58] Semantic analysis exception - provided partition spec does not match table partition spec
  • Ajouter une partition à une Delta Table

    -- Create a Delta Table.
    CREATE TABLE delta_table_test_par (
      pk BIGINT NOT NULL PRIMARY KEY,
      val BIGINT NOT NULL)
      PARTITIONED BY (dd STRING, hh STRING)
      TBLPROPERTIES ("transactional"="true");
    
    -- Add a partition.
    ALTER TABLE delta_table_test_par ADD PARTITION (dd='01', hh='01');
    
    CREATE TABLE delta_table_test_nonpar (
      pk BIGINT NOT NULL PRIMARY KEY,
      val BIGINT NOT NULL)
      TBLPROPERTIES ("transactional"="true");
  • Modifier les propriétés d'une PK Delta Table

    -- Update the number of buckets for a partitioned PK Delta Table.
    ALTER TABLE delta_table_test_par SET TBLPROPERTIES("write.bucket.num"="64");
    
    -- Update the number of buckets for a non-partitioned PK Delta Table.
    -- After the update, historical data is redistributed based on the new bucket count.
    ALTER TABLE delta_table_test_nonpar REWRITE TBLPROPERTIES("write.bucket.num"="128");
    
    -- Update the retain property. This property specifies the number of hours
    -- for querying historical data states via Time Travel.
    ALTER TABLE delta_table_test_par SET TBLPROPERTIES("acid.data.retain.hours"="60");

Après avoir ajouté des partitions, vérifiez-les avec SHOW PARTITIONS. Consultez la rubrique Lister toutes les partitions.

Modifier l'heure de mise à jour d'une partition

L'opération touch réinitialise le LastModifiedTime d'une partition à l'heure actuelle, déclenchant ainsi le recalcul du cycle de vie.

Notes d'utilisation

Pour une table à partitions multiniveaux, spécifiez les valeurs de toutes les colonnes de clé de partition.

Syntaxe

ALTER TABLE <table_name> TOUCH PARTITION (<pt_spec>);

Paramètres

Paramètre

Obligatoire

Description

table_name

Oui

Nom de la table partitionnée. Renvoie une erreur si la table n'existe pas.

pt_spec

Oui

Partition à mettre à jour, au format (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col est une colonne de clé de partition et partition_col_value est sa valeur. Renvoie une erreur si la partition n'existe pas.

Exemples

-- Update the LastModifiedTime of a specific partition in the sale_detail table.
ALTER TABLE sale_detail TOUCH PARTITION (sale_date='202512', region='shanghai');

Modifier une valeur de partition

RENAME modifie les valeurs d'une partition existante.

Notes d'utilisation

  • Cette opération modifie uniquement les valeurs de partition. Elle ne renomme pas les colonnes de clé de partition.

  • Pour une table à partitions multiniveaux, spécifiez les valeurs de toutes les colonnes de clé de partition.

Syntaxe

ALTER TABLE <table_name> PARTITION (<pt_spec>) RENAME TO PARTITION (<new_pt_spec>);

Paramètres

Paramètre

Obligatoire

Description

table_name

Oui

Nom de la table partitionnée.

pt_spec

Oui

Spécification de partition actuelle, au format (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col est une colonne de clé de partition et partition_col_value est sa valeur. Renvoie une erreur si la partition n'existe pas.

new_pt_spec

Oui

Nouvelle spécification de partition, au format (partition_col1 = new_partition_col_value1, partition_col2 = new_partition_col_value2, ...). partition_col est une colonne de clé de partition et new_partition_col_value est la nouvelle valeur.

Exemples

-- Rename a partition in the sale_detail table.
ALTER TABLE sale_detail PARTITION (sale_date = '201312', region = 'hangzhou') RENAME TO PARTITION (sale_date = '201310', region = 'beijing');

Fusionner des partitions

MERGE PARTITION combine plusieurs partitions en une partition de destination. Les données sont déplacées vers la destination et les partitions source sont supprimées.

Notes d'utilisation

  • Les tables externes ne sont pas prises en charge.

  • La fusion des partitions d'une table en cluster supprime le clustering de la partition résultante.

  • Un maximum de 4 000 partitions peut être fusionné à la fois.

Syntaxe

ALTER TABLE <table_name> MERGE [IF EXISTS] PARTITION (<predicate>) [, PARTITION(<predicate2>) ...] OVERWRITE PARTITION (<fullpartitionSpec>) [PURGE];

Paramètres

Paramètre

Obligatoire

Description

table_name

Oui

Nom de la table partitionnée.

IF EXISTS

Non

Supprime l'erreur si aucune partition ne correspond à la condition. Si aucune partition n'est éligible, aucune nouvelle partition n'est créée. Les opérations INSERT, RENAME ou DROP concurrentes pendant la fusion génèrent toujours une erreur.

predicate

Oui

Condition que les partitions source doivent respecter.

fullpartitionSpec

Oui

Spécification de la partition de destination.

PURGE

Non

Efface le répertoire de session. Par défaut, les journaux des trois derniers jours sont effacés. Pour plus d'informations, consultez la rubrique Purge.

Exemples

Fusionner des partitions par condition

-- View current partitions.
SHOW PARTITIONS sale_detail;

-- Sample result:
-- sale_date=202512/region=beijing
-- sale_date=202512/region=shanghai
-- sale_date=202602/region=beijing

-- Merge all partitions where sale_date='202512' into a single destination partition.
ALTER TABLE sale_detail MERGE PARTITION(sale_date='202512') OVERWRITE PARTITION(sale_date='202601', region='hangzhou');

-- View partitions after the merge.
SHOW PARTITIONS sale_detail;

-- Sample result:
-- sale_date=202601/region=hangzhou
-- sale_date=202602/region=beijing

Fusionner des partitions spécifiques avec PURGE

-- Merge two named partitions into a new destination partition.
ALTER TABLE sale_detail MERGE IF EXISTS
  PARTITION(sale_date='202601', region='hangzhou'),
  PARTITION(sale_date='202602', region='beijing')
  OVERWRITE PARTITION(sale_date='202603', region='shanghai') PURGE;

-- View partitions after the merge.
SHOW PARTITIONS sale_detail;

-- Sample result:
-- sale_date=202603/region=shanghai

Supprimer une partition

Supprimez une ou plusieurs partitions d'une table. Des partitions spécifiques peuvent être supprimées par nom, ou des conditions de filtre peuvent être utilisées pour une suppression en masse.

La suppression de partitions réduit l'utilisation du stockage. Pour automatiser la suppression des anciennes partitions, utilisez la fonctionnalité Cycle de vie.

Notes d'utilisation

  • Chaque clause de filtre de partition ne peut faire référence qu'à une seule colonne de clé de partition.

  • Les fonctions utilisées dans les expressions de filtre doivent être des fonctions scalaires intégrées.

Syntaxe

Supprimer des partitions spécifiques

-- Delete one partition.
ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <pt_spec>;

-- Delete multiple partitions.
ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <pt_spec>,PARTITION <pt_spec>[,PARTITION <pt_spec>....];

Supprimer des partitions par condition de filtre

ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <partition_filtercondition>;

Paramètres

Paramètre

Obligatoire

Description

table_name

Oui

Nom de la table partitionnée.

IF EXISTS

Non

Supprime l'erreur si la partition n'existe pas.

pt_spec

Oui

Partition à supprimer, au format (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col est une colonne de clé de partition et partition_col_value est sa valeur. Les noms des colonnes de clé de partition ne sont pas sensibles à la casse. Les valeurs de partition sont sensibles à la casse.

partition_filtercondition

Non

Requis lors de l'utilisation de la suppression basée sur un filtre. Consultez la section Syntaxe de la condition de filtre de partition.

Syntaxe de la condition de filtre de partition

Les opérations de suppression et de troncature prennent en charge la même syntaxe de filtre de partition :

partition_filtercondition
    : PARTITION (<partition_col> <relational_operators> <partition_col_value>)
    | PARTITION (scalar(<partition_col>) <relational_operators> <partition_col_value>)
    | PARTITION (<partition_filtercondition1> AND|OR <partition_filtercondition2>)
    | PARTITION (NOT <partition_filtercondition>)
    | PARTITION (<partition_filtercondition1>)[,PARTITION (<partition_filtercondition2>), ...]

Élément

Description

partition_col

Nom de la colonne de clé de partition.

relational_operators

Opérateur relationnel. Pour plus de détails, consultez la rubrique Opérateurs.

partition_col_value

Valeur ou expression régulière à comparer avec la valeur de la colonne de clé de partition. Le type de données doit correspondre au type de la colonne de clé de partition.

scalar()

Fonction scalaire intégrée. Traite la valeur de la colonne de clé de partition avant la comparaison.

NOT, AND, OR

Opérateurs logiques pris en charge au sein d'une seule clause de filtre.

Clauses séparées par des virgules

Plusieurs clauses de filtre séparées par des virgules sont combinées avec l'opérateur OR.

Exemples

Supprimer des partitions spécifiques

-- Delete one partition.
ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date='202603',region='shanghai');

-- Delete two partitions at once.
ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date='202412',region='hangzhou'),PARTITION(sale_date='202412',region='shanghai');

Supprimer des partitions par condition de filtre (table à un seul niveau)

-- Create a single-level partitioned table with sample partitions.
CREATE TABLE IF NOT EXISTS sale_detail_del(
shop_name     STRING,
customer_id   STRING,
total_price   DOUBLE)
PARTITIONED BY (sale_date STRING);

-- Add partitions.
ALTER TABLE sale_detail_del ADD IF NOT EXISTS
PARTITION (sale_date= '201910') PARTITION (sale_date= '201911') PARTITION (sale_date= '201912')
PARTITION (sale_date= '202001') PARTITION (sale_date= '202002') PARTITION (sale_date= '202003')
PARTITION (sale_date= '202004') PARTITION (sale_date= '202005') PARTITION (sale_date= '202006')
PARTITION (sale_date= '202007');

-- Delete by comparison.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date < '201911');
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date >= '202007');

-- Delete by pattern matching.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date LIKE '20191%');

-- Delete by value list.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date IN ('202002','202004','202006'));

-- Delete by range.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date BETWEEN '202001' AND '202007');

-- Delete using a scalar function.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(substr(sale_date, 1, 4) = '2020');

-- Delete with OR condition.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date < '201912' OR sale_date >= '202006');

-- Delete with AND condition.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date > '201912' AND sale_date <= '202004');

-- Delete with NOT condition.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(NOT sale_date > '202004');

-- Multiple filter clauses separated by commas are combined with OR.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date < '201911'), PARTITION(sale_date >= '202007');

-- Delete by regular expression.
ALTER TABLE sale_detail_del ADD IF NOT EXISTS
PARTITION (sale_date= '2019-10-05')
PARTITION (sale_date= '2019-10-06')
PARTITION (sale_date= '2019-10-07');

ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date RLIKE '2019-\\d+-\\d+');

Supprimer des partitions d'une table à partitions multiniveaux

-- Create a multi-level partitioned table with sample partitions.
CREATE TABLE IF NOT EXISTS region_sale_detail(
shop_name     STRING,
customer_id   STRING,
total_price   DOUBLE)
PARTITIONED BY (sale_date STRING , region STRING );

-- Add partitions.
ALTER TABLE region_sale_detail ADD IF NOT EXISTS
PARTITION (sale_date= '201910',region = 'shanghai') PARTITION (sale_date= '201911',region = 'shanghai')
PARTITION (sale_date= '201912',region = 'shanghai') PARTITION (sale_date= '202001',region = 'shanghai')
PARTITION (sale_date= '202002',region = 'shanghai') PARTITION (sale_date= '201910',region = 'beijing')
PARTITION (sale_date= '201911',region = 'beijing') PARTITION (sale_date= '201912',region = 'beijing')
PARTITION (sale_date= '202001',region = 'beijing') PARTITION (sale_date= '202002',region = 'beijing');

-- Comma-separated filter clauses are combined with OR.
-- This deletes all partitions where sale_date < '201911' OR region = 'beijing'.
ALTER TABLE region_sale_detail DROP IF EXISTS PARTITION(sale_date < '201911'),PARTITION(region = 'beijing');

-- To combine conditions with AND, place both conditions in a single clause.
-- This deletes only partitions where sale_date < '201911' AND region = 'beijing'.
ALTER TABLE region_sale_detail DROP IF EXISTS PARTITION(sale_date < '201911', region = 'beijing');
Chaque clause de filtre ne peut faire référence qu'à une seule colonne de clé de partition. L'utilisation de AND pour combiner plusieurs colonnes de clé de partition dans une seule clause de filtre renvoie une erreur.
-- The following statement fails because it references two partition key columns
-- (sale_date and region) with AND in a single filter clause.
ALTER TABLE region_sale_detail DROP IF EXISTS PARTITION(sale_date < '201911' AND region = 'beijing');

-- Error returned:
-- FAILED: ODPS-0130071:[1,82] Semantic analysis exception - invalid column reference region,
-- partition expression must have one and only one column reference

Ajouter des colonnes ou des commentaires

Ajoutez des colonnes ou des commentaires à une table non partitionnée ou partitionnée. Consultez la portée de l'évolution du schéma. Les types complexes tels que STRUCT<x: STRING, y: BIGINT> et MAP<STRING, STRUCT<x: DOUBLE, y: DOUBLE>> sont pris en charge.

  • Paramètres de configuration

    Pour activer cette fonctionnalité, définissez le paramètre setproject odps.schema.evolution.enable=true;.

  • Format de la commande

    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 cible. Les nouvelles colonnes sont ajoutées à la fin de la table ; vous ne pouvez pas spécifier leur ordre.

    col_name

    Oui

    Nom de la nouvelle colonne.

    type

    Oui

    Type de données de la nouvelle colonne.

    col_comment

    Non

    Commentaire pour 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 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 la colonne existe déjà, IF NOT EXISTS garantit que l'instruction réussit sans dupliquer la colonne.

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

Supprimez une ou plusieurs colonnes d'une table non partitionnée ou partitionnée. Consultez la portée de l'évolution du schéma.

  • Paramètres de configuration

    Pour activer cette fonctionnalité, définissez le paramètre setproject odps.schema.evolution.enable=true;.

  • Format de la commande

    -- Delete one or more columns.
    ALTER TABLE <table_name> DROP COLUMNS <col_name1>[, <col_name2>...];
  • Paramètres

    • table_name : Obligatoire. Nom de la table dont vous souhaitez supprimer des colonnes.

    • col_name : Obligatoire. Nom de la colonne à supprimer.

  • Exemple

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

Modifiez le type de données d'une colonne. Consultez la portée de l'évolution du schéma.

  • Paramètres de configuration

    Pour activer cette fonctionnalité, définissez le paramètre setproject odps.schema.evolution.enable=true;.

  • Format de la commande

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

    old_column_name

    Oui

    Colonne à modifier.

    new_column_name

    Oui

    Nom de la colonne après la modification du type.

    old_column_name et new_column_name peuvent être identiques (pas de renommage). Cependant, new_column_name ne doit correspondre à aucun autre nom de colonne existant sauf 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;
  • Tableau de conversion des types de données

    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 n'est pas applicable. Y() indique que la conversion est prise en charge si la condition entre parenthèses est remplie.

    数据类型支持转换表

Modifier l'ordre des colonnes

Modifiez l'ordre des colonnes dans une table non partitionnée ou partitionnée. Consultez la portée de l'évolution du schéma.

  • Paramètres de configuration

    Pour activer cette fonctionnalité, définissez le paramètre setproject odps.schema.evolution.enable=true;.

  • Format de la commande

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

    old_column_name

    Oui

    Colonne à réorganiser.

    new_col_name

    Oui

    Nouveau nom de colonne.

    new_col_name et old_column_name peuvent être identiques (pas de renommage). Cependant, new_col_name ne doit correspondre à aucun autre nom de colonne existant sauf old_column_name.

    column_type

    Oui

    Type de données actuel de la colonne. Ne peut pas être modifié par cette commande.

    column_name

    Oui

    Place la colonne immédiatement après column_name.

  • Exemple

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

Renommez une colonne dans une table non partitionnée ou partitionnée.

  • Format de la commande

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

    old_col_name

    Oui

    Nom actuel de la colonne. Doit exister dans la table.

    new_col_name

    Oui

    Nouveau nom de colonne. Doit être unique dans 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

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

  • 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 cible.

    col_name

    Oui

    Colonne dont vous souhaitez modifier le commentaire. Doit exister dans la table.

    col_comment

    Oui

    Nouveau commentaire. Maximum 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

Modifiez le nom et le commentaire d'une colonne dans une table non partitionnée ou partitionnée.

  • Format de la commande

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

    old_col_name

    Oui

    Colonne à modifier. Doit exister dans la table.

    new_col_name

    Oui

    Nouveau nom de colonne. Doit être unique dans la table.

    column_type

    Oui

    Type de données de la colonne.

    col_comment

    Facultatif

    Nouveau commentaire. Maximum 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

Modifiez la contrainte NOT NULL d'une colonne qui n'est pas une clé de partition pour autoriser les valeurs NULL.

Cette modification est irréversible. Une fois qu'une colonne autorise les valeurs NULL, vous ne pouvez pas revenir à NOT NULL.

  • Vous pouvez exécuter la commande DESC EXTENDED table_name; pour afficher la valeur de 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.

  • Format de la commande

    ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> NULL;
  • Paramètres

    Paramètre

    Obligatoire

    Description

    table_name

    Oui

    Nom de la table cible.

    old_col_name

    Oui

    Colonne qui n'est pas une clé de partition à modifier. Doit être une colonne existante qui n'est pas une clé de partition.

  • Exemple

    -- Create a partitioned table where the id column does not allow NULL values.
    CREATE TABLE null_test(id INT NOT NULL, name STRING) PARTITIONED BY (ds string);
    -- View the 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     |                                                     |
    +------------------------------------------------------------------------------------+
    -- Change the id column to allow NULL values.
    ALTER TABLE null_test CHANGE COLUMN id NULL;
    -- View the 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     |                                                     |
    +------------------------------------------------------------------------------------+

Compacter les fichiers d'une table transactionnelle

Le stockage physique sous-jacent d'une table transactionnelle se compose de fichiers de base et de fichiers delta qui ne peuvent pas être lus directement. Lorsque des opérations update ou delete sont effectuées sur une table transactionnelle, seuls des fichiers delta sont ajoutés. Les fichiers de base ne sont pas modifiés. Par conséquent, plus il y a de mises à jour ou de suppressions, plus la consommation de stockage et les coûts de requête augmentent.

L'exécution de multiples opérations update ou delete sur la même table ou partition génère un grand nombre de fichiers delta. Lors de la lecture des données, le système charge ces fichiers delta pour déterminer quelles lignes sont mises à jour ou supprimées. Un grand nombre de fichiers delta dégrade les performances de lecture des données. Dans ce cas, compactez les fichiers de base et les fichiers delta pour réduire le stockage et améliorer les performances de lecture des données.

  • Syntaxe

    ALTER TABLE <table_name> [PARTITION (<partition_key> = '<partition_value>' [, ...])] compact {minor|major};
  • Paramètres

    • table_name : Obligatoire. Nom de la table transactionnelle dont les fichiers doivent être compactés.

    • partition_key : Facultatif. Nom de la colonne de partition si la table transactionnelle est une table partitionnée.

    • partition_value : Facultatif. Valeur de la colonne de partition si la table transactionnelle est une table partitionnée.

    • major|minor : Spécifiez au moins l'un des deux. Les différences sont les suivantes :

      • minor : Fusionne les fichiers de base et tous les fichiers delta associés pour éliminer les fichiers delta.

      • major : Non seulement fusionne les fichiers de base et tous les fichiers delta associés pour éliminer les fichiers delta, mais fusionne également les petits fichiers parmi les fichiers de base de la table. Lorsque les fichiers de base sont petits (moins de 32 Mo) ou que des fichiers delta existent, cela équivaut à effectuer une opération insert overwrite sur la table. Cependant, lorsque les fichiers de base sont suffisamment grands (32 Mo ou plus) et qu'aucun fichier delta n'existe, aucune réécriture n'a lieu.

  • Exemples

    • Exemple 1 : Compacter les fichiers de la table transactionnelle acid_delete.

      ALTER TABLE acid_delete compact minor;

      Sortie exemple :

      Summary:
      Nothing found to merge, set odps.merge.cross.paths=true IF cross path merge is permitted.
      OK
    • Exemple 2 : Compacter les fichiers de la table transactionnelle acid_update_pt.

      ALTER TABLE acid_update_pt PARTITION (ds = '2019') compact major;

      Sortie exemple :

      Summary:
      table name: acid_update_pt /ds=2019  instance count: 2  run time: 6
        before merge, file count:        8  file size: 2613  file physical size: 7839
         after merge, file count:        2  file size: 679  file physical size: 2037
      
      OK

Fusionner les petits fichiers

Un système de fichiers distribué stocke les données en blocs. Les fichiers inférieurs à la taille de bloc (64 Mo) sont appelés petits fichiers. Les systèmes distribués produisent inévitablement des petits fichiers, tels que les résultats de calcul SQL ou d'autres moteurs distribués et la sortie de l'ingestion de données Tunnel. La fusion des petits fichiers peut améliorer les performances de calcul.

Syntaxe

ALTER TABLE <tablename> [PARTITION(<partition_key>=<partition_value>)] MERGE SMALLFILES;
  • Paramètres

    • table_name : Obligatoire. Nom de la table dont les fichiers doivent être fusionnés.

    • partition_key : Facultatif. Nom de la colonne de partition si la table est une table partitionnée.

    • partition_value : Facultatif. Valeur de la colonne de partition si la table est une table partitionnée.

  • Exemples

    SET odps.merge.cross.paths=true;
    SET odps.merge.smallfile.filesize.threshold=128;
    SET odps.merge.max.filenumber.per.instance = 2000;
    ALTER TABLE tbcdm.dwd_tb_log_pv_di PARTITION (ds='20151116') MERGE smallfiles;

La fonctionnalité de fusion des petits fichiers nécessite des ressources de calcul. Pour les instances à la demande, cette opération entraîne des frais. Les règles de facturation sont identiques à celles de la facturation à la demande pour SQL. Pour plus d'informations, consultez les rubriques et Tarification du calcul (à la demande).

Pour plus d'informations, consultez la rubrique Fusionner les petits fichiers.

Instructions connexes

  • CREATE TABLE : Crée une table non partitionnée, partitionnée, externe ou en cluster.

  • TRUNCATE TABLE : Tronque les données dans une table spécifiée.

  • DROP TABLE : Supprime une table partitionnée ou non partitionnée.

  • DESC TABLE/VIEW : Affiche les informations sur les tables internes MaxCompute, les vues, les vues matérialisées, les tables externes, les tables en cluster ou les tables transactionnelles.

  • SHOW : Affiche l'instruction SQL DDL d'une table, liste toutes les tables et vues d'un projet, ou liste toutes les partitions d'une table.\