Ajoutez, supprimez, fusionnez, renommez, inspectez et videz les partitions dans les tables MaxCompute.
Présentation des opérations
Opération | Description | Rôle | Plateformes |
Ajoutez une ou plusieurs partitions à une table partitionnée. | Nécessite l'autorisation Alter. | Les plateformes suivantes prennent en charge ces commandes : | |
Réinitialisez le | |||
Renommez les valeurs de partition. | |||
Combinez plusieurs partitions en une seule partition de destination. | |||
Listez toutes les partitions d'une table. | |||
Affichez les métadonnées d'une partition spécifique. | |||
Supprimez une ou plusieurs partitions d'une table. | |||
Supprimez les données des partitions sans supprimer les partitions elles-mêmes. |
Limitations
|
Contrainte |
Limite |
|
Types de données pris en charge pour les colonnes de clé de partition |
TINYINT, SMALLINT, INT, BIGINT, CHAR, VARCHAR, STRING |
|
Niveau maximal de partitionnement par table |
6 |
|
Nombre maximal de partitions par table |
60 000 |
|
Nombre maximal de partitions interrogées simultanément |
10 000 |
|
Fusion de partitions sur les tables transactionnelles |
Non pris en charge |
Ajouter une partition
Ajoutez une ou plusieurs partitions à une table partitionnée existante.
Notes d'utilisation
Pour une table à partitionnement multiniveau, 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 |
Le nom de la table partitionnée. |
|
IF NOT EXISTS |
Non |
Supprime l'erreur si la partition existe déjà. |
|
pt_spec |
Oui |
La partition à ajouter, au format |
Exemples
Les exemples suivants utilisent une table partitionnée nommée sale_detail. Pour créer cette table, consultez la section 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 simultanément
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 section 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, ce qui déclenche le recalcul du cycle de vie.
Notes d'utilisation
Pour une table à partitionnement multiniveau, 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 |
Le nom de la table partitionnée. Renvoie une erreur si la table n'existe pas. |
|
pt_spec |
Oui |
La 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 la valeur d'une 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 à partitionnement multiniveau, 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 |
Le nom de la table partitionnée. |
|
pt_spec |
Oui |
La spécification de partition actuelle, au format |
|
new_pt_spec |
Oui |
La 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 seule partition de destination. Les données sont déplacées vers la destination et les partitions sources sont supprimées.
Notes d'utilisation
Les tables externes ne sont pas prises en charge.
La fusion des partitions d'une table clusterisée supprime le clustering de la partition résultante.
Vous pouvez fusionner jusqu'à 4 000 partitions simultanément.
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 |
Le 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 |
La condition que les partitions sources doivent respecter. |
|
fullpartitionSpec |
Oui |
La 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 section 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
Lister toutes les partitions
Listez toutes les partitions d'une table. Renvoie une erreur si la table n'existe pas ou n'est pas partitionnée.
Syntaxe
SHOW PARTITIONS <table_name>;
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
table_name |
Oui |
Le nom de la table partitionnée. |
Exemples
-- List all partitions in the sale_detail table.
SHOW PARTITIONS sale_detail;
-- Sample result:
-- sale_date=202603/region=shanghai
Afficher les informations sur une partition
Affichez les métadonnées d'une partition spécifique, y compris sa taille, sa date de création et sa dernière heure de modification.
Syntaxe
DESC <table_name> PARTITION (<pt_spec>);
Paramètres
|
Paramètre |
Obligatoire |
Description |
|
table_name |
Oui |
Le nom de la table partitionnée. |
|
pt_spec |
Oui |
La partition à inspecter, au format |
Exemples
-- View information for a specific partition.
DESC sale_detail PARTITION (sale_date='202603',region='shanghai');
-- Sample result:
+------------------------------------------------------------------------------------+
| PartitionSize: 0 |
+------------------------------------------------------------------------------------+
| CreateTime: 2026-01-13 11:35:49 |
| LastDDLTime: 2026-01-13 11:35:49 |
| LastModifiedTime: 2026-01-13 11:35:49 |
+------------------------------------------------------------------------------------+
OK
Supprimer une partition
Supprimez une ou plusieurs partitions d'une table. Vous pouvez supprimer des partitions spécifiques par leur nom ou utiliser des conditions de filtre pour une suppression groupée.
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 peut faire référence à 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 |
Le nom de la table partitionnée. |
|
IF EXISTS |
Non |
Supprime l'erreur si la partition n'existe pas. |
|
pt_spec |
Oui |
La partition à supprimer, au format |
|
partition_filtercondition |
Non |
Requis lors de l'utilisation de la suppression basée sur un filtre. Consultez la section Syntaxe des conditions de filtre de partition. |
Syntaxe des conditions de filtre de partition
Les opérations de suppression et de vidage 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 |
Le nom de la colonne de clé de partition. |
|
relational_operators |
Un opérateur relationnel. Pour plus de détails, consultez la section Opérateurs. |
|
partition_col_value |
Une valeur ou une 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() |
Une 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 à partitionnement multiniveau
-- 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 peut faire référence à 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
Vider une partition
Supprimez toutes les données des partitions spécifiées sans supprimer les partitions elles-mêmes.
Videz les partitions par nom exact ou par condition de filtre.
Syntaxe
Vider des partitions spécifiques
TRUNCATE TABLE <table_name> PARTITION <pt_spec>[, PARTITION <pt_spec>....];
Vider des partitions par condition de filtre
TRUNCATE TABLE <table_name> PARTITION <partition_filtercondition>;
Paramètres
Paramètre | Obligatoire | Description |
table_name | Oui | Le nom de la table partitionnée. |
pt_spec | Oui | La partition à vider, au format |
partition_filtercondition | Non | Requis lors de l'utilisation du vidage basé sur un filtre. La condition de filtre n'est pas sensible à la casse. Syntaxe : Paramètres :
|
Exemples
Vider des partitions spécifiques
-- Truncate one partition.
TRUNCATE TABLE sale_detail PARTITION(sale_date='202601',region='hangzhou');
-- Truncate two partitions at once.
TRUNCATE TABLE sale_detail PARTITION(sale_date='202512',region='hangzhou'), PARTITION(sale_date='202512',region='shanghai');
Vider des partitions par condition de filtre
-- Truncate all partitions where sale_date starts with '2025' and region is 'hangzhou'.
TRUNCATE TABLE sale_detail PARTITION(sale_date LIKE '2025%' AND region='hangzhou');
Vider une Delta Table non partitionnée
-- For non-partitioned tables only. Using this on a partitioned table returns an error.
TRUNCATE TABLE non_par_table;