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.
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.
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.
Agora, crie uma nova worksheet usando o botão “+” no canto superior direito:
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).
CREATEORREPLACETABLE orders (
order_id INTPRIMARYKEY,
product_id INTREFERENCES inventory(product_id),
quantity INT,
order_date TIMESTAMP_TZ DEFAULTCURRENT_TIMESTAMP);-- Assume some time passes after this table was createdTecnologia
Depois de publicar um site para vender nossos produtos, recebemos alguns pedidos. Pela manhã, chegam dois pedidos para ambos os produtos:
-- Simulate a system glitch causing an extra order for product 1INSERTINTO orders (order_id,(product_id, quantity)VALUES(3,1,100);-- This might cause negative stockTecnologia
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:
ALTERTABLE inventory SET DATA_RETENTION_TIME_IN_DAYS=1;ALTERTABLE orders SET DATA_RETENTION_TIME_IN_DAYS=1;Tecnologia
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;Tecnologia
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;Tecnologia
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.5Tecnologia
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 timezoneALTERSESSIONSET TIMEZONE ='UTC';-- Select the table state before the errorSELECT*FROM orders BEFORE(TIMESTAMP=>'2024-03-06 04:54:00 -0800'::timestamp_tz);Tecnologia
Não esqueça de usar timestamp_tz como tipo de dado do carimbo de tempo. tz significa fuso horário.
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:
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:
CREATEORREPLACETABLE orders_clone ASSELECT*FROM orders WHERE quantity !=100;SELECT*FROM orders_clone;Tecnologia
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 agoCREATETABLE old_table_clone CLONE olt_table
AT(OFFSET=>-2*24*60*60);-- Offset for 2 daysTecnologia
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 tableDROPTABLE orders
SELECT*FROM orders;;Tecnologia
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;;Tecnologia
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.
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.
Descubra as principais certificações Snowflake para 2026 com este guia completo. Veja qual certificação Snowflake combina com seus objetivos de carreira.
Você está procurando um emprego que utilize o Snowflake? Prepare-se com estas 20 principais perguntas da entrevista do Snowflake para conseguir o emprego!
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.
Aprenda os fundamentos da engenharia de dados: projeto de banco de dados e armazenamento de dados, trabalhando com tecnologias como PostgreSQL e Snowflake!
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:
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.
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.
Agora, crie uma nova worksheet usando o botão “+” no canto superior direito:
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).Usaremos esse banco hipotético para vender produtos relacionados a IA. Execute o comando abaixo para defini-lo como padrão:
Agora, vamos criar uma tabela chamada
inventorycom três colunas:Depois, vamos inserir alguns produtos iniciais:
Também vamos criar uma tabela para pedidos:
Depois de publicar um site para vender nossos produtos, recebemos alguns pedidos. Pela manhã, chegam dois pedidos para ambos os produtos:
À tarde, recebemos outro:
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:
Se o seu ainda estiver ativo, tente definir para quatro semanas, já que o teste expira depois desse período.
Usando as cláusulas
ATeBEFOREO Snowflake implementa o Time Travel com estas extensões de SQL:
ATeBEFOREpara usar em instruçõesSELECTe apontar o instante (ou período) exato no tempo que você quer consultar. Elas aceitam estes parâmetros:TIMESTAMPOFFSET- diferença de tempo em segundos em relação ao agoraSTATEMENT- ID único da consultaUNDROPpara restaurar tabelas, schemas e bancos de dadosVamos ver como usar essas extensões no nosso banco de exemplo.
Consultando dados históricos
Primeiro, vamos ver o que temos em
inventory:Agora, vamos combinar os pedidos com o inventário:
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:
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:Não esqueça de usar
timestamp_tzcomo tipo de dado do carimbo de tempo.tzsignifica fuso horário.Esses exemplos mostram como usar as cláusulas
ATeBEFOREcom 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:
Veja como encontrar o ID de qualquer consulta:
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:
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:
Clonar bancos de dados é similar:
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:
O estagiário vem falar com a gente, desesperado, e conta o que fez. Aí, nós calmamente executamos o comando
UNDROP: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.