CREATE TABLE in Databricks: guida completa per creare e gestire tabelle
Scopri come creare tabelle in Databricks usando il comando CREATE TABLE. Impara metodi diversi per scenari diversi, incluso come creare una tabella da dati esistenti e come usare CREATE TABLE AS SELECT.
Le tabelle di Databricks sono un componente fondamentale della piattaforma Databricks Lakehouse, progettate per gestire l'archiviazione e l'elaborazione di dati su larga scala. Queste tabelle consentono la collaborazione tra team unificando dati strutturati e non strutturati e supportando carichi di lavoro analitici.
In questo articolo, ti guiderò tra le diverse tecniche per creare tabelle in Databricks usando il comando CREATE TABLE con diverse varianti di sintassi per coprire vari casi d'uso. Condividerò anche suggerimenti sulle best practice per creare e gestire tabelle in Databricks in modo efficiente e affidabile.
Per cominciare, ti consiglio vivamente di leggere il post del blog di DataCamp How to Learn Databricks: A Beginner’s Guide to the Unified Data Platform per capire le funzionalità principali e le applicazioni di Databricks e seguire un percorso strutturato per iniziare a imparare. Ti consiglio anche il nostro corso Introduction to Databricks. Anche se hai esperienza con SQL, vedrai che nella piattaforma Databricks Lakehouse alcune cose possono apparire diverse. Gli esercizi interattivi del corso ti guideranno tra query SQL, funzionalità della piattaforma e connessioni a sistemi esterni.
Introduzione alle tabelle di Databricks
Per iniziare, va detto che le tabelle di Databricks sono dataset strutturati che facilitano l'organizzazione e l'accesso ai dati nell'ambiente Databricks Lakehouse. Ce ne sono di due tipi:
Managed Tables: sono tabelle completamente gestite da Databricks, che amministra sia l'archiviazione sia i metadati. Quando si crea una tabella gestita, Databricks si occupa dei file sottostanti e, se la tabella viene eliminata, anche i relativi dati vengono rimossi.
External Tables: fanno riferimento a dati che risiedono al di fuori di Databricks, tipicamente in sistemi di cloud storage come AWS S3 o Azure Blob Storage. Mentre Databricks gestisce i metadati di queste tabelle, i dati effettivi restano intatti anche se la tabella viene eliminata. Sono note anche come tabelle non gestite (unmanaged).
Le tabelle in Databricks predefiniscono spesso Delta Lake grazie alle sue funzionalità avanzate e ottimizzazioni. Delta Lake offre transazioni ACID, scalabilità, miglioramenti prestazionali come ottimizzazioni quali caching e indicizzazione, e una gestione unificata di batch e streaming.
Da notare che le prime versioni di Azure Databricks utilizzavano le tabelle nel vecchio “formato Hive”, che sono state sostituite dalle moderne tabelle Delta. In generale, le tabelle Delta moderne superano le tabelle Hive legacy in affidabilità e prestazioni, diventando la scelta predefinita per i workflow in Databricks.
Ecco un riepilogo che può aiutarti a vedere la differenza tra le due:
Funzionalità
Tabella in formato Hive
Tabella Delta
Formato dei dati
Apache Hive (CSV, Parquet, ORC, ecc.)
Delta Lake (basato su Parquet con metadati)
Transazioni
Nessun supporto ACID (consistenza eventuale)
Piene transazioni ACID
Gestione dello schema
Applicazione limitata
Applicazione rigorosa dello schema
Ottimizzazione delle prestazioni
Richiede tuning manuale
Ottimizzazioni integrate (caching, compattazione)
Time travel
Nessun supporto integrato per query storiche
Supporta il time travel per interrogare versioni precedenti dei dati
Concorrenza
Soggetta a conflitti durante update o delete
Gestisce in modo efficiente le operazioni concorrenti
Varianti della sintassi di CREATE TABLE
Il comando CREATE TABLE in Databricks supporta più varianti per adattarsi a casi diversi. Ogni variante ha il suo scopo, con opzioni mirate come posizione dei file, clonazione e gestione dei metadati. Se vuoi rinfrescare le nozioni su Databricks SQL, ti consiglio di leggere il nostro tutorial Databricks SQL per imparare, tra le altre cose, come usare un Notebook in un warehouse SQL di Databricks.
Di seguito trovi i principali stili di sintassi con esempi e spiegazioni.
CREATE TABLE [USING]
Questa sintassi crea una nuova tabella con uno schema e un formato dati specificati. La query seguente crea una tabella chiamata sales_data leggendo dati da file Parquet archiviati in una posizione specifica.
-- Create a table from files in a specific formatCREATETABLE sales_data
USING PARQUET
LOCATION '/mnt/data/sales';Offerto da
CREATE TABLE (formato Hive)
Questa sintassi legacy è simile al comando SQL standard CREATE TABLE, usata per definire una tabella con metadati gestiti da Databricks senza dover fare riferimento a file esterni. La query sotto crea una tabella in stile Hive chiamata hive_table con uno schema predefinito e ulteriori proprietà di metadati.
-- Hive-style table creation with schema definitionCREATETABLE hive_table (
id INT,
name STRING
)COMMENT'Hive format example'
TBLPROPERTIES ('created_by'='databricks');Offerto da
Nella query sopra, la clausola COMMENT aggiunge metadati descrittivi mentre TBLPROPERTIES memorizza proprietà personalizzate sulla tabella.
CREATE TABLE LIKE
Questo comando crea una nuova tabella usando lo schema e le proprietà di una tabella esistente. Usa questa sintassi quando vuoi replicare la struttura di una tabella esistente senza copiarne i dati. È utile per test o sviluppo.
-- Create a table with the same schema as another tableCREATETABLE new_table LIKE existing_table;Offerto da
CREATE TABLE CLONE
Questa sintassi consente di creare una nuova tabella clonando una tabella Delta Lake esistente, come deep o shallow clone. Quindi, dovresti usare la sintassi CREATE TABLE CLONE quando ti serve una copia indipendente dei dati e dei metadati di una tabella (deep clone) o solo dei metadati facendo riferimento ai dati originali (shallow clone). Pensala per versioning o creazione di backup.
L'esempio seguente mostra le query per creare tabelle deep clone e shallow clone in Databricks.
-- Deep clone by defaultCREATETABLE cloned_table CLONE original_table;-- Shallow cloneCREATETABLE shallow_clone_table SHALLOW CLONE original_table;Offerto da
CREATE OR REPLACE TABLE
Questo comando combinato sostituisce una tabella esistente con una nuova, mantenendo lo stesso nome, in un'unica operazione. Usa questa sintassi quando vuoi sovrascrivere completamente una tabella esistente mantenendone il nome. È particolarmente utile per aggiornare la struttura o i dati di una tabella senza doverla prima eliminare.
La query di esempio qui sotto crea o sostituisce la tabella sales con un nuovo schema.
-- Create or replace a sales table with a new schemaCREATEORREPLACETABLE sales (
sale_id INT,
amount FLOAT)USING DELTA
LOCATION '/mnt/delta/sales';Offerto da
Ci sono altre clausole rilevanti che puoi usare con la sintassi CREATE TABLE in Databricks per gestire le tabelle in base a requisiti specifici. Di seguito trovi un riepilogo dell'uso di ciascuna clausola. Ne ho usate alcune ma non tutte negli esempi precedenti.
IF NOT EXISTS: evita errori saltando la creazione se la tabella esiste già.
USING: specifica il formato dei file (ad es. Delta, Parquet, CSV).
EXTERNAL: dichiara una tabella i cui dati risiedono fuori dallo storage gestito da Databricks.
PARTITIONED BY: definisce le partizioni per ottimizzare dataset di grandi dimensioni.
LOCATION: indica la directory che contiene i dati della tabella.
TBLPROPERTIES: aggiunge metadati per configurazioni e ottimizzazioni personalizzate della tabella.
Dimostrazioni passo passo
In questa sezione mostrerò diversi modi per creare e gestire tabelle in Databricks, con esempi concisi e spiegazioni delle clausole chiave. Ti consiglio il nostro tutorial Databricks Tutorial: 7 Must-know Concepts For Any Data Specialist per imparare a eseguire comandi SQL sulla piattaforma Databricks.
Come creare una tabella vuota
Per creare una tabella Delta vuota, definisci lo schema con nomi di colonne e tipi di dato. Usa la clausola USING DELTA per definire il formato della tabella e COMMENT per aggiungere metadati descrittivi.
Questa query crea una tabella Delta vuota chiamata employees con uno schema predefinito, che include le colonne id, name, department e hire_date.
-- Create an empty Delta table with a defined schemaCREATETABLE employees (
id BIGINT,
name STRING,
department STRING,
hire_date DATE)USING DELTA
COMMENT'Table to store employee information';Offerto da
Come creare una tabella da dati esistenti
Per creare una tabella da dati esistenti, collega la tabella a file di dati esterni in formati come CSV, Parquet o JSON. Puoi usare la clausola LOCATION per collegare la tabella al percorso file e USING per specificare il formato dei dati.
Ad esempio, la query seguente crea una tabella chiamata sales_data facendo riferimento a file Parquet archiviati in /mnt/data/sales_data/.
-- Create a table from Parquet files in a specified locationCREATETABLE sales_data
USING PARQUET
LOCATION '/mnt/data/sales_data/';Offerto da
Come creare una tabella as select (CTAS)
Puoi anche creare una tabella as select eseguendo una query e salvando il risultato. In questo scenario, la clausola AS SELECT popola la tabella con il risultato della query.
Ad esempio, la query seguente crea una nuova tabella chiamata high_value_sales selezionando e trasformando i dati dalla tabella esistente sales_data. Filtra le righe in cui total_amount è maggiore di 1000, mantenendo solo le colonne sale_id, customer_id e total_amount.
-- Create a table by selecting and transforming data from another tableCREATETABLE high_value_sales ASSELECT
sale_id,
customer_id,
total_amount
FROM sales_data
WHERE total_amount >1000;Offerto da
Come creare una tabella esterna
Creare una tabella esterna significa fare riferimento a dati archiviati al di fuori dello storage gestito da Databricks. Dovresti usare la clausola LOCATION per specificare la posizione esterna dei dati.
La query sotto crea una tabella Delta esterna chiamata external_table facendo riferimento a dati archiviati in /mnt/external_storage/external_table/.
-- Create an external table referencing data outside Databricks storageCREATETABLE external_table
USING DELTA
LOCATION '/mnt/external_storage/external_table/';Offerto da
Come creare una tabella LIKE
Per creare una tabella LIKE, duplica lo schema di una tabella esistente senza copiarne i dati. Nell'esempio seguente, la query crea una nuova tabella chiamata sales_backup con lo stesso schema della tabella sales esistente.
-- Create a new sales table with the same schema as an existing tableCREATETABLE sales_backup LIKE sales;Offerto da
Come creare TABLE CLONE
Puoi creare un clone di tabella usando la clausola CLONE per creare una copia shallow o deep di una tabella Delta per backup o test.
Nell'esempio seguente, la query crea una nuova tabella, sales_shallow_clone, copiando solo i metadati (schema e proprietà della tabella).
-- Shallow clone: Copies only metadata (references original data)CREATETABLE sales_shallow_clone CLONE sales_data;Offerto da
L'esempio seguente crea una nuova tabella, sales_deep_clone, ma copia sia i metadati sia i dati effettivi.
-- Deep clone: Copies both metadata and actual dataCREATETABLE sales_deep_clone CLONE sales_data DEEP;Offerto da
Come creare una tabella temporanea (temp table)
Usa la clausola TEMPORARY quando crei tabelle temporanee per garantire che la tabella sia specifica della sessione.
La query seguente crea una tabella temporanea chiamata temp_table che esiste solo per la sessione corrente. Seleziona id, name e sales_amount da sales_data, filtrando le righe in cui region = 'US'.
-- Create a temporary table that exists only in the sessionCREATETEMPORARYTABLE temp_table ASSELECT
id,
name,
sales_amount
FROM sales_data
WHERE region ='US';Offerto da
Come sostituire una tabella
Puoi usare la clausola CREATE OR REPLACE per sostituire definizione e contenuto della tabella. La query seguente sostituisce la tabella esistente updated_table con un nuovo schema e dati. Definisce la tabella con tre colonne (id, name, total_sales).
-- Replace an existing table with a new schema or dataCREATEORREPLACETABLE updated_table (
id BIGINT,
name STRING,
total_sales DOUBLE)USING DELTA
LOCATION '/mnt/delta/updated_table/';Offerto da
Argomenti avanzati
In questa sezione esplorerò funzionalità avanzate delle tabelle Databricks che migliorano funzionalità, prestazioni e sicurezza.
Colonne generate e colonne identity
Databricks supporta le colonne identity, che generano automaticamente valori unici per ogni nuova riga. Questa funzionalità è utile per creare chiavi surrogate nel data warehousing.
La query seguente crea una tabella employees con tre colonne: id, name e department. La colonna id è una identity che si auto-incrementa a ogni nuova riga.
-- Identity column: auto-incremented valueCREATETABLE employees (
id BIGINT GENERATED ALWAYS ASIDENTITY,-- Auto-incremented column
name STRING,
department STRING
);Offerto da
Questa altra query crea una tabella sales con tre colonne: sale_id, sale_date e sale_year. La colonna sale_year è generata e calcolata automaticamente in base alla colonna sale_date usando la funzione YEAR(sale_date).
-- Generated column: derived from other columnsCREATETABLE sales (
sale_id BIGINT,
sale_date DATE,
sale_year INT GENERATED ALWAYS AS(YEAR(sale_date))-- Derived column);Offerto da
Partitioning e clustering
Il partitioning suddivide i dati in blocchi più piccoli, migliorando le prestazioni delle query, mentre il clustering organizza i dati all'interno delle partizioni per letture più veloci.
Ad esempio, la query seguente crea una tabella partizionata in cui i dati sono suddivisi in partizioni in base alla colonna region, migliorando le prestazioni quando si filtra per regione.
-- Partitioned tableCREATETABLE partitioned_table (
id BIGINT,
region STRING,
sales_amount DOUBLE)USING DELTA
PARTITIONED BY(region);-- Querying by region will be fasterOfferto da
La query seguente ottimizza la tabella partizionata eseguendo il clustering dei dati all'interno di ogni partizione in base alla colonna sales_amount. Rende più veloci le query su sales_amount migliorando il layout dei dati per letture efficienti. La clausola ZORDER BY funziona all'interno delle partizioni per migliorare le prestazioni di lettura raggruppando i dati entro le partizioni, non tra partizioni.
-- Clustered tableOPTIMIZE partitioned_table
ZORDER BY(sales_amount);-- Clusters data within partitions for efficient readsOfferto da
Mascheramento di colonne e filtri di riga
Il mascheramento delle colonne e i filtri di riga limitano la visibilità dei dati in base a ruoli o condizioni, proteggendo le informazioni sensibili.
Ad esempio, la query seguente crea una masked view chiamata masked_table basata sulla tabella employees. La colonna salary è oscurata (sostituita con REDACTED) per tutti gli utenti tranne quelli con ruolo manager. L'istruzione CASE fa sì che solo i manager vedano lo stipendio reale, mentre gli altri vedono i dati mascherati
-- Column masking: Redact sensitive dataCREATE MASKED VIEW masked_table ASSELECT
id,
name,CASEWHENcurrent_user()='manager'THEN salary
ELSE'REDACTED'ENDAS salary
FROM employees;Offerto da
Analogamente, la query seguente usa filtri di riga per creare o sostituire una view chiamata filtered_table basata sulla tabella sales. La view filtra le righe includendo solo i dati in cui region = 'US', limitando l'accesso ai soli dati di vendita degli Stati Uniti.
-- Row filters: Fine-grained access controlCREATEORREPLACEVIEW filtered_table ASSELECT*FROM sales
WHERE region ='US';-- Limit data visibility to a specific regionOfferto da
Evoluzione dello schema
Databricks supporta l'evoluzione dello schema tramite CREATE OR REPLACE TABLE e modifiche alla tabella. Dovresti usare l'istruzione CREATE OR REPLACE TABLE per sovrascrivere schema e dati e ALTER TABLE per modificare lo schema in modo incrementale senza influire sui dati.
La query seguente sostituisce la tabella employees esistente con un nuovo schema, aggiungendo una nuova colonna hire_date mantenendo i dati in formato Delta.
-- Schema evolution with CREATE OR REPLACE TABLECREATEORREPLACETABLE employees (
id BIGINT,
name STRING,
department STRING,
hire_date DATE-- New column added)USING DELTA;Offerto da
Quest'altra query modifica la tabella employees aggiungendo una nuova colonna salary allo schema esistente.
-- Altering a table schemaALTERTABLE employees ADDCOLUMNS(salary DOUBLE);Offerto da
Ottimizzazione delle prestazioni
Per ottimizzare le prestazioni per tabelle su larga scala, puoi usare varie proprietà e tecniche come l'auto-ottimizzazione e lo Z-ordering.
Nell'esempio seguente, la query abilita l'auto-ottimizzazione su delta_table impostando proprietà per compattare automaticamente i file piccoli e fonderli in fase di scrittura, migliorando l'efficienza di archiviazione.
-- Enable automatic optimizationsALTERTABLE delta_table
SET TBLPROPERTIES ('delta.autoOptimize.optimizeWrite'='true',-- Automatically compact small files'delta.autoOptimize.autoCompact'='true'-- Automatically merge files);Offerto da
Analogamente, la query seguente ottimizza delta_table raggruppando i dati in base a region e sales_date per migliorare le prestazioni delle query, soprattutto per i filtri su queste colonne.
-- Perform clustering for faster query performanceOPTIMIZE delta_table
ZORDER BY(region, sales_date);-- Improves query efficiency for frequent filtersOfferto da
Best practice e considerazioni
Ecco alcuni aspetti da considerare quando crei tabelle in Databricks, per fare le cose nel modo giusto:
Convenzioni di denominazione delle tabelle: usa sempre nomi chiari e coerenti per migliorare la reperibilità e ridurre gli errori. Evita caratteri speciali o nomi eccessivamente lunghi per prevenire problemi di compatibilità.
Sicurezza e permessi: utilizza Unity Catalog per il controllo centralizzato degli accessi su tutte le risorse dati. Usa le Access Control List (ACL) per limitare chi può visualizzare o modificare i dati. Inoltre, maschera i dati sensibili con il mascheramento delle colonne o filtri di riga.
Backup e ripristino: fai affidamento sulla cronologia delle versioni di Delta Lake per un facile ripristino e time travel. Monitora e gestisci regolarmente la conservazione delle versioni storiche per bilanciare costi di storage ed esigenze di ripristino.
Tabelle gestite vs. esterne: è importante anche capire la differenza tra tabelle gestite ed esterne. Nelle tabelle gestite, Databricks gestisce sia i metadati sia i dati. È l'ideale quando vuoi il pieno controllo sul ciclo di vita dei dati. Nelle tabelle esterne, invece, i dati di riferimento sono archiviati al di fuori di Databricks. Questo è utile per mantenere il controllo su dati condivisi tra piattaforme o sistemi diversi.
Errori comuni e troubleshooting
Ora che abbiamo visto le best practice per gestire le tabelle in Databricks, vediamo i problemi più frequenti che potresti incontrare con le tabelle di Databricks, i relativi messaggi di errore tipici e le soluzioni.
Errori di posizione non vuota usando CREATE vs. CREATE OR REPLACE
Quando usi CREATE TABLE con una posizione specificata (clausola LOCATION), se la directory non è vuota potresti incontrare un errore come:
Error: Cannot createtable because the location isnot empty.Offerto da
Questo errore si verifica perché il comando CREATE TABLE si aspetta una directory vuota per la posizione specificata, ma file o metadati esistenti entrano in conflitto con questo requisito.
Per risolvere, usa l'istruzione CREATE OR REPLACE TABLE per sovrascrivere dati e metadati esistenti. In alternativa, ripulisci manualmente la directory prima di usare CREATE TABLE.
CREATEORREPLACETABLE delta_table
USING DELTA
LOCATION '/mnt/data/delta_table';-- Overwrites table and filesOfferto da
Mismatch di schema o problemi con alcuni tipi di dato
L'inserimento o l'interrogazione dei dati produce errori di mismatch dello schema come:
Error: Schema mismatch: Expected columntype STRING, but found INT.Offerto da
L'errore può essere causato da una discrepanza tra lo schema della tabella e i tipi di dato in ingresso. Anche conversioni di tipo non supportate o ambigue (ad es. tipi annidati complessi) possono causare mismatch di schema. Per risolvere, applica l'enforcement dello schema per verificare lo schema durante la creazione della tabella o usa l'applicazione dello schema nelle tabelle Delta.
-- Enforce schema matching during table creationCREATETABLE schema_table (
id INT,
name STRING
)USING DELTA
TBLPROPERTIES ('delta.schema.enforce'='true');-- Enforces strict schemaOfferto da
Inoltre, consenti l'evoluzione dello schema quando aggiungi nuove colonne o modifichi tipi di dato.
ALTERTABLE schema_table ADDCOLUMNS(new_column DOUBLE);Offerto da
L'uso di cast espliciti dei tipi durante l'inserimento dei dati può aiutare a risolvere questo tipo di errore.
INSERTINTO schema_table SELECT CAST(id ASINT), CAST(name AS STRING)FROM source_table;Offerto da
Limitazioni delle transazioni concorrenti con colonne identity
Quando usi colonne identity, potresti riscontrare problemi legati a transazioni concorrenti, come:
Error: Concurrent transactions detected onidentitycolumntableOfferto da
Le colonne identity sono stateful e possono incontrare conflitti quando più transazioni tentano di inserire dati in parallelo. Per il troubleshooting, usa chiavi surrogate per sostituire le colonne identity con chiavi surrogate deterministiche generate con funzioni come uuid() o monotonically_increasing_id().
CREATETABLE better_table ASSELECT
monotonically_increasing_id()AS id,-- Replaces identity column
name, department
FROM source_data;Offerto da
Puoi anche usare il MERGE di Delta Lake per workflow complessi di insert e update senza fare affidamento su colonne identity.
MERGEINTO target_table AS t
USING source_table AS s
ON t.id = s.id
WHENMATCHEDTHENUPDATESET*WHENNOTMATCHEDTHENINSERT*;Offerto da
Conclusione
In Databricks, il comando CREATE TABLE è uno strumento versatile per definire strutture dati, collegarsi a dati esterni e derivare nuovi dataset tramite query. È importante comprendere le diverse sintassi per creare e gestire tabelle in Databricks in base alle tue esigenze. Come hai visto, ci sono diversi metodi tra cui scegliere per creare tabelle.
Se vuoi approfondire i concetti fondamentali di Databricks, ti consiglio vivamente il corso di DataCamp Introduction to Databricks per conoscere Databricks come soluzione di data warehousing per la Business Intelligence (BI). Ti suggerisco anche il nostro post Databricks Certifications In 2025 per scoprire come ottenere le certificazioni Databricks, i benefici per la carriera e come scegliere quella giusta per i tuoi obiettivi professionali.
Technical writer di Data Science con esperienza pratica in data analytics, business intelligence e data science. Scrivo contenuti pratici e orientati al settore su SQL, Python, Power BI, Databricks e data engineering, basati su lavoro di analytics reale. La mia scrittura unisce profondità tecnica e impatto sul business, aiutando i professionisti a trasformare i dati in decisioni sicure.
Domande frequenti su Databricks CREATE TABLE
Qual è lo scopo del comando CREATE TABLE in Databricks?⌄
Il comando CREATE TABLE viene usato per definire una nuova tabella in Databricks, consentendo di specificare lo schema, il formato dei dati e la posizione di archiviazione della tabella.
Qual è la differenza tra tabelle gestite ed esterne?⌄
Le tabelle gestite memorizzano in Databricks sia metadati sia dati, mentre le tabelle esterne memorizzano solo i metadati, lasciando i dati in una posizione esterna.
Una tabella esterna è la stessa cosa di una tabella unmanaged? ⌄
Sì, tabella esterna e tabella non gestita (unmanaged) si riferiscono allo stesso concetto in Databricks. Memorizzano i metadati in Databricks ma mantengono i dati effettivi in una posizione esterna, permettendoti di gestire in modo indipendente il ciclo di vita dei dati.
Che differenza c'è tra shallow e deep clone?⌄
Un clone shallow copia solo i metadati, mentre un clone deep duplica sia dati sia metadati.
Cosa sono le tabelle temporanee?⌄
Le tabelle temporanee esistono solo all'interno della sessione corrente e vengono eliminate automaticamente al termine della sessione.
Cos'è l'evoluzione dello schema in Databricks?⌄
L'evoluzione dello schema permette di modificare lo schema di una tabella esistente (ad es. aggiungere o modificare colonne) senza dover ricreare l'intera tabella, il che è particolarmente utile per le tabelle Delta.
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.
Le tabelle di Databricks sono un componente fondamentale della piattaforma Databricks Lakehouse, progettate per gestire l'archiviazione e l'elaborazione di dati su larga scala. Queste tabelle consentono la collaborazione tra team unificando dati strutturati e non strutturati e supportando carichi di lavoro analitici.
In questo articolo, ti guiderò tra le diverse tecniche per creare tabelle in Databricks usando il comando
CREATE TABLEcon diverse varianti di sintassi per coprire vari casi d'uso. Condividerò anche suggerimenti sulle best practice per creare e gestire tabelle in Databricks in modo efficiente e affidabile.Per cominciare, ti consiglio vivamente di leggere il post del blog di DataCamp How to Learn Databricks: A Beginner’s Guide to the Unified Data Platform per capire le funzionalità principali e le applicazioni di Databricks e seguire un percorso strutturato per iniziare a imparare. Ti consiglio anche il nostro corso Introduction to Databricks. Anche se hai esperienza con SQL, vedrai che nella piattaforma Databricks Lakehouse alcune cose possono apparire diverse. Gli esercizi interattivi del corso ti guideranno tra query SQL, funzionalità della piattaforma e connessioni a sistemi esterni.
Introduzione alle tabelle di Databricks
Per iniziare, va detto che le tabelle di Databricks sono dataset strutturati che facilitano l'organizzazione e l'accesso ai dati nell'ambiente Databricks Lakehouse. Ce ne sono di due tipi:
Le tabelle in Databricks predefiniscono spesso Delta Lake grazie alle sue funzionalità avanzate e ottimizzazioni. Delta Lake offre transazioni ACID, scalabilità, miglioramenti prestazionali come ottimizzazioni quali caching e indicizzazione, e una gestione unificata di batch e streaming.
Da notare che le prime versioni di Azure Databricks utilizzavano le tabelle nel vecchio “formato Hive”, che sono state sostituite dalle moderne tabelle Delta. In generale, le tabelle Delta moderne superano le tabelle Hive legacy in affidabilità e prestazioni, diventando la scelta predefinita per i workflow in Databricks.
Ecco un riepilogo che può aiutarti a vedere la differenza tra le due:
Varianti della sintassi di CREATE TABLE
Il comando
CREATE TABLEin Databricks supporta più varianti per adattarsi a casi diversi. Ogni variante ha il suo scopo, con opzioni mirate come posizione dei file, clonazione e gestione dei metadati. Se vuoi rinfrescare le nozioni su Databricks SQL, ti consiglio di leggere il nostro tutorial Databricks SQL per imparare, tra le altre cose, come usare un Notebook in un warehouse SQL di Databricks.Di seguito trovi i principali stili di sintassi con esempi e spiegazioni.
CREATE TABLE [USING]
Questa sintassi crea una nuova tabella con uno schema e un formato dati specificati. La query seguente crea una tabella chiamata
sales_dataleggendo dati da file Parquet archiviati in una posizione specifica.CREATE TABLE (formato Hive)
Questa sintassi legacy è simile al comando SQL standard
CREATE TABLE, usata per definire una tabella con metadati gestiti da Databricks senza dover fare riferimento a file esterni. La query sotto crea una tabella in stile Hive chiamatahive_tablecon uno schema predefinito e ulteriori proprietà di metadati.Nella query sopra, la clausola
COMMENTaggiunge metadati descrittivi mentreTBLPROPERTIESmemorizza proprietà personalizzate sulla tabella.CREATE TABLE LIKE
Questo comando crea una nuova tabella usando lo schema e le proprietà di una tabella esistente. Usa questa sintassi quando vuoi replicare la struttura di una tabella esistente senza copiarne i dati. È utile per test o sviluppo.
CREATE TABLE CLONE
Questa sintassi consente di creare una nuova tabella clonando una tabella Delta Lake esistente, come deep o shallow clone. Quindi, dovresti usare la sintassi
CREATE TABLE CLONEquando ti serve una copia indipendente dei dati e dei metadati di una tabella (deep clone) o solo dei metadati facendo riferimento ai dati originali (shallow clone). Pensala per versioning o creazione di backup.L'esempio seguente mostra le query per creare tabelle deep clone e shallow clone in Databricks.
CREATE OR REPLACE TABLE
Questo comando combinato sostituisce una tabella esistente con una nuova, mantenendo lo stesso nome, in un'unica operazione. Usa questa sintassi quando vuoi sovrascrivere completamente una tabella esistente mantenendone il nome. È particolarmente utile per aggiornare la struttura o i dati di una tabella senza doverla prima eliminare.
La query di esempio qui sotto crea o sostituisce la tabella
salescon un nuovo schema.Ci sono altre clausole rilevanti che puoi usare con la sintassi
CREATE TABLEin Databricks per gestire le tabelle in base a requisiti specifici. Di seguito trovi un riepilogo dell'uso di ciascuna clausola. Ne ho usate alcune ma non tutte negli esempi precedenti.IF NOT EXISTS: evita errori saltando la creazione se la tabella esiste già.USING: specifica il formato dei file (ad es. Delta, Parquet, CSV).EXTERNAL: dichiara una tabella i cui dati risiedono fuori dallo storage gestito da Databricks.PARTITIONED BY: definisce le partizioni per ottimizzare dataset di grandi dimensioni.LOCATION: indica la directory che contiene i dati della tabella.TBLPROPERTIES: aggiunge metadati per configurazioni e ottimizzazioni personalizzate della tabella.Dimostrazioni passo passo
In questa sezione mostrerò diversi modi per creare e gestire tabelle in Databricks, con esempi concisi e spiegazioni delle clausole chiave. Ti consiglio il nostro tutorial Databricks Tutorial: 7 Must-know Concepts For Any Data Specialist per imparare a eseguire comandi SQL sulla piattaforma Databricks.
Come creare una tabella vuota
Per creare una tabella Delta vuota, definisci lo schema con nomi di colonne e tipi di dato. Usa la clausola
USING DELTAper definire il formato della tabella eCOMMENTper aggiungere metadati descrittivi.Questa query crea una tabella Delta vuota chiamata
employeescon uno schema predefinito, che include le colonneid,name,departmentehire_date.Come creare una tabella da dati esistenti
Per creare una tabella da dati esistenti, collega la tabella a file di dati esterni in formati come CSV, Parquet o JSON. Puoi usare la clausola
LOCATIONper collegare la tabella al percorso file eUSINGper specificare il formato dei dati.Ad esempio, la query seguente crea una tabella chiamata
sales_datafacendo riferimento a file Parquet archiviati in/mnt/data/sales_data/.Come creare una tabella as select (CTAS)
Puoi anche creare una tabella as select eseguendo una query e salvando il risultato. In questo scenario, la clausola
AS SELECTpopola la tabella con il risultato della query.Ad esempio, la query seguente crea una nuova tabella chiamata
high_value_salesselezionando e trasformando i dati dalla tabella esistentesales_data. Filtra le righe in cuitotal_amountè maggiore di 1000, mantenendo solo le colonnesale_id,customer_idetotal_amount.Come creare una tabella esterna
Creare una tabella esterna significa fare riferimento a dati archiviati al di fuori dello storage gestito da Databricks. Dovresti usare la clausola
LOCATIONper specificare la posizione esterna dei dati.La query sotto crea una tabella Delta esterna chiamata
external_tablefacendo riferimento a dati archiviati in/mnt/external_storage/external_table/.Come creare una tabella LIKE
Per creare una tabella
LIKE, duplica lo schema di una tabella esistente senza copiarne i dati. Nell'esempio seguente, la query crea una nuova tabella chiamatasales_backupcon lo stesso schema della tabellasalesesistente.Come creare TABLE CLONE
Puoi creare un clone di tabella usando la clausola
CLONEper creare una copia shallow o deep di una tabella Delta per backup o test.Nell'esempio seguente, la query crea una nuova tabella,
sales_shallow_clone,copiando solo i metadati (schema e proprietà della tabella).L'esempio seguente crea una nuova tabella,
sales_deep_clone, ma copia sia i metadati sia i dati effettivi.Come creare una tabella temporanea (temp table)
Usa la clausola
TEMPORARYquando crei tabelle temporanee per garantire che la tabella sia specifica della sessione.La query seguente crea una tabella temporanea chiamata
temp_tableche esiste solo per la sessione corrente. Selezionaid,nameesales_amountdasales_data, filtrando le righe in cuiregion = 'US'.Come sostituire una tabella
Puoi usare la clausola
CREATE OR REPLACEper sostituire definizione e contenuto della tabella. La query seguente sostituisce la tabella esistenteupdated_tablecon un nuovo schema e dati. Definisce la tabella con tre colonne (id,name,total_sales).Argomenti avanzati
In questa sezione esplorerò funzionalità avanzate delle tabelle Databricks che migliorano funzionalità, prestazioni e sicurezza.
Colonne generate e colonne identity
Databricks supporta le colonne identity, che generano automaticamente valori unici per ogni nuova riga. Questa funzionalità è utile per creare chiavi surrogate nel data warehousing.
La query seguente crea una tabella
employeescon tre colonne:id,nameedepartment. La colonnaidè una identity che si auto-incrementa a ogni nuova riga.Questa altra query crea una tabella
salescon tre colonne:sale_id,sale_dateesale_year. La colonnasale_yearè generata e calcolata automaticamente in base alla colonnasale_dateusando la funzioneYEAR(sale_date).Partitioning e clustering
Il partitioning suddivide i dati in blocchi più piccoli, migliorando le prestazioni delle query, mentre il clustering organizza i dati all'interno delle partizioni per letture più veloci.
Ad esempio, la query seguente crea una tabella partizionata in cui i dati sono suddivisi in partizioni in base alla colonna
region, migliorando le prestazioni quando si filtra per regione.La query seguente ottimizza la tabella partizionata eseguendo il clustering dei dati all'interno di ogni partizione in base alla colonna
sales_amount. Rende più veloci le query susales_amountmigliorando il layout dei dati per letture efficienti. La clausolaZORDER BYfunziona all'interno delle partizioni per migliorare le prestazioni di lettura raggruppando i dati entro le partizioni, non tra partizioni.Mascheramento di colonne e filtri di riga
Il mascheramento delle colonne e i filtri di riga limitano la visibilità dei dati in base a ruoli o condizioni, proteggendo le informazioni sensibili.
Ad esempio, la query seguente crea una masked view chiamata
masked_tablebasata sulla tabellaemployees. La colonnasalaryè oscurata (sostituita conREDACTED) per tutti gli utenti tranne quelli con ruolomanager. L'istruzioneCASEfa sì che solo i manager vedano lo stipendio reale, mentre gli altri vedono i dati mascheratiAnalogamente, la query seguente usa filtri di riga per creare o sostituire una view chiamata
filtered_tablebasata sulla tabellasales. La view filtra le righe includendo solo i dati in cuiregion = 'US', limitando l'accesso ai soli dati di vendita degli Stati Uniti.Evoluzione dello schema
Databricks supporta l'evoluzione dello schema tramite
CREATE OR REPLACE TABLEe modifiche alla tabella. Dovresti usare l'istruzioneCREATE OR REPLACE TABLEper sovrascrivere schema e dati eALTER TABLEper modificare lo schema in modo incrementale senza influire sui dati.La query seguente sostituisce la tabella
employeesesistente con un nuovo schema, aggiungendo una nuova colonnahire_datemantenendo i dati in formato Delta.Quest'altra query modifica la tabella
employeesaggiungendo una nuova colonnasalaryallo schema esistente.Ottimizzazione delle prestazioni
Per ottimizzare le prestazioni per tabelle su larga scala, puoi usare varie proprietà e tecniche come l'auto-ottimizzazione e lo Z-ordering.
Nell'esempio seguente, la query abilita l'auto-ottimizzazione su
delta_tableimpostando proprietà per compattare automaticamente i file piccoli e fonderli in fase di scrittura, migliorando l'efficienza di archiviazione.Analogamente, la query seguente ottimizza
delta_tableraggruppando i dati in base aregionesales_dateper migliorare le prestazioni delle query, soprattutto per i filtri su queste colonne.Best practice e considerazioni
Ecco alcuni aspetti da considerare quando crei tabelle in Databricks, per fare le cose nel modo giusto:
Errori comuni e troubleshooting
Ora che abbiamo visto le best practice per gestire le tabelle in Databricks, vediamo i problemi più frequenti che potresti incontrare con le tabelle di Databricks, i relativi messaggi di errore tipici e le soluzioni.
Errori di posizione non vuota usando CREATE vs. CREATE OR REPLACE
Quando usi
CREATE TABLEcon una posizione specificata (clausolaLOCATION), se la directory non è vuota potresti incontrare un errore come:Questo errore si verifica perché il comando
CREATE TABLEsi aspetta una directory vuota per la posizione specificata, ma file o metadati esistenti entrano in conflitto con questo requisito.Per risolvere, usa l'istruzione
CREATE OR REPLACE TABLEper sovrascrivere dati e metadati esistenti. In alternativa, ripulisci manualmente la directory prima di usareCREATE TABLE.Mismatch di schema o problemi con alcuni tipi di dato
L'inserimento o l'interrogazione dei dati produce errori di mismatch dello schema come:
L'errore può essere causato da una discrepanza tra lo schema della tabella e i tipi di dato in ingresso. Anche conversioni di tipo non supportate o ambigue (ad es. tipi annidati complessi) possono causare mismatch di schema. Per risolvere, applica l'enforcement dello schema per verificare lo schema durante la creazione della tabella o usa l'applicazione dello schema nelle tabelle Delta.
Inoltre, consenti l'evoluzione dello schema quando aggiungi nuove colonne o modifichi tipi di dato.
L'uso di cast espliciti dei tipi durante l'inserimento dei dati può aiutare a risolvere questo tipo di errore.
Limitazioni delle transazioni concorrenti con colonne identity
Quando usi colonne identity, potresti riscontrare problemi legati a transazioni concorrenti, come:
Le colonne identity sono stateful e possono incontrare conflitti quando più transazioni tentano di inserire dati in parallelo. Per il troubleshooting, usa chiavi surrogate per sostituire le colonne identity con chiavi surrogate deterministiche generate con funzioni come
uuid()omonotonically_increasing_id().Puoi anche usare il
MERGEdi Delta Lake per workflow complessi di insert e update senza fare affidamento su colonne identity.Conclusione
In Databricks, il comando
CREATE TABLEè uno strumento versatile per definire strutture dati, collegarsi a dati esterni e derivare nuovi dataset tramite query. È importante comprendere le diverse sintassi per creare e gestire tabelle in Databricks in base alle tue esigenze. Come hai visto, ci sono diversi metodi tra cui scegliere per creare tabelle.Se vuoi approfondire i concetti fondamentali di Databricks, ti consiglio vivamente il corso di DataCamp Introduction to Databricks per conoscere Databricks come soluzione di data warehousing per la Business Intelligence (BI). Ti suggerisco anche il nostro post Databricks Certifications In 2025 per scoprire come ottenere le certificazioni Databricks, i benefici per la carriera e come scegliere quella giusta per i tuoi obiettivi professionali.