Se hai mai dovuto analizzare un file CSV di un paio di gigabyte, conosci già il copione. Apri Excel e il programma si blocca. Scrivi uno script Python con pandas e passi dieci minuti ad aggiustare i tipi delle colonne. Carichi il file in PostgreSQL e scopri che devi prima creare una tabella, definire uno schema e decidere dove allocare il tablespace.
In questi casi un database embedded ottimizzato per l’analisi è spesso più pratico di un motore SQL tradizionale. DuckDB è esattamente questo, e negli ultimi anni ha guadagnato un’adozione che pochi progetti open source possono vantare. A giugno 2026, con la versione 1.5.4 appena rilasciata e la versione 2.0 prevista per l’autunno, è un buon momento per capire cosa lo rende diverso e perché potrebbe diventare il tuo strumento preferito per lavorare con grandi quantità di dati.
Diverso da SQLite, PostgreSQL e pandas
La differenza fondamentale sta nell’architettura. DuckDB non è un database client-server, è una libreria embedded simile a SQLite. SQLite è ottimizzato per le transazioni OLTP, cioè tante piccole operazioni di lettura e scrittura, ciascuna rapida, gestite in concorrenza. DuckDB è ottimizzato per OLAP (Online Analytical Processing), ovvero poche query pesanti che leggono milioni di righe e le aggregano in un risultato compatto.
DuckDB implementa un motore di esecuzione vettorizzato. Invece di elaborare una riga alla volta (come fanno i database tradizionali), elabora lotti di migliaia di righe per volta, sfruttando la cache della CPU. Il risultato è che su query analitiche, DuckDB è spesso da dieci a cento volte più veloce di SQLite su una quantità di dati analoga. È un salto prestazionale che si nota subito quando si lavora con file da centinaia di milioni di righe.

Un altro vantaggio è che DuckDB può leggere e scrivere direttamente file CSV, JSON, Parquet e Arrow senza importare i dati nel database. Non devi caricare nulla: basta puntare al file sulla scrivania o in un bucket S3 e iniziare a fare query SQL. Se arrivi da PostgreSQL o MySQL, questa possibilità ti sembrerà quasi incredibile nella sua semplicità. Con DuckDB, il confine tra “file” e “database” diventa sottile, e in molti casi smette del tutto di esistere.
Come installare DuckDB e fare la prima query
L’installazione è volutamente semplice. DuckDB è distribuito come singolo eseguibile statico per Windows, macOS e Linux. Lo scarichi e lo lanci, non c’è un demone da avviare né una porta da configurare. Sul sito ufficiale (duckdb.org) trovi i download per ogni piattaforma. Se preferisci la via rapida da terminale:
# Linux / macOS
curl -fsSL https://install.duckdb.org | sh
# oppure via brew
brew install duckdb
# Windows con winget
winget install DuckDB.cli
Una volta installato, lanci duckdb e ti ritrovi in una shell SQL interattiva. Puoi già scrivere query, ma la magia arriva quando punti DuckDB direttamente a un file esistente. Per esempio, supponiamo che tu abbia un file CSV con le vendite del tuo negozio:
duckdb vendite.csv
Dentro la shell, DuckDB espone automaticamente una vista chiamata vendite che punta al file. Puoi interrogarla subito:
SELECT categoria, SUM(importo) AS totale
FROM vendite
WHERE data >= '2026-01-01'
GROUP BY categoria
ORDER BY totale DESC;
Niente CREATE TABLE, niente COPY, niente INSERT INTO. Il file è già lì, pronto per essere interrogato. Se invece vuoi creare un database persistente per lavori più complessi, basta specificare un nome di file:
duckdb mio_analisi.db
E da quel momento tutte le tabelle che crei e i dati che importi rimangono salvati in quel file. Puoi condividere il file con chiunque, e chi lo riceve lo apre con DuckDB e ha tutto il database pronto. Niente dump, niente restore.
CSV, JSON, Parquet come se fossero tabelle native
Il supporto multi-formato di DuckDB funziona in profondità e si adatta a scenari molto diversi. Con i file CSV, DuckDB rileva automaticamente i tipi delle colonne (date, numeri, stringhe) e permette di specificare manualmente lo schema se la rilevazione automatica fallisce. Puoi passare da un formato all’altro senza cambiare sintassi.
SELECT * FROM 'dati_2026.csv' WHERE regione = 'Lombardia';
Una sintassi così diretta sembra quasi banale, ma prova a farla con qualsiasi altro database e ti accorgerai subito della differenza. Con i file JSON, DuckDB gestisce sia array che oggetti annidati. Puoi esplorare la struttura con funzioni come json_extract o puoi appiattire automaticamente i documenti con UNNEST:
SELECT nome, json_extract(metadati, '$.browser') AS browser
FROM 'sessioni.jsonl';
Il formato Parquet merita un discorso a parte. Parquet è il formato di storage colonnare standard nell’ecosistema big data, usato da Spark, Presto, Hive. DuckDB può leggere file Parquet locali, remoti (via HTTP o S3) e applicare predicate pushdown: se chiedi solo le righe di febbraio, DuckDB non legge l’intero file ma solo i gruppi di righe che contengono febbraio. Questo rende le query su file remoto sorprendentemente veloci, anche su connessioni lente:
SELECT città, AVG(temp) AS media
FROM 'https://meteodati.it/2026/centraline.parquet'
WHERE mese = 6
GROUP BY città;
Lo schema dei dati è nei file stessi, non in un catalogo esterno. Questa caratteristica rende DuckDB ideale per l’analisi esplorativa: apri un file, fai una query, capisci se contiene quello che cerchi e decidi come procedere.
DuckDB 1.5, DuckLake e altre novità
A marzo 2026 DuckDB ha pubblicato la versione 1.5.0 (nome in codice “Variegata“), seguita da alcuni rilasci minori fino alla 1.5.4 di giugno. Le novità di questa linea sono molteplici. La più rilevante sul piano dei tipi di dato è VARIANT: un tipo semi-strutturato ispirato all’omonimo tipo di Snowflake, che a differenza del tipo JSON — memorizzato come testo — salva i dati in formato binario tipizzato.
Ogni riga in una colonna VARIANT porta con sé le proprie informazioni di tipo, il che si traduce in compressione migliore e query più veloci su dati eterogenei. Se lavori abitualmente con JSON da sorgenti diverse, VARIANT cambia il modo in cui puoi interrogarli.
Sul fronte lakehouse, la versione 1.5.2 (aprile 2026) ha portato il supporto per DuckLake v1.0, il formato lakehouse nativo di DuckDB che raggiunge con questa release la maturità di produzione e la garanzia di backward-compatibility. L’idea di fondo di DuckLake è diversa da quella di Iceberg e Delta Lake: invece di migliaia di file di metadati su object storage, DuckLake memorizza l’intero catalogo e i metadati in un database SQL (SQLite, PostgreSQL o DuckDB stesso), mentre i dati raw restano in file Parquet.
Il risultato sono latenze di lettura fino a dieci volte inferiori rispetto ai formati concorrenti. DuckLake v1.0 introduce anche data inlining, tabelle ordinate, bucket partitioning e vettori di cancellazione compatibili con il formato Puffin di Iceberg. Non devi abbandonare il tuo ecosistema esistente per provarlo: DuckDB supporta anche Iceberg e Delta Lake in parallelo.
Con la versione 1.5, DuckDB ha inoltre consolidato il supporto per Iceberg con operazioni ALTER TABLE, MERGE INTO e DELETE su tabelle partizionate, il tipo GEOMETRY nativo per i dati geospaziali e la gestione di bucket e truncate partitions.
La versione 1.5.3 (maggio 2026) ha introdotto Quack, il nuovo protocollo client-server di DuckDB. DuckDB, nato come database embedded, diventa opzionalmente anche un server a cui connettersi da remoto. Quack è ancora in fase beta, ma già disponibile come estensione core: basta chiamare quack_serve() per esporre un’istanza DuckDB sulla rete. La versione production-ready di Quack è attesa insieme a DuckDB 2.0 nell’autunno 2026, che porterà anche un nuovo planner delle query e ulteriori miglioramenti alla gestione della concorrenza.
Il client WASM disponibile su shell.duckdb.org permette inoltre di eseguire query DuckDB direttamente dal browser, senza installare nulla. Il motore gira in WebAssembly, i dati possono essere caricati da URL pubblici e il risultato viene visualizzato nella pagina. Per provare una query su un file Parquet pubblico non serve altro che un browser. Niente installazione, niente configurazione.
Il progetto è governato dalla DuckDB Foundation, una fondazione non-profit indipendente da investitori esterni. DuckDB Labs, il team commerciale che sviluppa il progetto, e MotherDuck, la piattaforma cloud costruita sopra DuckDB, contribuiscono all’ecosistema senza condizionare la direzione open source del progetto.
DuckDB potrebbe diventare il tuo coltellino svizzero dei dati
DuckDB non sostituisce PostgreSQL per le applicazioni transazionali, né MySQL per il web: non è quello lo scopo per cui è stato progettato. DuckDB si inserisce in uno spazio specifico, l’analisi rapida ed esplorativa dei dati senza infrastruttura. Lo usi quando hai un file CSV da controllare, quando devi aggregare milioni di righe in un report, quando vuoi preparare i dati per un modello di machine learning senza accendere un cluster Spark.
Le integrazioni con Python (tramite duckdb library) permettono di eseguire SQL direttamente su DataFrame pandas, senza convertire nulla:
import duckdb
import pandas as pd
df = pd.read_csv("vendite.csv")
risultato = duckdb.sql("""
SELECT categoria, SUM(importo) AS totale
FROM df
GROUP BY categoria
""").df()
Nessun passaggio intermedio, nessuna copia in memoria. DuckDB esegue la query direttamente sui dati di pandas sfruttando l’interfaccia Arrow, che è molto più veloce di una conversione esplicita. Se usi Jupyter o Marimo, puoi alternare codice Python e query SQL con la stessa naturalezza con cui passi da una cella all’altra del notebook.
DuckDB per l’uso per cui è nato, ovvero analizzare grandi quantità di dati strutturati in formato tabellare, non ha rivali nel panorama open source.













