Vai al contenuto principale

Creare tabelle in Snowflake: tipi, esempi e best practice

Impara a creare diversi tipi di tabelle in Snowflake, incluse tabelle permanenti, temporanee, esterne e dinamiche. Con esempi passo passo e best practice.
· 9 min leggi

Scopri con l'IA

Snowflake è una potente piattaforma di data warehousing nel cloud che aiuta le organizzazioni a memorizzare, gestire e analizzare i propri dati in modo efficiente. A differenza dei data warehouse tradizionali che richiedono configurazioni hardware complesse, Snowflake funziona interamente nel cloud, rendendo più semplice per le aziende scalare le operazioni sui dati in base alle necessità.

Creare tabelle in Snowflake è una competenza fondamentale che costituisce la base della gestione dei dati. Le tabelle sono il luogo in cui memorizzi i dati strutturati, consentendoti di eseguire query, generare report e ricavare informazioni preziose. Che tu stia lavorando con dati dei clienti, numeri di vendita o risultati analitici, capire come creare e gestire tabelle in Snowflake è essenziale.

In questo tutorial imparerai tutto ciò che ti serve per creare tabelle in Snowflake. Vedremo i diversi tipi di tabelle, mostreremo esempi passo passo e condivideremo le best practice per il design delle tabelle. Alla fine, saprai scegliere il tipo di tabella giusto per le tue esigenze e creare tabelle che rispettano gli standard del settore in termini di prestazioni e manutenibilità.

Capire i tipi di tabelle in Snowflake

Prima di passare agli esempi di codice su come creare le tabelle, esploriamo i diversi tipi di tabelle in Snowflake, poiché ognuno ha scopi specifici e caratteristiche distinte in termini di persistenza dei dati, accessibilità e posizione di archiviazione.

Tabelle permanenti

Le tabelle permanenti sono il tipo standard in Snowflake. Persistono finché non vengono eliminate esplicitamente e sono archiviate nello storage interno di Snowflake. Queste tabelle sono ideali per memorizzare i dati core del business che devono essere conservati a lungo termine e accessibili in più sessioni. I dati nelle tabelle permanenti rimangono intatti tra una sessione e l'altra e possono essere accessibili da qualsiasi utente autorizzato.

Tabelle temporanee

Le tabelle temporanee sono specifiche della sessione e vengono eliminate automaticamente al termine della sessione corrente. Servono come tabelle di lavoro per passaggi di elaborazione intermedi, aiutando a organizzare trasformazioni dati complesse senza appesantire lo storage permanente. I dati nelle tabelle temporanee sono visibili solo alla sessione che le ha create e vengono puliti automaticamente alla chiusura della sessione.

Tabelle esterne

Le tabelle esterne consentono di interrogare dati che risiedono al di fuori dello storage di Snowflake. Agiscono come un livello di metadati che mappa i dati in posizioni di storage esterno come AWS S3 o Azure Blob Storage. Invece di acquisire i dati, le tabelle esterne creano un riferimento, permettendoti di interrogare direttamente i dati esterni. Questo approccio è particolarmente utile quando lavori con dati che devono rimanere nella loro posizione di origine o che richiedono aggiornamenti frequenti da sistemi esterni.

Tabelle dinamiche

Le tabelle dinamiche sono una funzionalità potente di Snowflake che mantengono automaticamente aggiornati i risultati di una query. Agiscono come viste materializzate che si aggiornano automaticamente in base ai cambiamenti nelle tabelle sorgente sottostanti. Quando crei una tabella dinamica, la definisci usando un'istruzione SELECT e Snowflake gestisce automaticamente il processo di refresh per garantire che i dati rimangano aggiornati.

Le tabelle dinamiche sono particolarmente utili per:

  • Creare dashboard in tempo reale che necessitano di dati aggiornati senza refresh manuali
  • Mantenere versioni aggregate o trasformate dei dati sorgente che si aggiornano automaticamente
  • Creare modelli di dati dipendenti in cui le tabelle a valle devono riflettere i cambiamenti a monte
  • Ottimizzare le prestazioni delle query precomputando trasformazioni complesse

Le caratteristiche principali delle tabelle dinamiche includono:

  • Intervalli di refresh configurabili (da 1 minuto a 24 ore)
  • Tracciamento automatico delle dipendenze delle tabelle sorgente
  • Impostazioni del target lag per controllare la freschezza dei dati
  • Elaborazione incrementale per ridurre al minimo i costi di calcolo
  • Funzionalità integrate di monitoraggio e ottimizzazione

Ogni tipo di tabella ha uno scopo distinto nell'architettura dei dati. Le tabelle permanenti costituiscono le fondamenta del tuo data warehouse, le tabelle temporanee facilitano i flussi di elaborazione dei dati, le tabelle esterne permettono l'integrazione con sorgenti dati esterne e le tabelle dinamiche forniscono trasformazioni dei dati automatizzate e in tempo reale.

Confronto tra tabelle Snowflake 

Nella tabella seguente abbiamo riassunto i diversi tipi di tabelle di Snowflake in una guida rapida e concisa: 

Tipo di tabella

Persistenza

Visibilità

Ideale per

Permanente

Fino all'eliminazione

Qualsiasi sessione

Dati core del business

Temporanea

Solo sessione

Stessa sessione

Trasformazioni intermedie

Esterna

Storage esterno

Qualsiasi sessione

Query su dati esterni (ad es. S3)

Dinamica

Aggiornamento automatico

Qualsiasi sessione

Analisi in tempo reale

Creare tabelle: configurare Snowflake

Prima di eseguire gli esempi in questo tutorial, ti serve l'accesso a un ambiente Snowflake. Ecco diversi modi per connetterti ed eseguire i comandi Snowflake:

1. Interfaccia web di Snowflake (Snowsight)

Il modo più semplice per iniziare è attraverso l'interfaccia web di Snowflake:

  1. Accedi al tuo account Snowflake 
  2. Vai a Worksheets
  3. Crea un nuovo worksheet per eseguire comandi SQL

2. Snowflake CLI (strumento da riga di comando)

Per l'accesso da riga di comando:

  1. Installa Snowflake CLI 
  2. Connettiti usando:
snowsql -a <account> -u <username> -d <database> -w <warehouse>

Puoi trovare le credenziali del tuo account Snowflake nei seguenti punti:

  1. URL dell'account: controlla nell'email di benvenuto o nelle impostazioni dell'account
  2. Username: fornito durante la configurazione dell'account
  3. Database: creato o assegnato dal tuo amministratore
  4. Warehouse: creato o assegnato dal tuo amministratore

Per sicurezza, non condividere né archiviare in repository queste credenziali. Conservale in modo sicuro in variabili d'ambiente o in un file di configurazione.

3. Connessione Python

Se usi Python, puoi utilizzare la libreria snowflake-connector-python:

import snowflake.connector

conn = snowflake.connector.connect(
   user='your_username',
   password='your_password',
   account='your_account',
   warehouse='your_warehouse',
   database='your_database',
   schema='your_schema'
)

cur = conn.cursor()

cur.execute("SELECT current_version()")

Nota importante sulla sicurezza:

  • Non memorizzare mai le credenziali direttamente nel codice
  • Usa variabili d'ambiente o sistemi sicuri di gestione dei segreti
  • In produzione, valuta l'uso dell'autenticazione con coppia di chiavi
  • Segui le policy di sicurezza della tua organizzazione

Ora che l'ambiente è pronto, iniziamo a creare tabelle!

Creare tabelle in Snowflake: esempi passo passo

Esempio 1: creare una semplice tabella Snowflake

Creiamo una tabella per memorizzare le informazioni dei clienti. Questo esempio mostra la creazione di base di una tabella con diversi tipi di dati e vincoli.

-- Create a permanent table for customer data
CREATE OR REPLACE TABLE customers (
   customer_id INTEGER PRIMARY KEY,
   first_name VARCHAR(50) NOT NULL,
   last_name VARCHAR(50) NOT NULL,
   email VARCHAR(100) UNIQUE,
   date_of_birth DATE,
   created_at TIMESTAMP_NTZ DEFAULT CURRENT_TIMESTAMP()
);

Punti chiave di questo esempio:

  • CREATE OR REPLACE TABLE - Crea una nuova tabella o la sostituisce se esiste già
  • PRIMARY KEY - Garantisce l'identificazione univoca di ogni record
  • NOT NULL - Impedisce valori null nei campi obbligatori
  • UNIQUE - Evita la duplicazione degli indirizzi email
  • TIMESTAMP_NTZ - Timestamp senza fuso orario
  • DEFAULT - Imposta automaticamente il timestamp di creazione

Esempio 2: creare una tabella temporanea

Le tabelle temporanee sono perfette per l'elaborazione intermedia dei dati. Ecco un esempio che crea una tabella temporanea per analizzare gli ordini dei clienti:

-- Create a temporary table for order analysis
CREATE OR REPLACE TEMPORARY TABLE temp_order_analysis (
   order_date DATE,
   total_orders INTEGER,
   total_revenue DECIMAL(18,2)
)
AS
SELECT
   DATE_TRUNC('day', order_date) as order_date,
   COUNT(*) as total_orders,
   SUM(order_amount) as total_revenue
FROM orders
GROUP BY 1;

Punti chiave sulle tabelle temporanee:

  • La parola chiave TEMPORARY indica che questa tabella esisterà solo nella sessione corrente. Ciò significa che altri utenti non possono vedere o accedere a questa tabella.
  • Usare CREATE TABLE AS (CTAS) ti permette di creare e popolare una tabella in un solo passaggio combinando la definizione della tabella con una SELECT.
  • La tabella temporanea viene eliminata automaticamente al termine della sessione, aiutando a mantenere pulito il database senza interventi manuali.
  • Le tabelle temporanee sono utili per memorizzare risultati intermedi durante trasformazioni dati complesse o flussi di analisi.

Esempio 3: creare una tabella esterna in Snowflake 

Questo esempio mostra come creare una tabella esterna che legge dati da file archiviati in un bucket di cloud storage:

-- Create file format for CSV files
CREATE OR REPLACE FILE FORMAT my_csv_format
   TYPE = CSV
   FIELD_DELIMITER = ','
   SKIP_HEADER = 1
   NULL_IF = ('NULL', 'null');

-- Create external stage
CREATE OR REPLACE STAGE my_external_stage
   URL = 's3://my-bucket/data/'
   CREDENTIALS = (AWS_KEY_ID = 'xxx' AWS_SECRET_KEY = 'xxx');

-- Create external table
CREATE OR REPLACE EXTERNAL TABLE ext_customer_data (
   customer_id VARCHAR AS (VALUE:c1::VARCHAR),
   purchase_date DATE AS (VALUE:c2::DATE),
   product_id VARCHAR AS (VALUE:c3::VARCHAR),
   amount DECIMAL(10,2) AS (VALUE:c4::DECIMAL(10,2))
)
WITH LOCATION = @my_external_stage/customers/
FILE_FORMAT = my_csv_format
PATTERN = '.*[.]csv';

La prima istruzione definisce una specifica di formato file che indica a Snowflake come analizzare i file CSV esterni, incluso il delimitatore, la gestione dell'intestazione e le rappresentazioni dei valori NULL.

La seconda istruzione crea uno stage che stabilisce una connessione allo storage cloud esterno (in questo caso, S3) utilizzando le credenziali fornite. Questo stage funge da punto di riferimento per accedere ai file di dati esterni.

La terza istruzione crea la tabella esterna vera e propria, utilizzando definizioni di colonna con clausole AS per eseguire il cast esplicito dei dati grezzi in stringa dal CSV nei tipi di dati Snowflake corretti. La clausola WITH LOCATION punta al percorso specifico all'interno dello stage in cui risiedono i file.

Il parametro PATTERN filtra i file da includere tramite corrispondenza regex, assicurando che vengano elaborati solo i file CSV.

Prerequisiti per eseguire questa query di creazione di tabella esterna:

1. Accesso a un account Snowflake con permessi per:

  • Creare formati di file
  • Creare stage
  • Creare tabelle esterne

2. Credenziali AWS valide (AWS_KEY_ID e AWS_SECRET_KEY) con permessi per:

  • Leggere dal bucket S3
  • Elencare gli oggetti nel bucket

3. Requisiti per i dati sorgente:

  • File CSV archiviati in un bucket S3
  • File con formato coerente a quattro colonne
  • I dati delle colonne corrispondono ai tipi specificati:
  • customer_id come stringa
  • purchase_date come data
  • product_id come stringa
  • amount come decimale

4. Connettività di rete:

  • Accesso di rete ad AWS S3
  • Impostazioni corrette di security group e firewall

5. Risorse di calcolo:

  • Warehouse attivo con capacità di calcolo adeguata
  • Crediti/quota utente sufficienti

Esempio 4: creare una tabella dinamica

Questo esempio crea una tabella dinamica che mantiene un riepilogo aggiornato dei dati di vendita:

-- Create a dynamic table for real-time sales analytics
CREATE OR REPLACE DYNAMIC TABLE daily_sales_summary
TARGET_LAG = '20 minutes'
WAREHOUSE = 'COMPUTE_WH'
AS
SELECT
   DATE_TRUNC('day', sale_timestamp) as sale_date,
   product_category,
   SUM(sale_amount) as total_sales,
   COUNT(DISTINCT customer_id) as unique_customers
FROM sales_transactions
GROUP BY 1, 2;

Il parametro TARGET_LAG di '20 minutes' definisce il ritardo massimo consentito tra gli aggiornamenti alla tabella sorgente e il momento in cui tali modifiche si riflettono nella tabella dinamica. Ciò garantisce la freschezza dei dati entro quella finestra temporale.

Il parametro WAREHOUSE specifica quali risorse di calcolo (in questo caso COMPUTE_WH) verranno utilizzate per aggiornare periodicamente la tabella dinamica. Questo warehouse deve avere capacità adeguata per gestire le operazioni di refresh.

La tabella dinamica aggiorna automaticamente i propri contenuti quando la tabella sottostante sales_transactions cambia, senza richiedere interventi manuali. Questo offre funzionalità di analisi quasi in tempo reale.

Mantenendo riepiloghi giornalieri pre-aggregati delle vendite per categoria di prodotto, la tabella dinamica consente query più rapide rispetto al calcolo di queste metriche on demand a partire dai dati di transazione grezzi. Questo migliora le prestazioni delle query per casi d'uso di reporting e analytics.

Ciascuno di questi esempi illustra diversi scenari di creazione di tabelle che potresti incontrare in applicazioni reali. Ricorda di adattare nomi di colonne, tipi di dati e altri parametri in base alle tue esigenze specifiche.

Best practice per creare tabelle in Snowflake

Vediamo alcune best practice da seguire quando crei tabelle in Snowflake, per garantire manutenibilità, prestazioni e qualità dei dati.

1. Convenzioni di denominazione

Usa sempre nomi chiari e coerenti per le tue tabelle e colonne:

-- Good naming examples
CREATE TABLE customer_orders (
   order_id INTEGER,
   customer_email VARCHAR,
   order_date DATE
);

-- Bad naming examples
CREATE TABLE Orders123 (
   ID INTEGER,
   email VARCHAR,
   dt DATE
);

Consigli per i nomi:

  • Usa lettere minuscole e underscore (snake_case)
  • Evita spazi e caratteri speciali
  • Rendi i nomi descrittivi ma non troppo lunghi
  • Usa il singolare per i nomi delle tabelle (customer non customers)
  • Aggiungi prefissi per i diversi ambienti (dev_, test_, prod_)

2. Tipi di dati delle colonne

Scegli il tipo di dato corretto per risparmiare spazio e migliorare le prestazioni:

-- Good data type choices
CREATE TABLE products (
   product_id INTEGER,
   price DECIMAL(10,2),    -- For money values
   name VARCHAR(100),      -- Set a reasonable limit
   description TEXT,       -- For very long text
   is_active BOOLEAN      -- Instead of VARCHAR or INTEGER
);

Tipi di dati comuni da usare:

  • NUMBER/INTEGER: Per numeri interi
  • DECIMAL/NUMERIC: Per numeri decimali precisi (soprattutto importi monetari)
  • VARCHAR: Per testo con lunghezza massima nota
  • TEXT: Per testo a lunghezza illimitata
  • TIMESTAMP_NTZ: Per date e orari (senza fuso orario)
  • BOOLEAN: Per valori vero/falso

3. Uso delle chiavi di clustering

Aggiungi chiavi di clustering per migliorare le prestazioni delle query:

CREATE TABLE sales (
   sale_date DATE,
   store_id INTEGER,
   product_id INTEGER,
   amount DECIMAL(10,2)
)
CLUSTER BY (sale_date, store_id);

Quando usare il clustering:

  • Per tabelle grandi (più di 1 milione di righe)
  • Su colonne su cui filtri o unisci spesso
  • Di solito colonne data più 1–2 altre colonne
  • Non usare il clustering su colonne con troppi valori unici

4. Aggiungere vincoli alle tabelle

Usa i vincoli per mantenere i dati puliti:

CREATE TABLE users (
   user_id INTEGER PRIMARY KEY,  -- Ensures unique IDs
   email VARCHAR(255) UNIQUE,    -- No duplicate emails
   username VARCHAR(50) NOT NULL, -- Must have a value
   age INTEGER CHECK (age >= 18) -- Must be 18 or older
);

Vincoli importanti:

  • PRIMARY KEY: Per identificatori univoci
  • FOREIGN KEY: Per collegare tra loro le tabelle
  • NOT NULL: Per i campi obbligatori
  • UNIQUE: Per i campi che non possono avere duplicati
  • CHECK: Per una semplice validazione dei dati

5. Errori comuni da evitare

Non fare così:

-- Bad practice: No primary key
CREATE TABLE orders (
   date VARCHAR,           -- Wrong data type for dates
   amount VARCHAR(10),     -- Wrong data type for numbers
   status text            -- Inconsistent case with other columns
);

Fai così invece:

-- Good practice
CREATE TABLE orders (
   order_id INTEGER PRIMARY KEY,
   order_date DATE,
   amount DECIMAL(10,2),
   status VARCHAR(20)
);

La versione migliorata assicura l'integrità dei dati con una chiave primaria, usa i tipi di dato corretti per date e numeri per abilitare filtri e calcoli efficienti e mantiene coerenza nelle definizioni delle colonne per una migliore leggibilità e compatibilità.

6. Suggerimenti per le prestazioni

Ottimizzare le prestazioni delle tabelle in Snowflake può migliorare significativamente la velocità delle query e ridurre i costi di archiviazione. Segui queste best practice per garantire che le tue tabelle siano efficienti e scalabili.

  • Crea tabelle più piccole invece di un'unica tabella enorme
  • Aggiungi descrizioni delle colonne usando COMMENT
  • Configura regole automatiche di pulizia dei dati
  • Metti alla prova il design della tabella con dati reali
  • Monitora l'uso delle tabelle e adatta quando serve

7. Best practice di sicurezza

Misure di sicurezza adeguate sono essenziali per proteggere i dati sensibili e controllare gli accessi. Metti in pratica queste best practice per salvaguardare l'ambiente Snowflake da accessi non autorizzati e violazioni dei dati.

  • Imposta sempre permessi di accesso appropriati
  • Usa la sicurezza a livello di riga quando necessario
  • Cifra le colonne sensibili
  • Tieni traccia di chi può accedere a cosa
  • Rivedi regolarmente i pattern di accesso

Ricorda: una tabella ben progettata ti semplifica il lavoro in seguito. Prenditi il tempo per pianificare la struttura della tabella prima di crearla!

Conclusione

In questo tutorial, abbiamo visto gli elementi essenziali per creare tabelle in Snowflake, tra cui:

  • I diversi tipi di tabelle (permanenti, temporanee, esterne e dinamiche)
  • Esempi passo passo per creare ciascun tipo
  • Best practice per il design e la gestione delle tabelle
  • Errori comuni da evitare

Queste conoscenze costituiscono le basi per costruire soluzioni dati efficienti e scalabili in Snowflake.

Prossimi passi

Per approfondire la tua esperienza con Snowflake, dai un'occhiata a queste risorse utili:

1. Corsi interattivi:

2. Tutorial completi:

3. Risorse per la carriera:

Non dimenticare: il modo migliore per imparare è fare pratica. Inizia a creare tabelle, sperimenta diversi tipi e costruisci progetti reali. Quando incontri difficoltà, torna a queste risorse e continua a esplorare le nuove funzionalità di Snowflake.

Snowflake Create Table FAQs

Quali sono i diversi tipi di tabelle in Snowflake?

Snowflake supporta quattro tipi principali di tabelle: tabelle permanenti per l'archiviazione a lungo termine, tabelle temporanee per l'uso specifico della sessione, tabelle esterne per interrogare sorgenti dati esterne e tabelle dinamiche per la manutenzione automatica dei risultati delle query.

Come creo una tabella di base in Snowflake?

Usa il comando CREATE TABLE con lo schema desiderato. Ad esempio: "CREATE TABLE customers (customer_id INTEGER PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50))". Includi i tipi di dati e i vincoli appropriati.

Che cos'è una tabella dinamica in Snowflake e quando dovrei usarla?

Le tabelle dinamiche mantengono automaticamente aggiornati i risultati di una query, in modo simile alle viste materializzate. Sono ideali per dashboard in tempo reale, trasformazioni dati automatizzate e per mantenere dati aggregati che richiedono aggiornamenti frequenti.

Quali sono le best practice per dare nomi alle tabelle in Snowflake?

Usa lettere minuscole con underscore (snake_case), evita spazi e caratteri speciali, rendi i nomi descrittivi ma concisi, usa il singolare per i nomi delle tabelle e valuta di aggiungere prefissi di ambiente (dev_, test_, prod_).

Come posso migliorare le prestazioni delle tabelle in Snowflake?

Migliora le prestazioni usando chiavi di clustering appropriate, scegliendo i tipi di dati corretti, impostando i vincoli giusti, creando tabelle più piccole e mirate invece di tabelle enormi e monitorando regolarmente i pattern di utilizzo delle tabelle.

Bexruz (Bex) Tuychiev

Autore

Bexruz (Bex) Tuychiev

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. 

Argomenti

Correlato