O MaxCompute faz backup automático dos dados sempre que há modificações e retém esse backup por um período configurável. Caso ocorra exclusão ou sobrescrita acidental, restaure os dados para qualquer versão anterior dentro do período de retenção.

Como funciona
Sempre ativo -- Ativado por padrão com período de retenção de 24 horas. Não exige armazenamento externo nem gera custos adicionais.
Contínuo -- Cada modificação dispara um backup, garantindo que nenhuma alteração de dados seja perdida entre janelas agendadas.
Restauração rápida -- As operações de restauração não consomem recursos computacionais extras. Um único comando restaura uma tabela, partição ou versão específica.
Limitações
Não há suporte para materialized views, object tables e external tables.
Tabelas clusterizadas não podem ser restauradas.
Após a execução de
PURGE TABLEem uma tabela, os dados purgados não podem ser restaurados.Uma tabela ou partição excluída (incluindo Delta tables) não pode ser restaurada diretamente para um Log Sequence Number (LSN) específico. Restaure a tabela primeiro e depois restaure-a para o LSN desejado.
Limitações de Delta table
Uma Delta table ou partição excluída pode ser totalmente restaurada, mas não para uma minor version específica. Para consultar uma minor version específica, use o recurso de time travel.
-
Após a restauração de uma tabela excluída:
Consultar a tabela em um momento anterior à exclusão retorna dados como se a exclusão nunca tivesse ocorrido.
Consultar em um momento entre a exclusão e a restauração não retorna dados (o sistema trata como excluído).
Consultar em um momento posterior à restauração retorna dados como se nem a exclusão nem a restauração tivessem ocorrido. Os dados restaurados não são tratados como dados incrementais.
Consultar uma partição excluída antes de sua restauração não retorna resultados (igual a uma consulta normal em uma partição inexistente), em vez de gerar um erro.
Cada ciclo de exclusão e restauração gera novos timestamps de commit e números de versão. Ao restaurar uma tabela particionada, o sistema cria uma versão separada para cada partição.
Configurar o período de retenção
Defina o número de dias em que o MaxCompute retém os dados de backup. O intervalo válido é de 0 a 30. O valor padrão é 1 (24 horas). Definir como 0 desativa o backup.
-- Set the retention period to 7 days
setproject odps.timemachine.retention.days=7;
Apenas contas Alibaba Cloud ou administradores de projeto podem alterar o período de retenção.
Comportamento após a alteração do período de retenção:
|
Alteração |
Efeito |
|
Estender o período |
Entra em vigor no mesmo dia |
|
Reduzir o período |
O MaxCompute exclui automaticamente os dados de backup que excedem o novo período |
Para visualizar a configuração atual, execute setproject; no cliente MaxCompute (odpscmd) e verifique o valor de odps.timemachine.retention.days.
Visualizar histórico de backup
Listar todas as tabelas, incluindo as excluídas
SHOW HISTORY FOR tables;
Filtrar por nome:
SHOW HISTORY FOR tables LIKE test_restore_1;
Exemplo de saída:
Name Id Type IsPartitioned CreateTime DropTime
test_restore_1 a0b06367bd054d17a55505aa31601b89 MANAGED_TABLE FALSE 2025-07-18 16:32:13
Requer a permissão List no projeto. Consulte Permissões do MaxCompute .
Visualizar histórico de versões de uma tabela
SHOW HISTORY FOR TABLE <table_name> [LIMIT <n>] [LSN '<lsn>' | OFFSET <offset>];
Exemplo:
SHOW HISTORY FOR TABLE test_restore_1;
Exemplo de saída:
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
Requer a permissão ShowHistory na tabela. Se a tabela tiver sido excluída, este comando retornará um erro. Use SHOW HISTORY FOR tables LIKE <table_name>; em vez disso.
Visualizar histórico de versões de uma tabela excluída
Use o ID da tabela obtido com SHOW HISTORY FOR tables:
SHOW HISTORY FOR TABLE test_restore_2 ('id'='437b29466ba948b392b2090ec0a60fc2');
Requer a permissão List no projeto.
Visualizar histórico de versões de uma partição
-- 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');
Requer a permissão ShowHistory na tabela.
Para visualizar várias partições de uma vez:
SHOW HISTORY FOR TABLE test_restore_part_1 ('id'='fbee66b56cf544d2a9999d5d0ce5d352')
PARTITION(ds='20250701') PARTITION(ds='20250702');
Restaurar uma tabela não particionada
Restaurar uma tabela excluída
RESTORE TABLE <table_name> ('id'='<table_id>');
O nome da tabela não deve entrar em conflito com uma tabela existente. Renomeie a tabela existente primeiro, se necessário.
Exemplo:
-- 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');
Permissões:
Tabela existente: permissão Update na tabela.
Tabela inexistente: permissão CreateTable no projeto.
Restaurar uma tabela para uma versão específica
RESTORE TABLE <table_name> TO LSN '<lsn>';
Exemplo:
RESTORE TABLE test_restore_1 TO LSN '0000000000000004';
SELECT * FROM test_restore_1;
-- Returns:
-- +------------+
-- | colname |
-- +------------+
-- | 2 |
-- +------------+
Restaurar uma tabela para uma versão específica como uma nova tabela
RESTORE TABLE <table_name> TO LSN '<lsn>' AS <new_table_name>;
Este comando apresenta três comportamentos dependendo da tabela de destino:
|
Cenário |
Comportamento |
|
A tabela de destino não existe |
Cria a nova tabela com os dados restaurados |
|
A tabela de destino existe com o mesmo schema |
Sobrescreve os dados da tabela de destino |
|
A tabela de destino existe com um schema diferente |
Falha com o erro ODPS-0110061 |
Exemplo -- restaurar e renomear:
RESTORE TABLE test_restore_2 TO LSN '0000000000000003' AS test_restore_new;
SELECT * FROM test_restore_new;
-- Returns:
-- +------------+
-- | colname |
-- +------------+
-- | 1 |
-- +------------+
Restaurar uma tabela particionada
Restaurar uma tabela particionada excluída
RESTORE TABLE <table_name> ('id'='<table_id>');
Todas as partições que existiam no momento da exclusão são restauradas.
Restaurar partições excluídas
Restaure uma ou mais partições excluídas para uma tabela existente:
RESTORE TABLE <table_name> PARTITION('id'='<partition_id>') [PARTITION('id'='<partition_id>')];
A tabela deve existir. Se a tabela também foi excluída, restaure a tabela primeiro.
Exemplo:
-- 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');
Restaurar partições para uma versão específica
RESTORE TABLE <table_name>
PARTITION(<partition_spec>) [PARTITION(<partition_spec>)]
TO LSN '<lsn>';
Ao restaurar várias partições para um único LSN, cada partição é restaurada para o LSN especificado se esse LSN exato existir para a partição. Caso contrário, ela é restaurada para o LSN precedente mais próximo.
Exemplo: A partição pt1 possui os LSNs 100, 102, 104, 106. A partição pt2 possui os LSNs 101, 103, 104, 105. Restaurar ambas para o LSN 102 restaura pt1 para 102 e pt2 para 101.
RESTORE TABLE test_restore_part_y
PARTITION(ds='20250701') PARTITION(ds='20250702')
TO LSN '0000000000000010';
Restaurar partições para uma versão específica como uma nova tabela
RESTORE TABLE <table_name>
PARTITION(<partition_spec>) [PARTITION(<partition_spec>)]
TO LSN '<lsn>' AS <new_table_name>;
Exemplos de Delta table
Criar uma Delta table, inserir dados, excluir e restaurar
-- 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 |
-- +----+-----+----+----+
Obter o ID da tabela para restauração
Execute DESC EXTENDED mf_dt; e localize o campo TableID na seção Extended Info:
TableID: cd607cd938dc4ca6886dd12212995604
Excluir e restaurar a tabela
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.
Excluir e restaurar uma partição
-- 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 em uma tabela restaurada
Após restaurar uma Delta table, as consultas de time travel continuam funcionando:
-- 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.
Limpeza de arquivos de dados (Delta tables)
As Delta tables retêm dados históricos dentro do período de time travel, o que gera custos adicionais de armazenamento. O sistema exclui automaticamente dados históricos desnecessários em até um dia quando todas as seguintes condições forem atendidas:
Os dados são anteriores ao período de time travel. (Se o time travel estiver desativado para a tabela, todos os dados históricos se qualificam.)
Os dados excederam o ciclo de vida ou foram excluídos, e também excederam o tempo de proteção de backup.
"Dados históricos" refere-se a arquivos de dados movidos para o diretório da lixeira. Operações como exceder o ciclo de vida, executar uma exclusão, rodar compactação ou realizar INSERT OVERWRITE movem arquivos de dados para a lixeira.
Forçar limpeza com PURGE
Em operações normais, permita que o sistema gerencie a limpeza automaticamente. Use PURGE TABLE apenas em emergências — por exemplo, quando excesso de arquivos causa instabilidade no disco ou quando dados históricos provocam picos inesperados de custo.
PURGE TABLE <table_name>;
Após executar este comando, as consultas de time travel podem não retornar mais dados históricos.
Exemplo:
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 |
-- +----+-----+
Referência de comandos
Cenário | Comando | Descrição |
Configurar retenção |
| Define o período de retenção (0--30 dias). Padrão: 1. |
| Visualiza as configurações atuais do projeto, incluindo o período de retenção. | |
Visualizar histórico de backup |
| Lista todas as tabelas, incluindo as excluídas. Requer permissão List. |
| Visualiza o histórico de versões de uma tabela. Requer permissão ShowHistory. | |
| Visualiza o histórico de versões de uma tabela excluída pelo seu ID. Requer permissão List. | |
| Visualiza o histórico de versões de uma partição. Requer permissão ShowHistory. | |
| Visualiza o histórico de versões de uma partição excluída pelo seu ID. | |
Restaurar dados |
| Restaura uma tabela ou partição excluída. |
| Restaura uma tabela para uma versão específica. | |
| Restaura uma tabela para uma versão e salva como uma nova tabela (ou existente). | |
| Restaura uma ou mais partições excluídas. | |
| Restaura partições para uma versão específica. | |
| Restaura partições para uma versão e salva como uma nova tabela. | |
Limpeza |
| Força a exclusão de dados históricos na lixeira. |
Observações de uso
Use a versão mais recente do cliente MaxCompute para acessar todos os comandos de backup e restauração.
As tabelas de backup são criadas apenas quando há modificação de dados. Sem modificação, não há entrada de backup.
Os dados de backup que excedem o período de retenção são excluídos automaticamente e não podem ser restaurados ou consultados.
Para obter informações sobre as permissões necessárias, consulte Permissões do MaxCompute.