Tous les produits
Search
Centre de documentation

MaxCompute:COMPACTION

Dernière mise à jour :Aug 10, 2026

Les écritures fréquentes dans les tables Delta génèrent de nombreux petits fichiers, ce qui réduit le débit des E/S et accroît la pression sur le stockage. La compaction fusionne tous les fichiers de données en un ensemble consolidé de fichiers de base, en ne conservant que la dernière version de chaque ligne. Ainsi, les requêtes analysent moins de fichiers et s'exécutent plus rapidement.

Vue d'ensemble

Les tables Delta prennent en charge deux méthodes de fusion des données :

Méthode Fonctionnement Déclencheur
Clustering Fusionne uniquement les fichiers delta en un fichier plus volumineux sans modifier le contenu des données. Les fichiers delta contiennent les données issues des opérations validées. Automatique : le système exécute le clustering périodiquement en fonction de la taille et du nombre de fichiers. Aucune action manuelle n'est requise.
Compaction Fusionne tous les fichiers de données en un lot de fichiers de base. Pour les lignes partageant la même clé primaire, seule la dernière ligne est conservée. Les versions historiques des lignes et les données des colonnes système ne sont pas conservées. Manuel : exécutez ALTER TABLE ... COMPACT MAJOR.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Une table Delta (créée avec tblproperties ("transactional"="true"))

  • La propriété de session odps.merge.task.mode=service définie dans votre session

Syntaxe

ALTER TABLE <table_name>
  [PARTITION (<partition_key> = '<partition_value>' [, ...])]
  COMPACT MAJOR;

Paramètres

Paramètre Obligatoire Description
table_name Oui Nom de la table Delta à compacter.
partition_key Non Nom de la clé de partition. Spécifiez ce paramètre pour compacter une seule partition.
partition_value Non Valeur de la clé de partition.

Remarques d'utilisation

  • Propriété de session requise : Définissez odps.merge.task.mode=service avant d'exécuter la compaction.

    SET odps.merge.task.mode=service;
  • Coût de stockage : La compaction génère de nouveaux fichiers de base avant de supprimer les anciens, ce qui augmente temporairement l'utilisation du stockage. Vous pouvez configurer une fréquence de déclenchement adaptée à vos besoins métier.

  • Amplification des écritures et conflits : La politique de compaction est conçue pour éviter une amplification importante des écritures et les échecs causés par des conflits lors de compactations fréquentes.

Facturation

Méthode de facturation Modalités de facturation de la compaction
Paiement à l'utilisation Amount of data scanned × 1 × unit price
Abonnement Déduit du quota de calcul de l'abonnement

Exemple

L'exemple suivant crée une table Delta partitionnée, insère des données en trois lots, exécute la compaction, puis interroge les données historiques en utilisant la fonctionnalité de voyage dans le temps (time travel).

-- Create a delta table with a primary key and two partition columns.
CREATE TABLE mf_dt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT NOT NULL)
  PARTITIONED BY (dd STRING, hh STRING)
  TBLPROPERTIES ("transactional"="true");

-- Insert data in three batches to simulate incremental writes.
INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01') VALUES (1, 1), (2, 2);
INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01') VALUES (2, 20), (3, 3);
INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01') VALUES (3, 30), (4, 4);

-- Run compaction on the partition.
SET odps.merge.task.mode=service;
ALTER TABLE mf_dt PARTITION(dd='01', hh='01') COMPACT MAJOR;

-- Query the latest snapshot after compaction.
SELECT * FROM mf_dt TIMESTAMP AS OF get_latest_timestamp('mf_dt')
  WHERE dd='01' AND hh='01';

-- Query the second-to-latest snapshot (time travel still works after compaction).
SELECT * FROM mf_dt TIMESTAMP AS OF get_latest_timestamp('mf_dt', 2)
  WHERE dd='01' AND hh='01';