Tous les produits
Search
Centre de documentation

MaxCompute:Partition operations

Dernière mise à jour :Aug 10, 2026

Ajoutez, supprimez, fusionnez, renommez, inspectez et videz les partitions dans les tables MaxCompute.

Présentation des opérations

Opération

Description

Rôle

Plateformes

Ajouter une partition

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

Nécessite l'autorisation Alter.

Les plateformes suivantes prennent en charge ces commandes :

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

Réinitialisez le LastModifiedTime d'une partition à l'heure actuelle et recalculez son cycle de vie.

Modifier la valeur d'une partition

Renommez les valeurs de partition.

Fusionner des partitions

Combinez plusieurs partitions en une seule partition de destination.

Lister toutes les partitions

Listez toutes les partitions d'une table.

Afficher les informations sur une partition

Affichez les métadonnées d'une partition spécifique.

Supprimer une partition

Supprimez une ou plusieurs partitions d'une table.

Vider une partition

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

La 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 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 INSERT, RENAME ou DROP concurrentes pendant la fusion génèrent toujours une erreur.

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 partition_col1=col1_value1, partition_col2=col2_value1.... Pour une table à partitionnement multiniveau, spécifiez toutes les valeurs de partition.

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_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 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_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 du vidage basé sur un filtre. La condition de filtre n'est pas sensible à la casse.

Syntaxe :

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>), ...]

Paramètres :

  • partition_col : le nom de la colonne de partition.

  • relational_operators : un opérateur relationnel. Pour plus d'informations, consultez la section Opérateurs.

  • partition_col_value : la valeur de comparaison ou l'expression régulière pour la colonne de partition. Le type de données doit correspondre à celui de la colonne de partition.

  • scalar() : une fonction scalaire qui transforme la valeur de la colonne de partition avant de la comparer à partition_col_value à l'aide de l'opérateur relationnel spécifié.

  • La condition de filtre prend en charge les opérateurs logiques suivants :

    • NOT : renvoie le complément de la condition de filtre.

    • AND / OR : combine plusieurs conditions de filtre en une règle globale de correspondance de partition.

  • Virgule (,) : sépare plusieurs clauses PARTITION. Les clauses séparées par des virgules sont évaluées avec une logique OR.

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;

Références