Insights / Blog

Dynamic Tables – Discovering Snowflake

Dynamic Tables – Discovering Snowflake

Benvenuti nella rubrica “Discovering Snowflake”, dove esploreremo le potenzialità di Snowflake e gli elementi che la costituiscono. In questa serie di articoli, vi accompagneremo in un viaggio di scoperta attraverso le funzionalità, i vantaggi e le migliori pratiche di Snowflake.

Che tu sia un professionista dei dati, un analista o uno sviluppatore, o semplicemente interessato a conoscere una delle soluzioni più innovative per l’elaborazione dei dati, questa rubrica ti offrirà una panoramica completa di Snowflake e ti guiderà nella comprensione delle sue caratteristiche chiave.

Nell’articolo di oggi approfondiremo una delle novità presentate durante il Summit Snowflake 2023: le Dynamic Tables.

Le Dynamic Tables, attualmente in fase di public preview, possono essere pensate come pipeline dinamiche di dati continui. Si tratta di un nuovo tipo di tabella Snowflake, che materializza automaticamente e in modo continuo i risultati di una query.

 

Immagine di proprietà di Snowflake

 

La sua semantica è piuttosto semplice, dal momento che ricorda lo script di creazione di una normale tabella Snowflake:

CREATE [ OR REPLACE ] DYNAMIC TABLE <name>
TARGET_LAG = ‘ { seconds | minutes | hours | days }’
WAREHOUSE = …
AS <select>

SELECT * FROM <name>

 

Questo script si caratterizza per tre componenti principali:

  1. DYNAMIC TABLE: si tratta di un qualifier che ci permette di definire dove salvare i risultati
  2. Refresh automatici: il TARGET_LAG permette di impostare un aggiornamento personalizzato dei dati. I dati che sono materializzati nelle Dynamic Table saranno aggiornati al target lag che si è impostato
  3. La sintassi di una una Dynamic Table include un vasto range di SQL statements: join, aggregazioni, window functions, unions, etc… E’ possibile scrivere davvero qualsiasi query!

Le Dynamic Tables sono estremamente flessibili per costruire qualsiasi logica dei dati desiderata. Possono unire e aggregare diverse fonti, tra cui tabelle, viste e altre Dynamic Tables per creare logiche complesse e rendere molto semplice la creazione dei data products su Snowflake. Le Dynamic Tables sono molto simili alle normali tabelle Snowflake, puoi interrogarle come qualsiasi altra tabella: le queries inoltre sono molto veloci poiché i risultati sono materializzati.

 

Quali sono le caratteristiche principali?

  1. Data Pipeline dichiarative – permettono di creare in modo semplice trasformazioni e pipelines di dati utilizzando SQL. È sufficiente specificare le trasformazioni desiderate e gli output, e si possono creare join di tabelle, viste e combinarle tra loro per costruire logiche complesse. Inoltre, è possibile definire la struttura dell’output delle pipeline tramite le query CTAS, eliminando la necessità di gestire manualmente jobs o tasks.
  2. Supporto SQL – è possibile utilizzare qualsiasi espressione di query SQL per definire le trasformazioni, in modo simile a come gli utenti definiscono le viste. Risulta facile trasferire la logica della pipeline attuale poiché si possono aggregare i dati, effettuare join tra più tabelle e utilizzare altri construct SQL.
  3. Refresh incrementali automatici – rappresentano un modo efficiente ed economico per aggiornare i dati, in quanto Snowflake elabora solo i dati che sono cambiati dal precedente refresh, evitando così di ricreare completamente la tabella ad ogni modifica. E’ evidente come l’elaborazione dei soli dati nuovi o modificati comporta significativi risparmi di costo, soprattutto quando il volume dei dati aumenta. Inoltre, le Dynamic Tables evitano automaticamente il refresh in caso non ci siano nuovi dati da elaborare o se le tabelle dipendenti sono ancora in fase di aggiornamento senza intervento dell’utente.
  4. Aggiornamento personalizzato (user-defined freshness) – con le Dynamic Tables è possibile definire il TARGET_LAG, ovvero un “ritardo programmato”. Questo ritardo indica di quanto tempo i dati possono essere “indietro” rispetto al tempo reale. Ad esempio, se si imposta un ritardo obiettivo di 5 minuti, significa che i risultati delle query sulle tabelle dinamiche potrebbero riflettere i dati fino a 5 minuti fa. Il target lag è quindi il tempo massimo di ritardo che si desidera avere tra l’arrivo dei dati e la loro disponibilità per l’elaborazione.
  5. Snapshot Isolation – questo concetto si riferisce a un meccanismo di isolamento dei dati in Snowflake, che assicura che i dati nelle tabelle dinamiche siano sempre coerenti. In particolare, questo assicura che anche se si utilizzano diverse fonti di dato per creare le Dynamic Tables, lo Snapshot Isolation garantisce che i dati delle tabelle all’interno di un DAG (Directed Acyclic Graph) siano affidabili.

Quando utilizzare le Dynamic Tables?

Quando si tratta di gestire e analizzare i dati in Snowflake, ci sono diverse opzioni a disposizione per soddisfare le diverse esigenze. Tra queste, le Dynamic Tables, le Materialized View e le Streams & Tasks offrono approcci differenti che possono essere adatti a diversi scenari.

Le Dynamic Tables sono ideali quando…

  • si desidera creare pipelines di trasformazione basate su SQL e specificare le tabelle di output desiderate.
  • la trasformazione dei dati richiede uno script SQL complesso, che include Join, Aggregazioni, Window Functions, ecc.
  • si sta costruendo una pipeline di trasformazioni anziché aggregazioni su una singola tabella
  • c’è bisogno di un maggiore controllo su quando vengono aggiornate le tabelle.

Le Materialized Views sono da prediligere quando…

  • c’è la necessità di creare visualizzazioni con strumenti di business intelligence che richiedono diversi livelli di aggregazione (query rewrite).
  • si desidera migliorare la prestazione di tabelle esterne.
  • c’è bisogno di aggregazioni semplici su una singola tabella.
  • i dati devono essere aggiornati il prima possibile.

Le Streams & Tasks sono da scegliere quando…

  • c’è bisogno di utilizzare UDFs/UDTFs, Stored Procedures, External Functions e trasformazioni Snowpark scritte in Python, Java o Scala.
  • la pianificazione e la gestione delle dependencies richiede flessibilità.
  • c’è la necessità di sincronizzare i dati tra sistemi, inviare notifiche o attivare altre attività in tempo reale, in sintesi quando è opportuno avere un controllo completo sul processo.

In conclusione, le Dynamic Tables sono ideali per la creazione di pipeline di dati basate su SQL, mentre le Materialized View sono perfette per migliorare le prestazioni delle query ripetute. Le Streams & Tasks rappresentano una scelta eccellente per il monitoraggio e la gestione dei cambiamenti dei dati in tempo reale. La decisione su quale opzione utilizzare dipenderà dalle specifiche esigenze del progetto e dal tipo di operazioni che si desidera eseguire sui dati.

Per ulteriori domande su Snowflake vi invitiamo a contattarci all’indirizzo: info@theinformationlab.it Speriamo che questo articolo vi abbia incuriosito e che continuiate a seguire il nostro blog. Alla prossima!

Pharma
Predictive analytics healthcare

Predictive analytics healthcare: come l’AI rivoluziona la medicina

Il mondo dell’healthcare è storicamente legato ai dati. Gli esami, le diagnosi, i successi degli...

Blog
tableau pulse

Tableau Pulse: La GeneAI sbarca su Tableau

Tableau Pulse, introdotto da Salesforce come parte della suite Tableau AI, sfrutta l’intelligenza artificiale generativa...