Scopri come sfruttare Snowflake Time Travel per interrogare la cronologia, clonare tabelle e ripristinare i dati con la nostra guida approfondita al recovery del database.
Così come gli ingegneri software usano Git per il controllo di versione, i data engineer hanno Time Travel nei database Snowflake. La funzione Time Travel permette agli amministratori del database di interrogare i dati storici, clonare vecchie tabelle e ripristinare oggetti eliminati in passato.
Tuttavia, dato che i database possono crescere fino a dimensioni enormi, Time Travel non è l'equivalente plug-and-play del controllo di versione del codice. Ogni volta che una tabella viene modificata (eliminata o aggiornata), Snowflake scatta un'istantanea dello stato dei dati prima dell'aggiornamento. Questa istantanea vive solo per un numero di giorni specificato, chiamato periodo di conservazione dei dati.
Per gli account Snowflake Standard, il periodo massimo di conservazione è di un solo giorno. Per gli account Enterprise, il periodo può andare da 0 a 90 giorni. Un periodo di conservazione pari a 0 disattiva di fatto Time Travel, che è abilitato per impostazione predefinita su tutte le tabelle.
Snowflake Time Travel vs. Fail-safe
Leggendo la documentazione di Snowflake, potresti imbatterti anche nel termine “Fail-safe”. Dai nomi potrebbe sembrare che le funzioni Time Travel e Fail-safe svolgano lo stesso compito, ma non è così.
Quando un oggetto termina il suo periodo di conservazione, viene quindi spostato nel Fail-safe di Snowflake. In Fail-safe non puoi:
Interrogare i dati storici
Clonare oggetti passati
Ripristinare oggetti passati che sono stati eliminati
Fail-safe conserva i dati solo per un periodo non configurabile di 7 giorni. Durante questo periodo, i dati possono essere recuperati solo da Snowflake stesso. Questa funzione è pensata come un servizio di recupero dati ed è destinata a essere usata solo come ultima risorsa quando tutti i metodi di ripristino falliscono. Va usata solo quando i dati sono stati danneggiati o eliminati a causa di errori operativi.
Quindi, non puoi chiedere a Snowflake di recuperare versioni passate dei tuoi oggetti una volta che hanno trascorso naturalmente il loro periodo di conservazione stabilito. Tieni a mente questa regola mentre segui questo tutorial.
Configurare l'ambiente
Snowflake ha due interfacce per interagire con la piattaforma: SnowSight (la web UI) e Snowflake CLI (il client da terminale). Andremo avanti con SnowSight perché è più semplice da configurare. Puoi leggere questo tutorial completo se sei alle prime armi con Snowflake. Copre anche come usare Snowflake CLI.
Per iniziare, registrati per un account gratuito dalla homepage di Snowflake. Potrai accedere alle funzionalità Enterprise per una prova gratuita di 30 giorni.
Una volta che il tuo account è pronto, verrai indirizzato alla pagina Worksheets della tua dashboard. Puoi considerare ogni worksheet come un ambiente separato in cui eseguire SQL o anche Python.
Ora crea un nuovo worksheet usando il pulsante “+” in alto a destra:
Successivamente, creiamo alcuni database e tabelle e popoliamoli con dei dati.
Creare il database e le tabelle
Per prima cosa creeremo un database chiamato ecommerce_db. Incolla il codice seguente e premi "Ctrl + Invio" (Cmd + Invio) per eseguirlo ("Ctrl + Shift + Invio" esegue tutte le istruzioni del 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 createdOfferto da
Dopo aver messo online un sito per vendere il nostro merchandise, riceviamo alcuni ordini. Al mattino riceviamo due ordini per entrambi i nostri prodotti:
INSERTINTO orders (order_id, product_id, quantity)VALUES(1,1,5),(1,2,3);Offerto da
Nel pomeriggio, ne arriva un altro:
-- 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 stockOfferto da
Ma a causa di un glitch di sistema, l'ordine viene registrato per più stock di quello che abbiamo. Facciamo finta di non accorgercene per due settimane.
Nota che ho fatto qualche altro aggiornamento alle tabelle dietro le quinte.
Controllare il periodo di conservazione
Il nostro primo compito è impostare un periodo di conservazione. La mia prova gratuita è finita, quindi posso impostarlo solo per un giorno:
ALTERTABLE inventory SET DATA_RETENTION_TIME_IN_DAYS=1;ALTERTABLE orders SET DATA_RETENTION_TIME_IN_DAYS=1;Offerto da
Se la tua non è finita, prova a impostarlo su quattro settimane, dato che la prova scadrà dopo quel periodo.
Uso delle clausole AT e BEFORE
Snowflake implementa Time Travel tramite queste estensioni SQL:
Clausole AT e BEFORE da usare nelle istruzioni SELECT per individuare l'esatto punto (o periodo) nel tempo che vuoi interrogare. Supportano questi parametri per eseguire il compito:
TIMESTAMP
OFFSET - differenza temporale in secondi dal momento presente
STATEMENT - ID univoco della query
Comando UNDROP per ripristinare tabelle, schemi e database
Vediamo come usare queste estensioni sul nostro database di esempio.
Interrogare i dati storici
Per cominciare, vediamo cosa abbiamo in inventory:
-- Check current stock level (might show negative value)SELECT*FROM inventory;Offerto da
Ora uniamo gli ordini e l'inventario che abbiamo:
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;Offerto da
Ops! Sembra ci sia un errore: la quantità di ordini per la Llama hoodie è superiore a quella che abbiamo. Proviamo a tornare indietro di 17,5 ore per individuare il momento esatto in cui è stata eseguita l'istruzione errata:
SELECT*FROM orders AT(OFFSET=>-60*60*17.5);-- Go back 17.5Offerto da
Quindi, l'ordine errato è stato inserito alle 16:54 del 6 marzo. Questo significa che ci serve lo stato della tabella prima di quell'ora. È facile interrogarlo con la clausola 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);Offerto da
Non dimenticare di aggiungere timestamp_tz come tipo di dato per il timestamp. tz sta per fuso orario (time zone).
Questi esempi mostrano come usare le clausole AT e BEFORE con timestamp e offset. Se non vuoi dover calcolare l'orario delle query, puoi usare gli ID delle istruzioni.
Per esempio, la query qui sotto esegue lo stesso compito dell'ultima: interroga lo stato della tabella prima che fosse inserito l'ordine errato:
SELECT*FROM orders BEFORE(STATEMENT =>'01b2ce86-0000-95e2-0000-000669127035');Offerto da
Ecco come puoi trovare l'ID query di qualsiasi istruzione:
Filtrando il tipo di query, puoi trovare molto più velocemente quella che cerchi in SnowSight.
Clonare oggetti storici
Dunque, abbiamo un ordine errato nella nostra tabella: come ce ne sbarazziamo?
Una cosa che possiamo provare è clonare la tabella senza la riga errata:
CREATEORREPLACETABLE orders_clone ASSELECT*FROM orders WHERE quantity !=100;SELECT*FROM orders_clone;Offerto da
Ha funzionato e non abbiamo dovuto affidarci a Time Travel per risolvere il problema. Ma quando ti serve clonare stati passati di una tabella, ecco una sintassi che puoi seguire:
-- Clone an object as it existed 2 days agoCREATETABLE old_table_clone CLONE olt_table
AT(OFFSET=>-2*24*60*60);-- Offset for 2 daysOfferto da
Clonare i database è simile:
CREATEDATABASE cloned_db CLONE my_db
BEFORE(STATEMENT =>'8e5d0ca9-005e-44e6-b858-a8f5b37c5726');Offerto da
Eliminare e ripristinare oggetti
Diciamo che abbiamo appena assunto un/una stagista e gli/le abbiamo assegnato il problema dell'ordine errato.
Nel tentativo di rimuovere quel record, lo/la stagista elimina per sbaglio la tabella degli ordini in produzione:
-- Simulate accidentally dropping the orders tableDROPTABLE orders
SELECT*FROM orders;;Offerto da
Lo/la stagista viene da noi, nel panico, e ci dice cosa ha fatto. Quindi, eseguiamo con calma il comando UNDROP:
-- Recover the dropped table using UNDROP
UNDROP TABLE orders
SELECT*FROM orders;;Offerto da
E recuperiamo la tabella. Perdoniamo anche lo/la stagista e (ovviamente) decidiamo di non licenziarlo/la per l'errore.
Conclusione
In questo tutorial abbiamo visto una funzione chiave di Snowflake: Time Travel. Con Time Travel puoi interrogare e ripristinare informazioni passate, una funzionalità molto ricercata negli strumenti di gestione dei database.
In produzione può succedere di tutto e avere un backup del database prima di ogni aggiornamento trasmette tranquillità.
Penso che Snowflake sia il miglior strumento di gestione dei database in circolazione. È uno strumento enorme e padroneggiarlo è una competenza preziosa nei ruoli data. Quindi, se vuoi saperne di più, dai un'occhiata al corso Introduction to Snowflake su DataCamp.
Sono un creator di contenuti sulla data science con oltre 2 anni di esperienza e uno dei più seguiti su Medium. Mi piace scrivere articoli dettagliati su AI e ML con un pizzico di sarcasmo, perché bisogna pur fare qualcosa per renderli un po’ meno noiosi. Ho pubblicato oltre 130 articoli e un corso su DataCamp, con un altro in arrivo. I miei contenuti sono stati visti da oltre 5 milioni di persone, 20.000 delle quali sono diventate follower sia su Medium che su LinkedIn.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Che cos'è il Time Travel in Snowflake?
Così come gli ingegneri software usano Git per il controllo di versione, i data engineer hanno Time Travel nei database Snowflake. La funzione Time Travel permette agli amministratori del database di interrogare i dati storici, clonare vecchie tabelle e ripristinare oggetti eliminati in passato.
Tuttavia, dato che i database possono crescere fino a dimensioni enormi, Time Travel non è l'equivalente plug-and-play del controllo di versione del codice. Ogni volta che una tabella viene modificata (eliminata o aggiornata), Snowflake scatta un'istantanea dello stato dei dati prima dell'aggiornamento. Questa istantanea vive solo per un numero di giorni specificato, chiamato periodo di conservazione dei dati.
Per gli account Snowflake Standard, il periodo massimo di conservazione è di un solo giorno. Per gli account Enterprise, il periodo può andare da 0 a 90 giorni. Un periodo di conservazione pari a 0 disattiva di fatto Time Travel, che è abilitato per impostazione predefinita su tutte le tabelle.
Snowflake Time Travel vs. Fail-safe
Leggendo la documentazione di Snowflake, potresti imbatterti anche nel termine “Fail-safe”. Dai nomi potrebbe sembrare che le funzioni Time Travel e Fail-safe svolgano lo stesso compito, ma non è così.
Quando un oggetto termina il suo periodo di conservazione, viene quindi spostato nel Fail-safe di Snowflake. In Fail-safe non puoi:
Fail-safe conserva i dati solo per un periodo non configurabile di 7 giorni. Durante questo periodo, i dati possono essere recuperati solo da Snowflake stesso. Questa funzione è pensata come un servizio di recupero dati ed è destinata a essere usata solo come ultima risorsa quando tutti i metodi di ripristino falliscono. Va usata solo quando i dati sono stati danneggiati o eliminati a causa di errori operativi.
Quindi, non puoi chiedere a Snowflake di recuperare versioni passate dei tuoi oggetti una volta che hanno trascorso naturalmente il loro periodo di conservazione stabilito. Tieni a mente questa regola mentre segui questo tutorial.
Configurare l'ambiente
Snowflake ha due interfacce per interagire con la piattaforma: SnowSight (la web UI) e Snowflake CLI (il client da terminale). Andremo avanti con SnowSight perché è più semplice da configurare. Puoi leggere questo tutorial completo se sei alle prime armi con Snowflake. Copre anche come usare Snowflake CLI.
Per iniziare, registrati per un account gratuito dalla homepage di Snowflake. Potrai accedere alle funzionalità Enterprise per una prova gratuita di 30 giorni.
Una volta che il tuo account è pronto, verrai indirizzato alla pagina Worksheets della tua dashboard. Puoi considerare ogni worksheet come un ambiente separato in cui eseguire SQL o anche Python.
Ora crea un nuovo worksheet usando il pulsante “+” in alto a destra:
Successivamente, creiamo alcuni database e tabelle e popoliamoli con dei dati.
Creare il database e le tabelle
Per prima cosa creeremo un database chiamato
ecommerce_db. Incolla il codice seguente e premi "Ctrl + Invio" (Cmd + Invio) per eseguirlo ("Ctrl + Shift + Invio" esegue tutte le istruzioni del worksheet).Useremo questo database ipotetico per vendere merchandising legato all'AI. Esegui il seguente comando per impostarlo come predefinito:
Per prima cosa, creeremo una tabella chiamata
inventorycon tre colonne:Poi aggiungeremo alcuni prodotti iniziali:
Creeremo anche una tabella per gli ordini:
Dopo aver messo online un sito per vendere il nostro merchandise, riceviamo alcuni ordini. Al mattino riceviamo due ordini per entrambi i nostri prodotti:
Nel pomeriggio, ne arriva un altro:
Ma a causa di un glitch di sistema, l'ordine viene registrato per più stock di quello che abbiamo. Facciamo finta di non accorgercene per due settimane.
Nota che ho fatto qualche altro aggiornamento alle tabelle dietro le quinte.
Controllare il periodo di conservazione
Il nostro primo compito è impostare un periodo di conservazione. La mia prova gratuita è finita, quindi posso impostarlo solo per un giorno:
Se la tua non è finita, prova a impostarlo su quattro settimane, dato che la prova scadrà dopo quel periodo.
Uso delle clausole
ATeBEFORESnowflake implementa Time Travel tramite queste estensioni SQL:
ATeBEFOREda usare nelle istruzioniSELECTper individuare l'esatto punto (o periodo) nel tempo che vuoi interrogare. Supportano questi parametri per eseguire il compito:TIMESTAMPOFFSET- differenza temporale in secondi dal momento presenteSTATEMENT- ID univoco della queryUNDROPper ripristinare tabelle, schemi e databaseVediamo come usare queste estensioni sul nostro database di esempio.
Interrogare i dati storici
Per cominciare, vediamo cosa abbiamo in
inventory:Ora uniamo gli ordini e l'inventario che abbiamo:
Ops! Sembra ci sia un errore: la quantità di ordini per la Llama hoodie è superiore a quella che abbiamo. Proviamo a tornare indietro di 17,5 ore per individuare il momento esatto in cui è stata eseguita l'istruzione errata:
Quindi, l'ordine errato è stato inserito alle 16:54 del 6 marzo. Questo significa che ci serve lo stato della tabella prima di quell'ora. È facile interrogarlo con la clausola
BEFORE:Non dimenticare di aggiungere
timestamp_tzcome tipo di dato per il timestamp.tzsta per fuso orario (time zone).Questi esempi mostrano come usare le clausole
ATeBEFOREcon timestamp e offset. Se non vuoi dover calcolare l'orario delle query, puoi usare gli ID delle istruzioni.Per esempio, la query qui sotto esegue lo stesso compito dell'ultima: interroga lo stato della tabella prima che fosse inserito l'ordine errato:
Ecco come puoi trovare l'ID query di qualsiasi istruzione:
Filtrando il tipo di query, puoi trovare molto più velocemente quella che cerchi in SnowSight.
Clonare oggetti storici
Dunque, abbiamo un ordine errato nella nostra tabella: come ce ne sbarazziamo?
Una cosa che possiamo provare è clonare la tabella senza la riga errata:
Ha funzionato e non abbiamo dovuto affidarci a Time Travel per risolvere il problema. Ma quando ti serve clonare stati passati di una tabella, ecco una sintassi che puoi seguire:
Clonare i database è simile:
Eliminare e ripristinare oggetti
Diciamo che abbiamo appena assunto un/una stagista e gli/le abbiamo assegnato il problema dell'ordine errato.
Nel tentativo di rimuovere quel record, lo/la stagista elimina per sbaglio la tabella degli ordini in produzione:
Lo/la stagista viene da noi, nel panico, e ci dice cosa ha fatto. Quindi, eseguiamo con calma il comando
UNDROP:E recuperiamo la tabella. Perdoniamo anche lo/la stagista e (ovviamente) decidiamo di non licenziarlo/la per l'errore.
Conclusione
In questo tutorial abbiamo visto una funzione chiave di Snowflake: Time Travel. Con Time Travel puoi interrogare e ripristinare informazioni passate, una funzionalità molto ricercata negli strumenti di gestione dei database.
In produzione può succedere di tutto e avere un backup del database prima di ogni aggiornamento trasmette tranquillità.
Penso che Snowflake sia il miglior strumento di gestione dei database in circolazione. È uno strumento enorme e padroneggiarlo è una competenza preziosa nei ruoli data. Quindi, se vuoi saperne di più, dai un'occhiata al corso Introduction to Snowflake su DataCamp.
Se invece ti senti già a tuo agio e vuoi mettere alla prova le tue competenze, dai un'occhiata alle migliori certificazioni Snowflake disponibili nel 2024.