O Time Travel permite consultar dados históricos em uma tabela transacional (Delta) em qualquer limite de transação passado dentro da janela de retenção configurada. Leia os dados como existiam em um timestamp ou version ID específico e restaure uma tabela para um estado anterior.
Casos de Uso
Recuperação de erros: Consulte a tabela em um ponto anterior a uma gravação incorreta, pipeline com falha ou exclusão acidental e use os resultados para corrigir dados downstream.
Auditorias históricas: Inspecione o estado exato de um conjunto de dados em qualquer limite de transação passado para verificações de conformidade e investigações de linhagem de dados.
Comparação de dados: Compare dados em duas versões históricas diferentes para entender como os registros mudaram entre execuções de processamento.
Restauração para um ponto no tempo: Reverta uma tabela inteira para uma versão histórica específica a fim de desfazer um lote de alterações.
Pré-requisitos
O Time Travel é compatível apenas com tabelas transacionais. Tabelas não transacionais e tabelas externas não são compatíveis com esse recurso.
Os dados históricos estão disponíveis somente dentro da janela de retenção configurada. Configure a propriedade de tabela acid.data.retain.hours para reter dados históricos. Consulte Configure data retention para obter detalhes.
Consultar Dados Históricos
Consulta por timestamp
Use TIMESTAMP AS OF para ler a tabela como ela existia em um momento específico.
-- Query using a specific timestamp SELECT FROM src TIMESTAMP AS OF '2024-01-15 10:00:00'; -- Query using the timestamp of the last committed version SELECT FROM src TIMESTAMP AS OF get_latest_timestamp(1);
A função get_latest_timestamp recebe um parâmetro: o número de commits a retroceder. get_latest_timestamp(1) retorna o timestamp da versão confirmada mais recentemente.
Consulta por version ID
Use VERSION AS OF para ler a tabela em um version ID de transação específico.
-- Query using a specific version ID SELECT FROM src VERSION AS OF 3; -- Query using the version ID of the last committed version SELECT FROM src VERSION AS OF get_latest_version(2);
A função get_latest_version recebe um parâmetro: o número de commits a retroceder. get_latest_version(2) retorna o version ID dois commits antes do mais recente.
Restaurar uma Tabela para uma Versão Histórica
Use restore para sobrescrever o estado atual da tabela com dados de uma versão histórica. Essa operação é irreversível.
-- Restore to a specific timestamp RESTORE TABLE src TO TIMESTAMP AS OF '2024-01-15 10:00:00'; -- Restore to a specific version ID RESTORE TABLE src TO VERSION AS OF 3;
Tipos de Versão de Transação
O Time Travel é compatível com dois tipos de versão:
|
Tipo de versão |
Descrição |
Cláusula SQL |
|
Versão por tempo |
Identifica uma transação pelo timestamp |
|
|
Versão por ID |
Identifica uma transação pelo version ID interno |
|
Use get_latest_timestamp e get_latest_version quando precisar referenciar uma versão relativa ao commit mais recente em vez de usar um valor absoluto. O segundo parâmetro de ambas as funções indica o número de vezes que os dados foram confirmados por último, que o MaxCompute usa para resolver o version ID interno correspondente.
Configurar a Retenção de Dados
A propriedade de tabela acid.data.retain.hours controla por quanto tempo os dados históricos são mantidos. Defina-a com ALTER TABLE:
-- Set a 48-hour retention window ALTER TABLE src SET TBLPROPERTIES ('acid.data.retain.hours' = '48');
O período máximo de retenção é de sete dias. Escolha um valor que atenda aos seus requisitos operacionais. Um período de retenção mais longo aumenta os custos de armazenamento, pois o MaxCompute precisa preservar os arquivos Delta históricos.
Para desabilitar o Time Travel e reduzir os custos de armazenamento, defina acid.data.retain.hours como 0:
-- Disable Time Travel for a table ALTER TABLE src SET TBLPROPERTIES ('acid.data.retain.hours' = '0');
Definir a propriedade como 0 interrompe a retenção de dados históricos e reduz consideravelmente os custos de armazenamento.
Como Funciona
O diagrama a seguir ilustra o processo interno de consulta do Time Travel em uma tabela transacional.

Ao executar uma consulta de Time Travel, o MaxCompute:
Analisa a instrução SQL e identifica a versão de destino (timestamp ou version ID).
Localiza o base file mais recente que se enquadra no intervalo de tempo dessa versão.
Localiza os delta files gravados após a geração do arquivo base, até a versão de destino.
Mescla o arquivo base e os arquivos Delta relevantes para produzir o resultado da consulta.
**Exemplo: tabela transacional src**
Considere uma tabela transacional chamada src com as colunas pk e val. Cinco transações de gravação são executadas nos pontos de tempo t1 a t5, gerando cinco arquivos Delta. O Compaction ocorre em t2 e t4, gerando os arquivos base b1 e b2, respectivamente.
Durante a compactação em t2, o registro de estado intermediário histórico (2,a) é removido do arquivo base b1 e apenas o registro de estado mais recente (2,b) é mantido em b1.
|
Ponto de tempo da consulta |
Arquivos lidos |
Resultado |
|
t1 |
Somente o arquivo Delta d1 |
Saída de d1 |
|
t2 |
Somente o arquivo base b1 |
Três registros |
|
t3 |
Arquivo base b1 + arquivo Delta d3 |
Saída mesclada |
|
t4, t5 |
Arquivo base b2 + arquivos Delta relevantes |
Saída mesclada |
Os arquivos base melhoram a eficiência de consulta e leitura ao fornecer um snapshot compacto e mesclado do estado da tabela em um determinado ponto. No entanto, consultas em arquivos base acionam operações de compaction que consomem grande quantidade de recursos. Escolha uma política de acionamento de compactação adequada à sua carga de trabalho.
Limitações
O Time Travel é compatível apenas com tabelas transacionais (Delta). Tabelas não transacionais e tabelas externas não são compatíveis.
Dados históricos mais antigos do que a janela de retenção configurada deixam de estar disponíveis para consulta ou restauração.
O período máximo de retenção é de sete dias, independentemente do valor definido em
acid.data.retain.hours.Definir
acid.data.retain.hourscomo0desabilita o Time Travel e remove a retenção de dados históricos da tabela.