Pular para o conteúdo principal

Usando o Time Travel do Snowflake: um guia completo

Descubra como usar o Snowflake Time Travel para consultar histórico, clonar tabelas e restaurar dados com nosso guia aprofundado sobre recuperação de banco de dados.
Atualizado 17 de set. de 2026  · 9 min lido

Explorar com IA

ChatGPTClaudePerplexity

O que é o Time Travel no Snowflake?

Assim como desenvolvedores de software usam o Git para controle de versão, engenheiros de dados têm o Time Travel nos bancos de dados Snowflake. O recurso Time Travel permite que administradores consultem dados históricos, clonem tabelas antigas e restaurem objetos excluídos no passado.

No entanto, como os bancos de dados podem atingir tamanhos enormes, o Time Travel não é um substituto direto do controle de versão de código. Toda vez que uma tabela é modificada (linhas deletadas ou atualizadas), o Snowflake cria um snapshot do estado dos dados antes da atualização. Esse snapshot só fica disponível por um número específico de dias, chamado de período de retenção de dados.

Para contas Snowflake Standard, o período máximo de retenção é de apenas um dia. Para contas Enterprise, ele pode variar de 0 a 90 dias. Um período de retenção 0 desativa o Time Travel (que é habilitado por padrão para todas as tabelas).

Snowflake Time Travel vs. Fail-safe

Ao ler a documentação do Snowflake, você também pode se deparar com o termo “Fail-safe”. Pelo nome, pode parecer que Time Travel e Fail-safe fazem a mesma coisa, mas não fazem.

Quando um objeto conclui seu período de retenção, ele é movido para o Fail-safe do Snowflake. No Fail-safe, você não pode:

  • Consultar dados históricos
  • Clonar objetos passados
  • Restaurar objetos passados que foram excluídos

O Fail-safe mantém os dados por apenas 7 dias e esse prazo não é configurável. Durante esse período, a recuperação só pode ser feita pelo próprio Snowflake. Esse recurso existe como um serviço de recuperação de dados e deve ser usado apenas como último recurso, quando todos os outros métodos falham. É indicado para situações em que dados foram danificados ou excluídos por falhas operacionais.

Portanto, você não pode pedir ao Snowflake que recupere versões antigas dos seus objetos depois que eles saem naturalmente do período de retenção configurado. Tenha essa regra em mente ao seguir este tutorial.

Configurando o ambiente

O Snowflake tem duas interfaces para interagir com a plataforma: o SnowSight (UI web) e o Snowflake CLI (cliente de terminal). Vamos usar o SnowSight, pois é mais simples de começar. Se você é novo no Snowflake, leia este tutorial completo. Ele também cobre como usar o Snowflake CLI.

Primeiro, crie uma conta gratuita na página inicial do Snowflake. Você terá acesso aos recursos Enterprise por um teste gratuito de 30 dias.

Snowflake homepage

Quando sua conta estiver pronta, você será levado à página Worksheets do seu painel. Pense em cada worksheet como um ambiente separado para executar SQL ou até Python.

Snowflake worksheets

Agora, crie uma nova worksheet usando o botão “+” no canto superior direito:

Creating databases and tables in Snowflake

Em seguida, vamos criar alguns bancos de dados e tabelas e preenchê-los com dados.

Criando o banco de dados e as tabelas

Primeiro, vamos criar um banco de dados chamado ecommerce_db. Cole o código abaixo e pressione "Ctrl + Enter" (Cmd + Enter) para executar ("Ctrl + Shift + Enter" executa todas as instruções da worksheet).

CREATE DATABASE IF NOT EXISTS ecommerce_db;

Usaremos esse banco hipotético para vender produtos relacionados a IA. Execute o comando abaixo para defini-lo como padrão:

USE DATABASE ecommerce_db;

Agora, vamos criar uma tabela chamada inventory com três colunas:

CREATE OR REPLACE TABLE inventory (
 product_id INT PRIMARY KEY,
 name VARCHAR(255),
 stock_level INT,
 last_updated TIMESTAMP_TZ DEFAULT CURRENT_TIMESTAMP
);

Depois, vamos inserir alguns produtos iniciais:

INSERT INTO inventory (product_id, name, stock_level)
VALUES (1, Llama hoodie', 10), (2, Falcon cap', 20);

Também vamos criar uma tabela para pedidos:

CREATE OR REPLACE TABLE orders (
 order_id INT PRIMARY KEY,
 product_id INT REFERENCES inventory(product_id),
 quantity INT,
 order_date TIMESTAMP_TZ DEFAULT CURRENT_TIMESTAMP
);
-- Assume some time passes after this table was created

Depois de publicar um site para vender nossos produtos, recebemos alguns pedidos. Pela manhã, chegam dois pedidos para ambos os produtos:

INSERT INTO orders (order_id, product_id, quantity)
VALUES (1, 1, 5), (1, 2, 3);

À tarde, recebemos outro:

-- Simulate a system glitch causing an extra order for product 1
INSERT INTO orders (order_id, (product_id, quantity)
VALUES  (3, 1, 100);  -- This might cause negative stock

Mas, por causa de uma falha no sistema, o pedido foi registrado com uma quantidade maior do que temos em estoque. Vamos fingir que só percebemos isso duas semanas depois.

Obs.: fiz algumas outras atualizações nas tabelas nos bastidores.

Controlando o período de retenção

Nossa primeira tarefa é definir um período de retenção. Meu teste gratuito terminou, então só posso configurá-lo para um dia:

ALTER TABLE inventory SET DATA_RETENTION_TIME_IN_DAYS=1;
ALTER TABLE orders SET DATA_RETENTION_TIME_IN_DAYS=1;

Se o seu ainda estiver ativo, tente definir para quatro semanas, já que o teste expira depois desse período.

Usando as cláusulas AT e BEFORE

O Snowflake implementa o Time Travel com estas extensões de SQL:

  • Cláusulas AT e BEFORE para usar em instruções SELECT e apontar o instante (ou período) exato no tempo que você quer consultar. Elas aceitam estes parâmetros:
  • TIMESTAMP
  • OFFSET - diferença de tempo em segundos em relação ao agora
  • STATEMENT - ID único da consulta
  • Comando UNDROP para restaurar tabelas, schemas e bancos de dados

Vamos ver como usar essas extensões no nosso banco de exemplo.

Consultando dados históricos

Primeiro, vamos ver o que temos em inventory:

-- Check current stock level (might show negative value)
SELECT * FROM inventory;

Querying historical data snowflake

Agora, vamos combinar os pedidos com o inventário:

SELECT i.name, i.stock_level, o.quantity as "order_amount"
 FROM inventory as i
 JOIN orders as o
   ON i.product_id = o.product_id;

Snowflake example combine the orders and inventory

Ih! Parece que há um erro — a quantidade de pedidos do Llama hoodie é maior do que temos. Vamos voltar 17,5 horas para identificar o momento exato em que a instrução incorreta foi executada:

SELECT * FROM orders AT(OFFSET => -60*60*17.5); -- Go back 17.5

Snowflake time travel

Então, o pedido incorreto foi feito às 16h54 do dia 6 de março. Isso significa que precisamos do estado da tabela antes desse horário. É fácil consultar isso com a cláusula BEFORE:

-- Change the timezone
ALTER SESSION  SET TIMEZONE = 'UTC';

-- Select the table state before the error
SELECT * FROM orders BEFORE(TIMESTAMP => '2024-03-06 04:54:00 -0800'::timestamp_tz);

Não esqueça de usar timestamp_tz como tipo de dado do carimbo de tempo. tz significa fuso horário.

add timestamp_tz as a data type

Esses exemplos mostram como usar as cláusulas AT e BEFORE com timestamps e offsets. Se você não quiser ter que descobrir o horário das consultas, pode usar os IDs das instruções.

Por exemplo, a consulta abaixo executa a mesma tarefa da última — consultar o estado da tabela antes do pedido incorreto:

SELECT * FROM orders BEFORE(STATEMENT => '01b2ce86-0000-95e2-0000-000669127035');

Veja como encontrar o ID de qualquer consulta:

Snowflake Find Query ID

Filtrando pelo tipo de consulta, você encontra o que procura muito mais rápido no SnowSight.

Clonando objetos históricos

Temos um pedido incorreto na tabela — como nos livramos dele?

Uma alternativa é clonar a tabela sem a linha incorreta:

CREATE OR REPLACE TABLE orders_clone AS
SELECT * FROM orders WHERE quantity != 100;

SELECT * FROM orders_clone;

Cloning historical objects

Funcionou — e nem precisamos do Time Travel para corrigir o problema. Mas, quando for necessário clonar estados passados de uma tabela, use esta sintaxe:

-- Clone an object as it existed 2 days ago
CREATE TABLE old_table_clone CLONE olt_table
   AT(OFFSET => -2 * 24 * 60 * 60);  -- Offset for 2 days

Clonar bancos de dados é similar:

CREATE DATABASE cloned_db CLONE my_db
 BEFORE(STATEMENT => '8e5d0ca9-005e-44e6-b858-a8f5b37c5726');

Excluindo e restaurando objetos

Suponha que acabamos de contratar um estagiário e passamos a ele o problema do pedido incorreto.

Ao tentar remover o registro, o estagiário, sem querer, exclui a tabela de pedidos em produção:

-- Simulate accidentally dropping the orders table
DROP TABLE orders

SELECT * FROM orders;;

Dropping and restoring objects

O estagiário vem falar com a gente, desesperado, e conta o que fez. Aí, nós calmamente executamos o comando UNDROP:

-- Recover the dropped table using UNDROP
UNDROP TABLE orders

SELECT * FROM orders;;

E recuperamos a tabela. Também perdoamos o estagiário e (claro) decidimos não demiti-lo por esse erro.

Conclusão

Neste tutorial, vimos um recurso essencial do Snowflake — o Time Travel. Com ele, você pode consultar e restaurar informações do passado, algo muito valorizado em ferramentas de gerenciamento de bancos de dados.

Tudo pode acontecer em produção, e ter um backup do seu banco antes de cada atualização traz tranquilidade.

Eu considero o Snowflake a melhor ferramenta de gerenciamento de bancos de dados disponível. É uma plataforma robusta, e dominá-la é uma habilidade muito desejada em carreiras de dados. Se quiser se aprofundar, confira o curso Introduction to Snowflake na DataCamp.

Se você já está à vontade com a ferramenta e quer testar suas habilidades, veja as melhores certificações Snowflake disponíveis em 2024.


Bexruz (Bex) Tuychiev's photo
Author
Bexruz (Bex) Tuychiev
LinkedIn

Sou criador de conteúdo em ciência de dados há mais de 2 anos e um dos perfis com maior alcance no Medium. Gosto de escrever artigos detalhados sobre IA e ML, com uma pitada de sarcasmo — porque alguém precisa deixar o assunto menos monótono. Já publiquei mais de 130 artigos e um curso na DataCamp, com outro em andamento. Meu conteúdo já alcançou mais de 5 milhões de visualizações, e 20 mil pessoas passaram a me seguir no Medium e no LinkedIn. 

Tópicos
Engenharia de dados

Comece sua jornada no Snowflake hoje!

Curso

Introdução ao Snowflake SQL

2 h
55.8K
Aprenda desde os fundamentos do Snowflake até as técnicas avançadas de SnowSQL neste curso completo.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

blog

Qual é a melhor certificação Snowflake para 2026?

Descubra as principais certificações Snowflake para 2026 com este guia completo. Veja qual certificação Snowflake combina com seus objetivos de carreira.
Matt Crabtree's photo

Matt Crabtree

11 min

blog

As 20 principais perguntas do Snowflake para entrevistas de todos os níveis

Você está procurando um emprego que utilize o Snowflake? Prepare-se com estas 20 principais perguntas da entrevista do Snowflake para conseguir o emprego!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

15 min

Tutorial

Tutorial do MySQL: Um guia abrangente para iniciantes

Descubra o que é o MySQL e como começar a usar um dos sistemas de gerenciamento de banco de dados mais populares.
Javier Canales Luna's photo

Javier Canales Luna

15 min

Tutorial

Tutorial de visão geral do banco de dados SQL

Neste tutorial, você aprenderá sobre bancos de dados em SQL.
DataCamp Team's photo

DataCamp Team

3 min

Tutorial

Tutorial do SQL Server: Desbloqueie o poder do gerenciamento de dados

Explore o gerenciamento de dados com nosso tutorial do SQL Server. Do básico ao uso avançado, aprimore suas habilidades e navegue no SQL Server com confiança.

Kevin Babitz

13 min

Tutorial

Como criar tabelas de datas no Power BI Tutorial

Saiba como criar tabelas de datas no Power BI com este tutorial visual passo a passo.
Kafaru Simileoluwa's photo

Kafaru Simileoluwa

12 min

Ver MaisVer Mais