INSERT INTO in Snowflake: guida completa per principianti
Impara a inserire dati in modo efficiente nelle tabelle Snowflake usando l’istruzione INSERT INTO. La guida copre sintassi, casi d’uso, best practice e tecniche di troubleshooting.
Quando lavori con Snowflake, una delle operazioni fondamentali che eseguirai è l’inserimento di dati nelle tabelle. L’istruzione INSERT INTO ti consente di aggiungere nuovi record in una tabella, sia inserendo i valori manualmente, sia aggiungendo più righe, sia prelevando dati da altre tabelle.
In questa guida, ti mostrerò la sintassi, i vari casi d’uso, le best practice e i passaggi comuni di troubleshooting per usare INSERT INTO in modo efficace in Snowflake.
Che cos’è il comando INSERT INTO in Snowflake?
Prima di parlare della sintassi, dobbiamo capire lo scopo di INSERT INTO in Snowflake e i suoi diversi casi d’uso.
Aggiungere dati a un database è una parte cruciale della sua gestione. L’istruzione INSERT INTO in Snowflake serve ad aggiungere nuove righe di dati in una tabella. Può inserire singole righe, più righe oppure dati in blocco da un’altra tabella. Puoi inserire i dati digitando manualmente ogni valore per una determinata riga o insieme di righe, oppure usare un’istruzione SQL per caricare in blocco dati da altre sorgenti.
> Anche se INSERT INTO è un comando fondamentale, partire con una buona comprensione di Snowflake e della sua architettura è un’ottima idea. Dai un’occhiata a questo tutorial su Snowflake per ripassare le basi!
Casi d’uso di INSERT INTO
Ecco alcuni casi d’uso comuni per la clausola INSERT INTO.
Aggiunta manuale di nuovi record a una tabella.
Inserimento in blocco di più righe in un’unica query.
Trasferimento di dati da una tabella a un’altra.
Accodamento di nuovi dati a un dataset esistente.
Popolamento di una tabella con i risultati di una query SELECT.
Passiamo ora alla sintassi vera e propria. Iniziamo dall’utilizzo più semplice di INSERT INTO: aggiungere dati a una riga inserendo manualmente i valori.
La sintassi di base per INSERT INTO è la seguente:
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);
Scrivi la clausola INSERT INTO seguita da table_name, ossia la tabella in cui inserire i dati. Per essere esplicito sull’ordine dei dati, puoi specificare i nomi delle colonne tra parentesi come (column1, column2, column3). L’ultima parte è VALUES (value1, value2, value3), che verranno inseriti nelle rispettive colonne.
Inserire dati senza specificare i nomi delle colonne
Se ometti i nomi delle colonne, Snowflake presume che i valori siano forniti nello stesso ordine dello schema della tabella. In altre parole, il primo valore sarà considerato per la prima colonna della tabella, e così via.
INSERT INTO table_name
VALUES (value1, value2, value3);
Con questo approccio, devi assicurarti che i valori seguano lo stesso ordine delle colonne, altrimenti potresti incorrere in problemi di tipi di dato o di coerenza dei dati.
Uso avanzato di INSERT INTO in Snowflake
Alcuni usi più avanzati di INSERT INTO includono l’inserimento di una singola riga da una tabella diversa, l’inserimento di più righe o l’inserimento di dati con condizioni. È un modo utile per aggiungere dati a una tabella o archiviare dati in una tabella separata.
Usare INSERT INTO con più righe
Invece di inserire una riga alla volta, puoi inserire più righe in un’unica istruzione:
Questo approccio riduce il sovraccarico di esecuzione della query e migliora le prestazioni. Nota che ogni riga è completamente racchiusa tra parentesi ed è seguita da una virgola. Non farlo può portare a errori.
Inserire dati da un’altra tabella
Per copiare dati da una tabella a un’altra, usa INSERT INTO con un’istruzione SELECT:
INSERT INTO target_table (column1, column2)
SELECT
column1,
column2
FROM source_table ;
Questo è utile per archiviare dati, trasformarli prima dell’inserimento o accodare record filtrati. Se i dati di origine hanno lo stesso ordine di colonne della destinazione, puoi omettere l’elenco delle colonne accanto a target_table.
Insert condizionali
Puoi inserire dati in base a una condizione nella tua istruzione SELECT, così da non copiare un’intera tabella.
INSERT INTO high_salary_employees (id, name, salary)
SELECT
id,
name,
salary
FROM employees
WHERE salary > 100000;
In questo modo solo i dipendenti che soddisfano la condizione vengono inseriti nella nuova tabella. Così si mantiene l’integrità dei dati e si riducono l’uso di spazio e il carico computazionale.
Best practice per usare INSERT INTO in Snowflake
Ecco alcune best practice quando usi INSERT INTO in Snowflake. Includono l’uso di istruzioni più efficienti come MERGE e la validazione dei dati prima dell’inserimento.
Usare MERGE invece di INSERT INTO per gli upsert
Se devi inserire nuovi record ma aggiornare quelli esistenti, MERGE è un’opzione migliore perché può confrontare i dati esistenti.
Cerca dove le righe correnti soddisfano un certo criterio (ad esempio, un ID dipendente esistente) e può aggiornare valori specifici nella tabella di destinazione usando una tabella di origine. Quando non c’è corrispondenza, inserisce i nuovi dati. Questo concetto è noto come “upsert” (update e insert).
Di seguito un esempio di come usare MERGE:
MERGE INTO target_table AS t
USING source_table AS s
ON t.id = s.id
WHEN MATCHED THEN
UPDATE SET t.salary = s.salary
WHEN NOT MATCHED THEN
INSERT (id, name, salary) VALUES (s.id, s.name, s.salary);
> L’istruzione MERGE sta diventando rapidamente una procedura standard ed è un elemento chiave delle certificazioni Snowflake.
Insert in batch e prestazioni
Per migliorare le prestazioni quando inserisci dataset di grandi dimensioni, prova a concentrarti sugli insert in batch. Questo riduce il sovraccarico evitando di attivare nuove connessioni a ogni caricamento e migliora le prestazioni complessive. Ecco alcuni consigli per l’inserimento in batch:
Usa insert in blocco invece di inserire riga per riga.
Usa COPY INTO quando carichi grandi quantità di dati da sorgenti esterne. È utile, ad esempio, quando ti connetti a S3.
Evita di inserire dati all’interno di loop negli script; l’elaborazione in batch è più efficiente. Quindi completa il loop, conserva i dati come un’unica sorgente e poi carica l’intera sorgente in una volta sola.
Validazione dei dati prima dell’inserimento
Prima di inserire i dati, validali. Se i dati non sono validi, possono causare molti problemi o fallimenti veri e propri. Pensa a come i dati potrebbero essere utilizzati a valle e a come dovrebbero presentarsi quelli inseriti. Ecco alcuni aspetti chiave a cui prestare attenzione:
I tipi di dato corrispondono alle definizioni delle colonne.
I campi obbligatori non sono null.
Nessuna violazione di chiavi primarie duplicate o di vincoli univoci.
Gestione degli errori con INSERT INTO in Snowflake
Come detto, può capitare qualche errore durante l’inserimento dei dati. Ecco alcuni consigli su come gestire gli errori più comuni.
Gestire le chiavi duplicate
Snowflake di per sé non applica necessariamente i vincoli univoci, il che significa che è possibile inserire dati duplicati.
Se temi chiavi duplicate, può essere meglio gestirle con MERGE o ON CONFLICT (se supportato). In ultima analisi, puoi anche aggiungere una condizione al tuo insert usando WHERE per escludere ciò che esiste già nella tabella di destinazione.
INSERT INTO employees (id, name)
SELECT id, name FROM new_employees
WHERE id NOT IN (SELECT id FROM employees);
Gestione dei valori NULL
Assicurati che le colonne nullable accettino valori NULL o fornisci valori predefiniti. Snowflake applica i vincoli NOT NULL sulle colonne, quindi se hai dati NULL in una colonna con quel vincolo, l’inserimento fallirà. La cosa più importante è comprendere i tuoi dati: dove i NULL possono esistere e dove no.
Risoluzione dei problemi comuni con INSERT INTO
Altri problemi possono riguardare i tipi di dato o i permessi. Vediamo brevemente come affrontarli.
Incongruenze di tipo di dato
Gli errori si verificano quando si inserisce un valore con un tipo di dato errato. A volte puoi gestirlo facendo il cast dei dati, ma questo può generare NULL. Per assicurarti che i dati inseriti corrispondano alla destinazione, puoi consultare information_schema (dove hai i permessi) e valutare in quel modo lo schema:
SELECT column_name,
data_type
FROM information_schema.columns
WHERE table_name = 'employees';
Problemi di permessi
Se ricevi un errore di permesso, verifica i ruoli utente e le relative autorizzazioni:
SHOW GRANTS TO USER current_user;
Se non hai il permesso di usare INSERT, verifica con il tuo responsabile, il reparto IT o con il proprietario del dataset. Se puoi concederti i permessi, usa il seguente codice:
GRANT INSERT ON TABLE employees TO user_name;
Conclusione
Il comando INSERT INTO in Snowflake è uno strumento potente per aggiungere dati alle tabelle in modo efficiente. Che si tratti di inserire singole righe, dati in blocco o copiare da un’altra tabella, comprenderne la sintassi e le best practice garantisce integrità e prestazioni dei dati. Gestendo gli errori, convalidando i dati e ottimizzando gli insert, puoi mantenere un database Snowflake robusto ed efficiente.
Per saperne di più su Snowflake, ti consiglio i seguenti corsi:
Qual è la differenza tra INSERT INTO e COPY INTO in Snowflake?
INSERT INTO si usa per inserire righe specifiche di dati, mentre COPY INTO è ottimizzato per il caricamento in blocco di grandi dataset da sorgenti esterne come AWS S3 o Azure Blob Storage.
INSERT INTO supporta le transazioni in Snowflake?
Sì, Snowflake supporta le transazioni, quindi puoi usare BEGIN, COMMIT e ROLLBACK per garantire l’integrità dei dati durante l’inserimento.
Quali sono le best practice prestazionali quando si inseriscono grandi quantità di dati?
Usa insert in batch invece di inserire riga per riga, sfrutta COPY INTO per i caricamenti in blocco ed evita indici non necessari che possono rallentare le prestazioni in inserimento.
Posso eseguire INSERT INTO su una secure view in Snowflake?
No. Le view—incluse le secure view—sono tabelle virtuali e non possono essere scritte direttamente. Devi inserire nella tabella di base sottostante o usare una tabella di staging transitoria, quindi ricreare o aggiornare la view.
Come inserisco dati JSON in una colonna VARIANT?
Racchiudi il JSON tra apici singoli ed esegui il cast a VARIANT, ad es. INSERT INTO t (payload) VALUES (PARSE_JSON('{\"key\":\"value\"}'));. Snowflake preserva automaticamente il formato semi‑strutturato per le query successive.
Qual è il modo più rapido per annullare un INSERT INTO accidentale?
Sfrutta il Time Travel per ripristinare la tabella a un punto precedente all’inserimento: CREATE OR REPLACE TABLE my_table AS SELECT * FROM my_table AT (TIMESTAMP => '2025-06-17 09:00:00');. Evita così istruzioni DELETE manuali e preservi il clustering.
INSERT INTO crea automaticamente micro‑partizioni?
Sì. Ogni operazione DML (inclusi gli insert) attiva il motore di micro‑partizionamento di Snowflake, che organizza i dati per pruning e compressione. Non devi gestire manualmente le partizioni.
In che modo il clustering influisce sulle prestazioni di INSERT?
Le chiavi di clustering aiutano la velocità delle query ma aggiungono overhead in scrittura. Insert frequenti su una tabella fortemente clusterizzata possono essere più lenti, quindi scegli le chiavi con attenzione e, se possibile, esegui il reclustering nelle ore di minor carico.
Posso usare INSERT INTO con Snowpipe?
Indirectamente. Snowpipe acquisisce i file in una tabella di staging; puoi quindi INSERT INTO le tabelle analitiche dopo le trasformazioni. Per il caricamento continuo, combina Snowpipe con stream e task invece degli insert manuali.
Quanti dati posso inserire in un’unica istruzione?
Snowflake supporta operazioni INSERT INTO … SELECT molto grandi—nella pratica, multi‑terabyte—perché suddivide il lavoro in micro‑batch. I principali limiti sono la dimensione del warehouse e le impostazioni di timeout.
Quali privilegi di ruolo servono per eseguire INSERT INTO su database condivisi?
Il ruolo deve avere il privilegio INSERT sulla tabella di destinazione all’interno dell’account consumer. I data share sono in sola lettura per impostazione predefinita, quindi in genere copi prima i dati in un tuo database scrivibile.
Come monitoro il tempo di esecuzione e il costo di INSERT INTO?
Interroga la vista QUERY_HISTORY per statistiche di esecuzione, dimensione del warehouse e crediti consumati. Abbinala a ACCOUNT_USAGE.QUERY_HISTORY per l’analisi di lungo periodo e l’ottimizzazione dei costi.
Author
Tim Lu
Sono una data scientist con esperienza in analisi spaziale, machine learning e pipeline dei dati. Ho lavorato con GCP, Hadoop, Hive, Snowflake, Airflow e altri processi di data science/engineering.
Snowflake è una piattaforma leader per il data warehousing. Scopri come usare Snowsight, un'interfaccia SQL intuitiva per accedere ed esplorare i dati.
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.