Vai al contenuto principale

Ingestione dati in Snowflake: guida completa

Segui questa guida per capire l’ingestione dei dati in Snowflake. Questo tutorial è perfetto per chi è nuovo a Snowflake o vuole un rapido ripasso delle funzionalità.
· 12 min leggi

Scopri con l'IA

Snowflake è una piattaforma dati nativa per il cloud, ampiamente utilizzata dai professionisti dei dati per la sua scalabilità, prestazioni e semplicità, caratteristiche che la rendono ideale per tutto, dall’analisi alla data science. Tuttavia, per sfruttarla al massimo, è fondamentale padroneggiare l’ingestione dei dati in Snowflake. Se sei alle prime armi con la piattaforma, ti consiglio di iniziare da questo Tutorial su Snowflake per principianti per familiarizzare prima con l’architettura.

Pipeline di ingestione dei dati efficienti e ben progettate sono cruciali per garantire che i dati siano disponibili e affidabili per i casi d’uso a valle. Che si tratti di aggiornamenti batch periodici o di flussi di dati in tempo reale, la scelta del metodo e degli strumenti di ingestione giusti influisce direttamente sulle prestazioni e sulla manutenibilità della tua pipeline dati.

Prima di entrare nei dettagli, è essenziale capire alcuni concetti chiave sul flusso dei dati:

  • Ingestione batch vs. in tempo reale: i processi batch caricano i dati a intervalli pianificati, offrendo blocchi di dati in una volta sola. L’ingestione in tempo reale garantisce che i dati siano disponibili quasi in tempo reale man mano che vengono generati, in un flusso continuo. Puoi approfondire in questo articolo su Batch vs Stream Processing.
  • Dati strutturati vs. semi-strutturati: i dati strutturati si adattano ordinatamente a righe e colonne, mentre i dati semi‑strutturati (come JSON o Avro) richiedono una gestione più flessibile e utilizzano tag o marcatori per agevolare l’ingestione.

Che cos’è l’ingestione dei dati in Snowflake?

Per ingestione dei dati si intende il processo di spostamento dei dati da varie sorgenti in un database per l’archiviazione, l’elaborazione e l’analisi. Che i tuoi dati provengano da storage cloud, database, applicazioni o stream di eventi, l’ingestione rappresenta il primo passo del ciclo di vita dei dati in Snowflake.

L’architettura unica di Snowflake separa calcolo e storage. Questo consente un processo semplificato di ingestione dei dati senza impattare le prestazioni analitiche. L’ingestione può indirizzare sia stage interni (all’interno di Snowflake) sia stage esterni (come S3 o Azure Blob Storage), a seconda della sorgente e del caso d’uso. Per ulteriori approfondimenti, questo articolo analizza nel dettaglio l’architettura di Snowflake.

Considerazioni chiave sull’ingestione

Quando progetti una pipeline di ingestione, tieni a mente le Quattro V dei dati:

  • Volume: quanti dati stai ingerendo?
  • Velocità: con quale frequenza arrivano i dati?
  • Varietà: quali formati sono coinvolti (CSV, JSON, Parquet)?
  • Veridicità: quanto sono affidabili i dati e quale livello di pulizia è necessario?

Queste quattro componenti sono importanti da considerare. Volume e velocità ci impongono di valutare la banda disponibile per la pipeline e la sua capacità di elaborare i dati. Varietà e veridicità richiedono lo sviluppo di pipeline robuste e flessibili, capaci di controllare la qualità dei dati mentre fluiscono.

Considerazioni chiave sull’ingestione

Metodi di ingestione dei dati in Snowflake

Vediamo alcuni dei metodi di ingestione dati disponibili in Snowflake. Alcuni metodi prevedono l’uso di un comando come COPY INTO, Snowpipe o Snowpipe Streaming.

Ingestione batch con COPY INTO

Il metodo di ingestione più fondamentale di Snowflake è il comando COPY INTO. COPY INTO carica i dati da file archiviati in stage esterni nelle tabelle di Snowflake. È ideale per caricare in blocco dati storici o per aggiornamenti batch regolari.

Caricare dati dallo storage cloud

Puoi caricare dati da Amazon S3, Azure Blob Storage o Google Cloud Storage creando uno stage esterno che collega quei servizi cloud a Snowflake. Con il percorso file e le credenziali corretti, Snowflake legge ed elabora i file in modo efficiente.

Gestione di diversi formati di dati

COPY INTO supporta più formati: CSV, JSON, Avro, ORC e Parquet. Durante la creazione del connettore, sono disponibili varie opzioni di formato. L’elenco è piuttosto ampio, ma spesso ci sono impostazioni per definire aspetti come il formato delle date, i delimitatori (virgole o altri valori), la codifica, le opzioni per i null e così via. Ti consiglio vivamente di leggere la documentazione sul sito di Snowflake per tutti i dettagli.

Gestione degli errori e monitoraggio

Puoi configurare l’impostazione ON_ERROR per saltare le righe problematiche, interrompere il caricamento o registrare gli errori. Combinala con VALIDATION_MODE per tracciare e restituire gli errori. Puoi usare tabelle di metadati come LOAD_HISTORY, che tracciano anche il numero di errori occorsi durante un caricamento.

Ingestione continua con Snowpipe

Snowpipe abilita l’ingestione continua rilevando e caricando automaticamente i nuovi file man mano che compaiono in uno stage designato. Questa funzionalità è integrata nella piattaforma Snowflake. Offre integrazione automatica dei file, trigger basati su eventi e monitoraggio.

Automatizzare l’ingestione dei file

Snowpipe può essere configurato per l’auto‑ingest tramite integrazione con le notifiche dello storage cloud, riducendo la necessità di esecuzioni manuali. Ad esempio, Amazon S3 dispone di notifiche di eventi che avvisano gli utenti delle modifiche a un determinato bucket. 

Snowpipe può essere collegato a un utente che riceve queste notifiche. Quando quell’utente riceve una notifica evento, Snowpipe viene attivato per avviare il processo di ingestione dei dati.

pipeline che mostra i file di dati che confluiscono nello stage esterno S3 di Snowflake con coda di ingestione SQS che porta all’attivazione della funzione COPY INTO di Snowpipe

Diagramma di ingestione dati automatizzata (Documentazione Snowflake)

Monitoraggio e gestione

Snowflake fornisce diversi strumenti di monitoraggio e gestione degli errori. La tabella di metadati PIPE_USAGE_HISTORY consente di visualizzare la cronologia dei caricamenti, come byte e file ingeriti. La tabella VALIDATE_PIPE_LOAD fornisce informazioni sugli errori che si verificano. 

All’interno di Snowpipe è presente l’impostazione ON_ERROR, che permette di saltare i file e inviare notifiche che segnalano gli errori.

Streaming in tempo reale con Snowpipe Streaming

Snowpipe Streaming è il metodo più recente di Snowflake per ingerire dati in streaming in tempo reale con latenza inferiore al secondo. A differenza di Snowpipe, che reagisce ai file, Snowpipe Streaming ingerisce i dati riga per riga tramite un’API. Questi metodi si completano a vicenda, offrendo flessibilità ed efficienza.

Utilizzo dello Snowflake Ingest SDK

Lo Snowflake Ingest SDK consente agli sviluppatori di scrivere applicazioni Java o Scala che inviano i dati direttamente a Snowflake usando una coda residente in memoria. Queste applicazioni sono progettate per accettare dati a livello di riga da sorgenti come topic di Apache Kafka e altri connettori di streaming.

Casi d’uso e vantaggi

Perfetto per dati di telemetria, clickstream o IoT, Snowpipe Streaming garantisce disponibilità quasi in tempo reale con minimo overhead di storage e throughput elevato. Questo metodo di ingestione è ideale quando ti servono dati ad alta velocità quasi in tempo reale.

Strumenti per l’ingestione dei dati in Snowflake

Per ingerire dati in Snowflake tramite strumenti come Snowpipe e Snowpipe Streaming, servono alcuni tool per collegare correttamente le pipeline. Uno strumento fondamentale è Kafka, comunemente usato come livello di comunicazione tra le sorgenti dati e Snowflake. In alternativa, ci sono strumenti di terze parti come Fivetran e Matillion che possono gestire l’ETL verso Snowflake.

Connettore Snowflake per Kafka

Snowflake offre un connettore Kafka che legge dai topic Kafka e scrive i messaggi direttamente nello storage di Snowflake. I dati vengono pubblicati su Kafka e, utilizzando Snowpipe o Snowpipe Streaming, Snowflake può intercettare questi dati pubblicati e trasferirli nello storage interno.  Questo è un modo estremamente flessibile di trasferire dati. Ti consiglio questo corso Introduction to Apache Kafka, che illustra la potenza e la scalabilità di Kafka.

Configurazione di Kafka e best practice

Dovrai configurare un worker Kafka Connect e impostare parametri come nomi dei topic, dimensioni dei buffer e credenziali Snowflake per predisporre correttamente l’integrazione. 

Queste configurazioni consentono anche di impostare i tipi di dato e le informazioni di metadati che desideriamo tracciare. I due modi principali per definire queste connessioni sono tramite Confluent (una versione gestita di Apache Kafka di terze parti) oppure manualmente usando l’SDK open‑source di Apache Kafka. 

Indipendentemente dalla scelta, segui queste best practice:

  • Usa il partitioning e l’ordinamento basato su chiave per mantenere la sequenza degli eventi.
  • Ottimizza gli intervalli di flush per bilanciare latenza e throughput.

Esempio di utilizzo di Kafka con Snowflake SDK per dati in streaming (Documentazione Snowflake)

Strumenti ETL di terze parti

Oltre a Kafka, piattaforme ETL di terze parti come Fivetran, Matillion e Talend forniscono soluzioni ETL/ELT gestite per ingerire e trasformare dati da centinaia di sorgenti verso Snowflake. Queste piattaforme spesso offrono soluzioni SaaS low‑code e semplificate per la gestione dei dati, ma la scelta di tali piattaforme comporta anche degli svantaggi.

Pro e contro degli strumenti ETL di terze parti

Quando usi strumenti ETL di terze parti, ci sono aspetti da valutare con attenzione, come costi e flessibilità. Pur essendo approcci semplificati per l’ingestione dei dati in Snowflake, potrebbero prevedere restrizioni che alla lunga li rendono più impegnativi da usare.

  • Pro: configurazione no‑code, connettori per i comuni strumenti SaaS, funzionalità di trasformazione integrate, integrazione semplice e immediata
  • Contro: costo in abbonamento, controllo limitato per logiche personalizzate, e spesso lock‑in sul fornitore senza una via d’uscita semplice

Conoscendo questi vincoli, quando scegli lo strumento giusto dovresti considerare:

  • Le competenze tecniche del tuo team
  • Requisiti di frequenza e latenza
  • Supporto dei sistemi sorgente
  • Budget e vincoli di licenza

Best practice per l’ingestione dei dati in Snowflake

Progettare una pipeline è un lavoro impegnativo, ma ci sono concetti generali e best practice che puoi seguire per semplificarti la vita. L’obiettivo è migliorare l’efficienza e ridurre al minimo i costi.

Ottimizza per prestazioni e costi

Riduci la dimensione dei file per abbassare i costi di archiviazione usando formati come gzip o Parquet. Inoltre, quando trasferisci i dati, per il processo di copia è spesso meglio preferire pochi file più grandi a molti file piccoli. File singoli di grandi dimensioni hanno meno overhead di rete rispetto al tentativo di trasferire più file di piccole dimensioni. Infine, pianifica i grandi job batch nelle ore non di punta se i costi di calcolo e di rete sono un problema.

Assicurati infine di gestire l’evoluzione dello schema nelle tue pipeline. Alcuni formati, come Parquet, consentono naturalmente l’evoluzione dello schema. Ciò significa che, se lo schema dei dati cambia alla sorgente, non influisce sui dati storici e mantiene la compatibilità forward/backward dei dati.

Garantisci qualità e osservabilità dei dati

Un altro aspetto da considerare nella pipeline di ingestione è garantire qualità e osservabilità dei dati. Un modo intelligente è mettere i dati in staging prima di integrarli nello storage finale del database. Potresti voler controllare hash e metadati per assicurare l’accuratezza e l’assenza di corruzione. Inoltre, invece di consentire agli utenti l’accesso diretto ai dati, creare viste che combinino sorgenti diverse può offrire un’esperienza migliore.

Infine, monitora e registra costantemente lo stato di salute della pipeline. Configura dashboard usando le viste di metadati di Snowflake o strumenti di osservabilità esterni come DataDog o Monte Carlo per tracciare successi di ingestione, latenza ed errori. 

Tutorial pratico: ingestione di dati in Snowflake

Qui tratteremo alcuni esempi ad alto livello su come costruire pipeline in Snowflake. Nota: i passaggi esatti possono variare a seconda di come l’amministratore dei dati ha configurato il tuo ambiente Snowflake. Assicurati di seguire le best practice della tua organizzazione! 

Prerequisiti

Prima, alcuni prerequisiti. Ti servirà un account Snowflake che ti permetta di gestire il database. Alcuni permessi di accesso comuni di cui avrai bisogno sono la possibilità di creare schema. In secondo luogo, devi assicurarti che il server su cui ti trovi abbia accesso al bucket di storage cloud esterno o allo storage interno in cui stai archiviando i dati. Parla con il tuo amministratore del database.

Passaggio 1: caricamento dei dati usando COPY INTO

Vediamo un semplice esempio di caricamento di un file CSV nel tuo database Snowflake.

1. Prepara e carica i dati: formatta i tuoi file (ad es. CSV) e caricali nel tuo bucket di storage cloud.

2. Crea stage e file format

/* specify the file format */CREATE FILE FORMAT my_csv_format TYPE = 'CSV' 

/* this will help if there are double quotes or apostrophes in your data */

FIELD_OPTIONALLY_ENCLOSED_BY='"';

/* Stage the data using the credentials you have */

CREATE STAGE my_stage URL='s3://my-bucket/data/' CREDENTIALS=(AWS_KEY_ID='...' AWS_SECRET_KEY='...');

3. Esegui COPY INTO e verifica

COPY INTO my_table FROM @my_stage FILE_FORMAT = (FORMAT_NAME = 'my_csv_format');SELECT * FROM my_table;

Passaggio 2: automatizzare l’ingestione con Snowpipe

Creare un’ingestione automatizzata con Snowpipe può essere piuttosto semplice!

1. Crea Snowpipe

CREATE PIPE my_pipe 

AUTO_INGEST = TRUE

   AWS_SNS_TOPIC = 'arn:aws:sns:us-west-2:001234567890:s3_mybucket'

	AS 

COPY INTO my_table 

FROM @my_stage

 FILE_FORMAT = (TYPE = ‘CSV’);

2. Configura gli eventi dello storage cloud: configura le notifiche del bucket S3 per attivare la pipe usando SNS/SQS. Per maggiori dettagli, segui questa guida su AWS SNS di Datacamp.

3. Monitora l’ingestione 

Assicurati di interrogare la tabella di metadati SNOWPIPE_EXECUTION_HISTORY per visualizzare l’attività della pipe.

Passaggio 3: streaming dei dati con Snowpipe Streaming

La configurazione di Snowpipe Streaming può essere piuttosto impegnativa ed è più dettagliata di quanto possiamo coprire qui. Tratterò alcuni passaggi fondamentali, ma ti consiglio soprattutto di leggere gli esempi nella documentazione di Snowflake Streaming su come creare il client SDK.

  1. Configura l’SDK: installa lo Snowflake Ingest SDK nella tua applicazione Java o Scala. Poi configura le impostazioni di connessione dell’API in un file profile.json. Le proprietà richieste riguardano credenziali di autorizzazione, URL di Snowflake e utente. Questo consente all’SDK di connettersi al tuo server Snowflake. Scrivi il resto del codice Java per gestire i dati in arrivo, incluso il metodo insertRows.
  2. Esegui lo streaming con un’app di esempio: invia i dati dal tuo connettore Kafka usando il ClientSDK per chiamare la tua API Snowflake.
  3. Monitora e gestisci gli errori: intercetta le eccezioni dell’SDK, ritenta le richieste non riuscite e monitora le metriche di ingestione usando tabelle di metadati e dashboard. Assicurati che la tua API sia progettata per prevenire gli errori e inviare notifiche di errore.

Conclusione

Snowflake offre una suite solida e flessibile di metodi di ingestione dati — dai caricamenti batch tradizionali allo streaming in tempo reale. Comprendendo gli strumenti e le tecniche disponibili, i team dati possono progettare pipeline affidabili, performanti ed economiche. Che tu stia iniziando o ottimizzando una soluzione su scala enterprise, padroneggiare l’ingestione dei dati in Snowflake è un passaggio fondamentale per costruire una moderna data stack. Se vuoi saperne di più su Snowflake, ti consiglio vivamente le seguenti risorse:

Domande frequenti sull’ingestione dati in Snowflake

Qual è la differenza tra Snowpipe e Snowpipe Streaming?

Snowpipe ingerisce i dati dai file (di solito nello storage cloud) man mano che arrivano, usando trigger basati su eventi. Snowpipe Streaming ingerisce i dati direttamente da un’applicazione in tempo reale, riga per riga, tramite un SDK, consentendo una latenza inferiore al secondo.

Snowflake può rilevare automaticamente le modifiche allo schema nei dati in arrivo?

Non automaticamente. Dovrai implementare strategie di evoluzione dello schema manualmente o con strumenti che la supportino. Per dati semi‑strutturati come JSON, puoi usare colonne variant per accogliere strutture dinamiche.

Come monitoro se la mia ingestione dati funziona correttamente?

Snowflake fornisce diverse viste come LOAD_HISTORY, PIPE_USAGE_HISTORY e TASK_HISTORY per tracciare eventi di ingestione, errori e prestazioni. Puoi anche integrare strumenti di osservabilità per avvisi e dashboard.

Quali formati di file sono supportati da Snowflake per l’ingestione?

Snowflake supporta CSV, JSON, Avro, ORC, Parquet e XML. Definisci come interpretare il file tramite un oggetto file format.

Posso ingerire dati in Snowflake da sorgenti diverse dallo storage cloud o da Kafka?

Sì. Puoi ingerire dati usando strumenti di terze parti (ad es. Fivetran, Matillion, Airbyte), le REST API di Snowflake, Snowpipe Streaming o script personalizzati tramite connettori o SDK.

Argomenti

Correlato