Un OLAP embedded
SQLite è il database relazionale in-process più diffuso al mondo (in ogni browser, smartphone, app). Ma è OLTP: progettato per transazioni, row-oriented. Per query analitiche pesanti è inefficiente.
DuckDB è il suo equivalente OLAP: database columnar in-process, fondato nel 2019 da Mark Raasveldt e Hannes Mühleisen al CWI Amsterdam (stesso istituto dove è nato Python). La versione 0.6 di novembre 2022 consolida produzione maturity. La 1.0 arriverà giugno 2024. Licenza MIT.
In-process analytics
Come SQLite: nessun server, nessuna installazione complessa. Una libreria compilata (C++) si integra nel processo dell’applicazione:
import duckdb
# Query diretto su Parquet files
result = duckdb.sql("""
SELECT country, SUM(sales) as total
FROM 's3://bucket/data/*.parquet'
WHERE year = 2023
GROUP BY country
ORDER BY total DESC
""").df()
DuckDB legge nativamente:
- Parquet (columnar) — streaming e predicate pushdown
- CSV — parser ottimizzato
- JSON, Arrow, SQLite, Postgres (via extension)
- HTTP(S) URL remoti
- S3, Azure Blob, GCS
Performance
DuckDB è competitivo con Spark/Polars/ClickHouse per query singolo-nodo su dataset fino a centinaia di GB. Vantaggio: zero overhead di deploy distribuito. Su laptop con SSD moderno, DuckDB gestisce query analitiche su GB di Parquet in secondi.
Uso
- Analytics locale di data scientist senza infrastruttura
- Notebook interattivi (Jupyter, Observable)
- Embedded analytics in applicazioni (AI model training, ad-hoc exploration)
- Testing di pipeline ETL
- Data engineering — alternativa leggera a Spark locale
Ecosistema
- Python, R, Node.js, Java, Go — bindings ufficiali
- SQL dialetto PostgreSQL-compatibile + estensioni analytical
- Extensions:
httpfs,postgres_scanner,parquet,json,spatial
Nel contesto italiano
Adozione rapida nei team di data analytics e ML italiani dal 2023.
Riferimenti: DuckDB (2019+), Mark Raasveldt, Hannes Mühleisen, CWI Amsterdam. Licenza MIT. 1.0 (giugno 2024). In-process columnar database. Parquet/CSV/JSON native reading. SQL PostgreSQL-compatibile.
