(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como fazer time travel numa tabela Delta no Lakehouse

João Barros 06 de July de 2026 4 min de leitura

O time travel do Delta Lake permite consultar uma tabela tal como estava no passado — antes de uma atualização, de uma eliminação ou de uma carga com problemas. Funciona porque o Delta guarda um registo (transaction log) de cada alteração e numera as versões automaticamente. Num Lakehouse do Microsoft Fabric todas as tabelas são Delta, por isso esta capacidade está disponível de origem, sem qualquer configuração. É perfeita para auditorias, para recuperar de erros e para reproduzir relatórios antigos com os dados corretos.

Pré-requisitos

  • Um workspace do Microsoft Fabric com um Lakehouse criado.
  • Um Notebook associado a esse Lakehouse, onde vai correr células de Spark SQL.
  • Uma tabela Delta para explorar (todas as tabelas do Lakehouse são Delta) ou a vontade de criar a tabela de exemplo abaixo.
  • Noções básicas de SQL.

Passo 1: Preparar a tabela e gerar versões

O time travel só é útil se a tabela tiver histórico, e cada escrita (INSERT, UPDATE, DELETE ou MERGE) cria uma nova versão. Vamos criar uma pequena tabela de vendas e alterá-la, para ter versões para explorar:

CREATE TABLE vendas (id INT, produto STRING, total INT);
INSERT INTO vendas VALUES (1, 'Teclado', 80), (2, 'Rato', 25);
UPDATE vendas SET total = 120 WHERE id = 1;

A criação fica registada na versão 0, o INSERT na versão 1 e o UPDATE na versão 2. Já temos histórico suficiente.

Passo 2: Ver o histórico de versões

O comando DESCRIBE HISTORY lista todas as versões da tabela, com o número, a data e hora e a operação que as criou:

DESCRIBE HISTORY vendas;

Repare nas colunas version, timestamp e operation. Cada linha corresponde a uma versão; quanto mais escritas fizer, mais fundo pode viajar no tempo. É a partir daqui que decide para que ponto no tempo quer voltar.

Passo 3: Consultar uma versão com VERSION AS OF

Para ler a tabela tal como estava numa versão concreta, acrescente VERSION AS OF seguido do número da versão. Vamos ver o estado na versão 1, antes do UPDATE:

SELECT id, produto, total FROM vendas VERSION AS OF 1;

O total do Teclado aparece como 80 (o valor original), embora na tabela atual já seja 120. A consulta lê o passado sem alterar nada no presente.

Passo 4: Consultar por data e hora com TIMESTAMP AS OF

Também pode viajar para um instante no tempo, em vez de um número de versão — útil quando sabe "como estava a certa hora" mas não o número exato. Copie uma data e hora da coluna timestamp do Passo 2:

SELECT id, produto, total FROM vendas TIMESTAMP AS OF '2026-07-06 04:02:00';

O Delta devolve a versão que estava ativa nesse instante. A data tem de estar dentro do histórico da tabela: não pode ser anterior à sua criação.

Passo 5: Restaurar uma versão anterior

Se quiser mesmo repor a tabela num estado antigo — por exemplo, para desfazer uma alteração errada — use RESTORE. Este comando cria uma nova versão com o conteúdo antigo e mantém todo o histórico:

RESTORE TABLE vendas TO VERSION AS OF 1;
Dica: o RESTORE não apaga versões. Se se enganar a restaurar, pode voltar atrás outra vez — o histórico continua lá.

Verificar o resultado

Volte a correr DESCRIBE HISTORY vendas e verá uma nova entrada cuja operation é RESTORE. Confirme depois o valor restaurado:

SELECT id, produto, total FROM vendas WHERE id = 1;

O total do Teclado deve ter voltado a 80, o valor da versão 1. Se for esse o número, o time travel e o RESTORE funcionaram como esperado.

Conclusão

Com DESCRIBE HISTORY, VERSION AS OF, TIMESTAMP AS OF e RESTORE ganhou uma verdadeira máquina do tempo para os seus dados, ideal para auditorias, recuperação de erros e para reproduzir análises antigas. Tenha só em conta que o histórico não é infinito: o comando VACUUM remove ficheiros de dados antigos (por predefinição mantém os últimos 7 dias), o que limita até quando pode viajar. Qual é a primeira tabela onde gostaria de ter tido esta rede de segurança?