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 |
|
|
Oui |
Nom de la table dont vous souhaitez modifier le propriétaire. |
|
|
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 |
|
|
Oui |
Nom de la table dont vous souhaitez modifier le commentaire. |
|
|
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.
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 |
|
|
Oui |
Table à renommer. |
|
|
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 |
|
|
Oui |
Nom de la table dont vous souhaitez modifier la période de cycle de vie. |
|
|
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 |
|
|
Oui |
Nom de la table. |
|
|
Non |
Partition cible. Format : |
|
|
— |
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. |
|
|
— |
Empêche la table et toutes ses partitions d'être récupérées. Cette option est prioritaire sur tout paramètre |
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 |
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_dateetregionsont 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 |
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 |
|
new_pt_spec |
Oui |
Nouvelle spécification de partition, au format |
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 |
|
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_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;.Autorisations : il s'agit d'un paramètre au niveau du projet. Requiert le rôle de propriétaire du projet, Super_Administrator ou Admin. Attribuer des rôles de gestion intégrés à un utilisateur.
Période d'effet : prend effet environ 10 minutes après la définition.
-
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;.Autorisations : il s'agit d'un paramètre au niveau du projet. Requiert le rôle de propriétaire du projet, Super_Administrator ou Admin. Attribuer des rôles de gestion intégrés à un utilisateur.
Période d'effet : prend effet environ 10 minutes après la définition.
-
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;.Autorisations : il s'agit d'un paramètre au niveau du projet. Requiert le rôle de propriétaire du projet, Super_Administrator ou Admin. Attribuer des rôles de gestion intégrés à un utilisateur.
Période d'effet : prend effet environ 10 minutes après la définition.
-
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
RemarqueY 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;.Autorisations : il s'agit d'un paramètre au niveau du projet. Requiert le rôle de propriétaire du projet, Super_Administrator ou Admin. Attribuer des rôles de gestion intégrés à un utilisateur.
Période d'effet : prend effet environ 10 minutes après la définition.
-
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é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.
-
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érationinsert overwritesur 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.\