Perché DuckDB sta diventando popolare?
Perché DuckDB è popolare?
Cos’è DuckDB?
DuckDB è un sistema di gestione di database incorporato gratuito e open-source progettato per l’analisi dei dati e l’elaborazione analitica online. Ciò significa diverse cose:
- Talmo Pereira sul potere dello strumento AI SLEAP per studi biologici e neurologici
- Come cambiare carriera da ingegnere meccanico a data scientist?
- Tutti i tuoi post online ora appartengono all’AI, dichiara Google
- È un software gratuito e open-source, quindi chiunque può utilizzare e modificare il codice.
- È incorporato, il che significa che il DBMS (sistema di gestione del database) viene eseguito nello stesso processo dell’applicazione che lo utilizza. Ciò lo rende veloce e semplice da usare.
- È ottimizzato per l’analisi dei dati e l’OLAP (elaborazione analitica online), non solo per i dati transazionali come i database tipici. Ciò significa che i dati sono organizzati per colonne anziché per righe per ottimizzare l’aggregazione e l’analisi.
- Supporta SQL standard, quindi è possibile eseguire query, aggregazioni, join e altre funzioni SQL sui dati.
- Viene eseguito in-process, all’interno dell’applicazione stessa anziché come un processo separato. Ciò elimina il costo di comunicazione tra processi.
- Come SQLite, è un database semplice basato su file, quindi non è necessaria un’installazione separata del server. Basta includere la libreria nella propria applicazione.
In sintesi, DuckDB fornisce un database analitico incorporato, semplice da utilizzare, per le applicazioni che necessitano di capacità di analisi dati veloci e semplici. Si rivolge a un’area di elaborazione analitica in cui un server di database completo sarebbe eccessivo.
Perché DuckDB sta diventando popolare?
Ci sono molte ragioni per cui le aziende stanno ora creando prodotti basati su DuckDB. Il database è progettato per eseguire query analitiche veloci, il che significa che è ottimizzato per aggregazioni, join e query complesse su grandi insiemi di dati – i tipi di query spesso utilizzati in analisi e reporting. Inoltre:
- È semplice da installare, distribuire e utilizzare. Non c’è un server da configurare: DuckDB viene eseguito incorporato all’interno dell’applicazione. Ciò rende facile l’integrazione con diversi linguaggi di programmazione e ambienti.
- Nonostante la sua semplicità, DuckDB ha un ricco set di funzionalità. Supporta lo standard SQL completo, transazioni, indici secondari e si integra bene con linguaggi di programmazione per l’analisi dei dati popolari come Python e R.
- DuckDB è gratuito per chiunque lo utilizzi e lo modifichi, il che abbassa la soglia per gli sviluppatori e gli analisti dei dati per adottarlo.
- DuckDB è ben testato e stabile. Ha un ampio set di test ed è continuamente integrato e testato su una varietà di piattaforme per garantire stabilità.
- DuckDB offre prestazioni paragonabili a database OLAP specializzati, pur essendo più facile da distribuire. Ciò lo rende adatto sia per query analitiche su piccoli insiemi di dati che per grandi insiemi di dati aziendali.
In breve, DuckDB combina la semplicità e la facilità d’uso di SQLite con le prestazioni analitiche di database colonnari specializzati. Tutti questi fattori – prestazioni, semplicità, funzionalità e licenza open source – contribuiscono alla crescente popolarità di DuckDB tra gli sviluppatori e gli analisti dei dati.
Esempio DuckDB Python
Proviamo alcune funzionalità di DuckDB utilizzando l’API Python.
Puoi installare DuckDB usando Pypi:
pip install duckdb
Per altri linguaggi di programmazione, consulta la guida di installazione di DuckDB.
In questo esempio, utilizzeremo il set di dati CSV Data Science Salaries 2023 di Kaggle e proveremo le varie funzionalità di DuckDB.
API di relazione
Puoi caricare un file CSV come pandas in una relazione. DuckDB fornisce un’API relazionale che consente agli utenti di collegare insieme le operazioni di query. Le query vengono valutate in modo pigro, il che consente a DuckDB di ottimizzare la loro esecuzione.
Abbiamo caricato il set di dati sugli stipendi della scienza dei dati e visualizzato l’alias.
import duckdb
rel = duckdb.read_csv('ds_salaries.csv')
rel.alias
'ds_salaries.csv'
Per visualizzare i nomi delle colonne, useremo .columns
simile a pandas.
rel.columns
['work_year',
'experience_level',
'employment_type',
'job_title',
'salary',
'salary_currency',
'salary_in_usd',
'employee_residence',
'remote_ratio',
'company_location',
'company_size']
Puoi applicare diverse funzioni alla relazione per ottenere risultati specifici. Nel nostro caso, abbiamo filtrato “work_year”, visualizzato solo tre colonne, e ordinato e limitato i risultati per visualizzare le cinque posizioni lavorative con il salario più basso.
Scopri di più sull’API relazionale seguendo la guida.
rel.filter("work_year > 2021").project(
"work_year,job_title,salary_in_usd"
).order("salary_in_usd").limit(5)
┌───────────┬─────────────────┬───────────────┐
│ work_year │ job_title │ salary_in_usd │
│ int64 │ varchar │ int64 │
├───────────┼─────────────────┼───────────────┤
│ 2022 │ NLP Engineer │ 5132 │
│ 2022 │ Data Analyst │ 5723 │
│ 2022 │ BI Data Analyst │ 6270 │
│ 2022 │ AI Developer │ 6304 │
│ 2022 │ Data Analyst │ 6359 │
└───────────┴─────────────────┴───────────────┘
Puoi anche utilizzare l’API relazionale per unire due set di dati. Nel nostro caso, stiamo unendo lo stesso set di dati cambiando il nome alias su “job_title”.
rel2 = duckdb.read_csv('ds_salaries.csv')
rel.set_alias('a').join(rel.set_alias('b'), 'job_title').limit(5)
┌───────────┬──────────────────┬─────────────────┬───┬──────────────┬──────────────────┬──────────────┐
│ work_year │ experience_level │ employment_type │ ... │ remote_ratio │ company_location │ company_size │
│ int64 │ varchar │ varchar │ │ int64 │ varchar │ varchar │
├───────────┼──────────────────┼─────────────────┼───┼──────────────┼──────────────────┼──────────────┤
│ 2023 │ SE │ FT │ ... │ 100 │ US │ L │
│ 2023 │ MI │ CT │ ... │ 100 │ US │ S │
│ 2023 │ MI │ CT │ ... │ 100 │ US │ S │
│ 2023 │ SE │ FT │ ... │ 100 │ US │ S │
│ 2023 │ SE │ FT │ ... │ 100 │ US │ S │
├───────────┴──────────────────┴─────────────────┴───┴──────────────┴──────────────────┴──────────────┤
│ 5 righe 21 colonne (6 mostrate) │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘
Metodo SQL diretto
Ci sono anche metodi diretti. Devi semplicemente scrivere una query SQL per eseguire l’analisi sul set di dati. Invece del nome della tabella, scriverai la posizione e il nome del file CSV.
duckdb.sql('SELECT * FROM "ds_salaries.csv" LIMIT 5')
┌───────────┬──────────────────┬─────────────────┬───┬──────────────┬──────────────────┬──────────────┐
│ work_year │ experience_level │ employment_type │ ... │ remote_ratio │ company_location │ company_size │
│ int64 │ varchar │ varchar │ │ int64 │ varchar │ varchar │
├───────────┼──────────────────┼─────────────────┼───┼──────────────┼──────────────────┼──────────────┤
│ 2023 │ SE │ FT │ ... │ 100 │ ES │ L │
│ 2023 │ MI │ CT │ ... │ 100 │ US │ S │
│ 2023 │ MI │ CT │ ... │ 100 │ US │ S │
│ 2023 │ SE │ FT │ ... │ 100 │ CA │ M │
│ 2023 │ SE │ FT │ ... │ 100 │ CA │ M │
├───────────┴──────────────────┴─────────────────┴───┴──────────────┴──────────────────┴──────────────┤
│ 5 righe 11 colonne (6 mostrate) │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘
Memoria Persistente
Di default, DuckDB opera su un database in memoria. Ciò significa che le tabelle create vengono memorizzate in memoria e non persistono su disco. Tuttavia, utilizzando il metodo .connect()
, è possibile stabilire una connessione a un file di database persistente su disco. I dati scritti su quella connessione al database verranno quindi salvati nel file su disco e ricaricati al momento della riconnessione allo stesso file.
- Crea un database utilizzando il metodo
.connect()
. - Esegui una query SQL per creare una tabella.
- Utilizza la Query per aggiungere due record.
- Mostra la nuova tabella di test appena creata.
import duckdb
con = duckdb.connect('kdn.db')
con.sql("CREATE TABLE test_table (i INTEGER, j STRING)")
con.sql("INSERT INTO test_table VALUES (1, 'one'),(9,'nine')")
con.table('test_table').show()
┌───────┬─────────┐
│ i │ j │
│ int32 │ varchar │
├───────┼─────────┤
│ 1 │ one │
│ 9 │ nine │
└───────┴─────────┘
Puoi anche creare la nuova tabella utilizzando un file CSV di stipendi per la scienza dei dati.
con.sql('CREATE TABLE ds_salaries AS SELECT * FROM "ds_salaries.csv";')
con.table('ds_salaries').limit(5).show()
┌───────────┬──────────────────┬─────────────────┬───┬──────────────┬──────────────────┬──────────────┐
│ work_year │ experience_level │ employment_type │ ... │ remote_ratio │ company_location │ company_size │
│ int64 │ varchar │ varchar │ │ int64 │ varchar │ varchar │
├───────────┼──────────────────┼─────────────────┼───┼──────────────┼──────────────────┼──────────────┤
│ 2023 │ SE │ FT │ ... │ 100 │ ES │ L │
│ 2023 │ MI │ CT │ ... │ 100 │ US │ S │
│ 2023 │ MI │ CT │ ... │ 100 │ US │ S │
│ 2023 │ SE │ FT │ ... │ 100 │ CA │ M │
│ 2023 │ SE │ FT │ ... │ 100 │ CA │ M │
├───────────┴──────────────────┴─────────────────┴───┴──────────────┴──────────────────┴──────────────┤
│ 5 righe 11 colonne (mostrate 6) │
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘
Dopo aver eseguito tutte le operazioni, è necessario chiudere la connessione al database.
con.close()
Conclusioni
Perché mi piace DuckDB? È veloce e facile da imparare e gestire. Credo che la semplicità sia il motivo principale per cui DuckDB è diventato ampiamente utilizzato nella comunità della scienza dei dati. DuckDB offre un’interfaccia SQL intuitiva che è facile da apprendere per gli analisti e gli scienziati dei dati. L’installazione è semplice e i file di database sono leggeri e facili da gestire. Tutto ciò rende DuckDB un piacere da utilizzare.
Consulta il mio precedente articolo su Deepnote sulla scienza dei dati con DuckDB per un’analisi approfondita delle funzionalità e dei casi d’uso.
Con strumenti robusti per il caricamento, la gestione e l’analisi dei dati, DuckDB offre un’opzione interessante rispetto ad altre soluzioni di database per la scienza dei dati. Credo che DuckDB continuerà a guadagnare utenti nei prossimi anni, man mano che sempre più professionisti dei dati scopriranno la sua natura user-friendly. Abid Ali Awan (@1abidaliawan) è un professionista certificato di data science che ama creare modelli di machine learning. Attualmente si concentra sulla creazione di contenuti e sulla scrittura di blog tecnici su tecnologie di machine learning e data science. Abid ha ottenuto una laurea specialistica in Technology Management e una laurea triennale in Ingegneria delle Telecomunicazioni. La sua visione è quella di costruire un prodotto di intelligenza artificiale utilizzando una rete neurale grafica per gli studenti che lottano con disturbi mentali.