MaxCompute sauvegarde automatiquement les données à chaque modification et conserve ces sauvegardes pendant une période configurable. Si des données sont accidentellement supprimées ou écrasées, vous pouvez les restaurer vers n'importe quelle version antérieure dans la limite de la période de rétention.

Fonctionnement
Toujours activé -- Activé par défaut avec une période de rétention de 24 heures. Aucun stockage externe n'est requis et aucun coût supplémentaire n'est facturé.
Continu -- Chaque modification déclenche une sauvegarde, ce qui garantit qu'aucune modification de données n'est manquée entre les fenêtres planifiées.
Restauration rapide -- Les opérations de restauration ne consomment pas de ressources de calcul supplémentaires. Une seule commande suffit pour restaurer une table, une partition ou une version spécifique.
Limitations
Les vues matérialisées, les tables d'objets et les tables externes ne sont pas prises en charge.
La restauration des tables clusterisées n'est pas possible.
Après l'exécution de
PURGE TABLEsur une table, les données purgées ne peuvent pas être restaurées.Une table ou une partition supprimée (y compris les tables Delta) ne peut pas être restaurée directement vers un numéro de séquence de journalisation (LSN) spécifique. Restaurez d'abord la table, puis restaurez-la vers le LSN cible.
Limitations des tables Delta
Une table ou une partition Delta supprimée peut être entièrement restaurée, mais pas vers une version mineure spécifique. Pour interroger une version mineure spécifique, utilisez la fonctionnalité time travel.
-
Après la restauration d'une table supprimée :
L'interrogation de la table à un moment antérieur à la suppression renvoie les données comme si la suppression n'avait jamais eu lieu.
L'interrogation à un moment compris entre la suppression et la restauration ne renvoie aucune donnée (le système la considère comme supprimée).
L'interrogation à un moment postérieur à la restauration renvoie les données comme si ni la suppression ni la restauration n'avaient eu lieu. Les données restaurées ne sont pas traitées comme des données incrémentielles.
L'interrogation d'une partition supprimée avant sa restauration ne renvoie aucun résultat (comme pour une requête normale sur une partition inexistante), plutôt qu'une erreur.
Chaque cycle de suppression et de restauration génère de nouveaux horodatages de validation et numéros de version. Lorsqu'une table partitionnée est restaurée, une version distincte est créée pour chaque partition.
Configurer la période de rétention
Définissez le nombre de jours pendant lesquels MaxCompute conserve les données de sauvegarde. La plage valide est de 0 à 30. La valeur par défaut est 1 (24 heures). La définition de la valeur 0 désactive la sauvegarde.
-- Set the retention period to 7 days
setproject odps.timemachine.retention.days=7;
Seuls les comptes Alibaba Cloud ou les administrateurs de projet peuvent modifier la période de rétention.
Comportement après modification de la période de rétention :
|
Modification |
Effet |
|
Prolongation de la période |
Prise d'effet le jour même |
|
Réduction de la période |
MaxCompute supprime automatiquement les données de sauvegarde qui dépassent la nouvelle période |
Pour afficher le paramètre actuel, exécutez setproject; sur le client MaxCompute (odpscmd) et vérifiez la valeur odps.timemachine.retention.days.
Afficher l'historique des sauvegardes
Répertorier toutes les tables, y compris les tables supprimées
SHOW HISTORY FOR tables;
Filtrer par nom :
SHOW HISTORY FOR tables LIKE test_restore_1;
Exemple de sortie :
Name Id Type IsPartitioned CreateTime DropTime
test_restore_1 a0b06367bd054d17a55505aa31601b89 MANAGED_TABLE FALSE 2025-07-18 16:32:13
Requiert l'autorisation List sur le projet. Consultez les autorisations MaxCompute .
Afficher l'historique des versions d'une table
SHOW HISTORY FOR TABLE <table_name> [LIMIT <n>] [LSN '<lsn>' | OFFSET <offset>];
Exemple :
SHOW HISTORY FOR TABLE test_restore_1;
Exemple de sortie :
ObjectType ObjectId ObjectName VERSION(LSN) Time Operation
TABLE a0b06367bd054d17a55505aa31601b89 test_restore_1 0000000000000001 2025-07-18 16:32:14 CREATE
TABLE a0b06367bd054d17a55505aa31601b89 test_restore_1 0000000000000002 2025-07-18 16:52:08 OVERWRITE
TABLE a0b06367bd054d17a55505aa31601b89 test_restore_1 0000000000000003 2025-07-18 16:52:12 OVERWRITE
TABLE a0b06367bd054d17a55505aa31601b89 test_restore_1 0000000000000004 2025-07-18 16:52:14 OVERWRITE
TABLE a0b06367bd054d17a55505aa31601b89 test_restore_1 0000000000000005 2025-07-18 16:52:17 OVERWRITE
Requiert l'autorisation ShowHistory sur la table. Si la table a été supprimée, cette commande renvoie une erreur. Utilisez plutôt SHOW HISTORY FOR tables LIKE <table_name>;.
Afficher l'historique des versions d'une table supprimée
Utilisez l'ID de table obtenu via SHOW HISTORY FOR tables :
SHOW HISTORY FOR TABLE test_restore_2 ('id'='437b29466ba948b392b2090ec0a60fc2');
Requiert l'autorisation List sur le projet.
Afficher l'historique des versions d'une partition
-- By partition spec
SHOW HISTORY FOR TABLE test_restore_part_1 PARTITION(ds='20250701');
-- By partition ID (for dropped partitions)
SHOW HISTORY FOR TABLE test_restore_part_1 PARTITION('id'='271aebf3e17a4a8e9f6b35733bf63db4');
Requiert l'autorisation ShowHistory sur la table.
Pour afficher plusieurs partitions simultanément :
SHOW HISTORY FOR TABLE test_restore_part_1 ('id'='fbee66b56cf544d2a9999d5d0ce5d352')
PARTITION(ds='20250701') PARTITION(ds='20250702');
Restaurer une table non partitionnée
Restaurer une table supprimée
RESTORE TABLE <table_name> ('id'='<table_id>');
Le nom de la table ne doit pas entrer en conflit avec une table existante. Renommez la table existante au préalable si nécessaire.
Exemple :
-- Rename the conflicting table
ALTER TABLE test_restore_2 RENAME TO test_restore_2_rename;
-- Restore the dropped table
RESTORE TABLE test_restore_2 ('id'='437b29466ba948b392b2090ec0a60fc2');
Autorisations :
Table existante : autorisation Update sur la table.
Table inexistante : autorisation CreateTable sur le projet.
Restaurer une table vers une version spécifique
RESTORE TABLE <table_name> TO LSN '<lsn>';
Exemple :
RESTORE TABLE test_restore_1 TO LSN '0000000000000004';
SELECT * FROM test_restore_1;
-- Returns:
-- +------------+
-- | colname |
-- +------------+
-- | 2 |
-- +------------+
Restaurer une table vers une version spécifique en tant que nouvelle table
RESTORE TABLE <table_name> TO LSN '<lsn>' AS <new_table_name>;
Cette commande présente trois comportements selon la table cible :
|
Scénario |
Comportement |
|
La table cible n'existe pas |
Crée la nouvelle table avec les données restaurées |
|
La table cible existe avec le même schéma |
Écrase les données de la table cible |
|
La table cible existe avec un schéma différent |
Échec avec l'erreur ODPS-0110061 |
Exemple -- restauration et renommage :
RESTORE TABLE test_restore_2 TO LSN '0000000000000003' AS test_restore_new;
SELECT * FROM test_restore_new;
-- Returns:
-- +------------+
-- | colname |
-- +------------+
-- | 1 |
-- +------------+
Restaurer une table partitionnée
Restaurer une table partitionnée supprimée
RESTORE TABLE <table_name> ('id'='<table_id>');
Toutes les partitions existantes au moment de la suppression sont restaurées.
Restaurer des partitions supprimées
Restaurez une ou plusieurs partitions supprimées vers une table existante :
RESTORE TABLE <table_name> PARTITION('id'='<partition_id>') [PARTITION('id'='<partition_id>')];
La table doit exister. Si la table a également été supprimée, restaurez-la d'abord.
Exemple :
-- View partition IDs
SHOW HISTORY FOR TABLE test_restore_part_y;
-- Restore two dropped partitions
RESTORE TABLE test_restore_part_y
PARTITION('id'='a14d6cb4ab0c46378a6e284b257bbfaa')
PARTITION('id'='8c85184ec0b44fba8198274401df2519');
Restaurer des partitions vers une version spécifique
RESTORE TABLE <table_name>
PARTITION(<partition_spec>) [PARTITION(<partition_spec>)]
TO LSN '<lsn>';
Lors de la restauration de plusieurs partitions vers un même LSN, chaque partition est restaurée vers le LSN spécifié si celui-ci existe exactement pour cette partition. Dans le cas contraire, elle est restaurée vers le LSN antérieur le plus proche.
Exemple : La partition pt1 possède les LSN 100, 102, 104 et 106. La partition pt2 possède les LSN 101, 103, 104 et 105. La restauration des deux partitions vers le LSN 102 permet de restaurer pt1 vers 102 et pt2 vers 101.
RESTORE TABLE test_restore_part_y
PARTITION(ds='20250701') PARTITION(ds='20250702')
TO LSN '0000000000000010';
Restaurer des partitions vers une version spécifique en tant que nouvelle table
RESTORE TABLE <table_name>
PARTITION(<partition_spec>) [PARTITION(<partition_spec>)]
TO LSN '<lsn>' AS <new_table_name>;
Exemples de tables Delta
Créer une table Delta, insérer des données, puis supprimer et restaurer
-- Create a Delta table
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
INSERT OVERWRITE TABLE mf_dt PARTITION(dd='01', hh='01')
VALUES (1, 1), (2, 2), (3, 3);
INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01')
VALUES (3, 30), (4, 4), (5, 5);
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Returns:
-- +----+-----+----+----+
-- | pk | val | dd | hh |
-- +----+-----+----+----+
-- | 1 | 1 | 01 | 01 |
-- | 4 | 4 | 01 | 01 |
-- | 5 | 5 | 01 | 01 |
-- | 2 | 2 | 01 | 01 |
-- | 3 | 30 | 01 | 01 |
-- +----+-----+----+----+
Obtenir l'ID de la table pour la restauration
Exécutez DESC EXTENDED mf_dt; et repérez le champ TableID dans la section Extended Info :
TableID: cd607cd938dc4ca6886dd12212995604
Supprimer et restaurer la table
DROP TABLE mf_dt;
RESTORE TABLE mf_dt ('id' = 'cd607cd938dc4ca6886dd12212995604');
-- Verify the data
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Returns the same data as before the drop.
Supprimer et restaurer une partition
-- Get partition IDs
SHOW HISTORY FOR TABLE mf_dt;
-- Drop the partition
ALTER TABLE mf_dt DROP PARTITION (dd = '01', hh = '01');
-- Restore the partition
RESTORE TABLE mf_dt PARTITION('id' = '51d38cc9ded344cf99188cd1a806e5d2');
-- Verify the data
SELECT * FROM mf_dt WHERE dd='01' AND hh='01';
-- Returns the same data as before the drop.
Time travel sur une table restaurée
Après la restauration d'une table Delta, les requêtes de type time travel restent fonctionnelles :
-- Query a specific version
SELECT * FROM mf_dt version AS OF 2 WHERE dd = '01' AND hh = '01';
-- Returns:
-- +----+-----+----+----+
-- | pk | val | dd | hh |
-- +----+-----+----+----+
-- | 1 | 1 | 01 | 01 |
-- | 3 | 3 | 01 | 01 |
-- | 2 | 2 | 01 | 01 |
-- +----+-----+----+----+
-- Query the latest version
SELECT * FROM mf_dt version AS OF get_latest_version('mf_dt')
WHERE dd = '01' AND hh = '01';
-- Returns the current data.
Nettoyage des fichiers de données (tables Delta)
Les tables Delta conservent les données historiques durant la période de time travel, ce qui engendre des coûts de stockage supplémentaires. Le système supprime automatiquement les données historiques inutiles sous un délai d'un jour lorsque toutes les conditions suivantes sont réunies :
Les données sont plus anciennes que la période de time travel. (Si le time travel est désactivé pour la table, toutes les données historiques sont éligibles à la suppression.)
Les données ont dépassé leur cycle de vie ou ont été supprimées, et ont également excédé la durée de protection des sauvegardes.
Les « données historiques » désignent les fichiers de données déplacés vers le répertoire de la corbeille. Des opérations telles que le dépassement du cycle de vie, l'exécution d'une suppression, le compactage ou l'utilisation de INSERT OVERWRITE déplacent toutes les fichiers de données vers la corbeille.
Forcer le nettoyage avec PURGE
Dans le cadre d'une utilisation normale, laissez le système gérer le nettoyage automatiquement. N'utilisez PURGE TABLE qu'en cas d'urgence, par exemple lorsqu'un nombre excessif de fichiers provoque une instabilité du disque ou lorsque les données historiques entraînent une augmentation inattendue des coûts.
PURGE TABLE <table_name>;
Après l'exécution de cette commande, les requêtes de type time travel peuvent ne plus renvoyer les données historiques.
Exemple :
CREATE TABLE mf_ttt (pk BIGINT NOT NULL PRIMARY KEY,
val BIGINT NOT NULL)
TBLPROPERTIES ("transactional"="true");
INSERT INTO TABLE mf_ttt VALUES (1, 1), (2, 2);
INSERT INTO TABLE mf_ttt VALUES (2, 20), (3, 3);
-- Time travel returns version 2 data
SELECT * FROM mf_ttt version AS OF 2;
-- +----+-----+
-- | pk | val |
-- +----+-----+
-- | 1 | 1 |
-- | 2 | 2 |
-- +----+-----+
-- Run compaction, then time travel still works
ALTER TABLE mf_ttt compact major;
SELECT * FROM mf_ttt version AS OF 2;
-- Same result as above
-- After purge, time travel returns different data
PURGE TABLE mf_ttt;
SELECT * FROM mf_ttt version AS OF 2;
-- +----+-----+
-- | pk | val |
-- +----+-----+
-- | 1 | 1 |
-- | 3 | 3 |
-- | 2 | 20 |
-- +----+-----+
Référence des commandes
Scénario | Commande | Description |
Configurer la rétention |
| Définissez la période de rétention (de 0 à 30 jours). Valeur par défaut : 1. |
| Consultez les paramètres actuels du projet, y compris la période de rétention. | |
Afficher l'historique des sauvegardes |
| Répertoriez toutes les tables, y compris celles supprimées. L'autorisation List est requise. |
| Consultez l'historique des versions d'une table. L'autorisation ShowHistory est requise. | |
| Consultez l'historique des versions d'une table supprimée via son ID. L'autorisation List est requise. | |
| Consultez l'historique des versions d'une partition. L'autorisation ShowHistory est requise. | |
| Consultez l'historique des versions d'une partition supprimée via son ID. | |
Restaurer les données |
| Restaurez une table ou une partition supprimée. |
| Restaurez une table vers une version spécifique. | |
| Restaurez une table vers une version et enregistrez-la en tant que nouvelle table (ou table existante). | |
| Restaurez une ou plusieurs partitions supprimées. | |
| Restaurez des partitions vers une version spécifique. | |
| Restaurez des partitions vers une version et enregistrez-les en tant que nouvelle table. | |
Nettoyage |
| Supprimez définitivement les données historiques présentes dans la corbeille. |
Notes d'utilisation
Utilisez la dernière version du client MaxCompute pour accéder à toutes les commandes de sauvegarde et de restauration.
Les tables de sauvegarde sont créées uniquement lors de la modification des données. En l'absence de modification, aucune entrée de sauvegarde n'est générée.
Les données de sauvegarde qui dépassent la période de rétention sont automatiquement supprimées et ne peuvent plus être restaurées ni interrogées.
Pour plus d'informations sur les autorisations requises, consultez la page Autorisations MaxCompute.