Deprecated: Creation of dynamic property Timber\Site::$pingback is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Site.php on line 180

Deprecated: Creation of dynamic property Timber\User::$name is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/User.php on line 118

Deprecated: Creation of dynamic property Timber\Post::$has_disclaimer is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_edit_lock is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_edit_last is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$onesignal_meta_box_present is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$onesignal_send_notification is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$onesignal_modify_title_and_content is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$onesignal_notification_custom_heading is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$onesignal_notification_custom_content is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_focuskw is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_metadesc is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_linkdex is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_content_score is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_estimated-reading-time-minutes is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_wordproof_timestamp is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$tipologia is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_tipologia is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$attributi is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_attributi is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$in_evidenza_newsletter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_in_evidenza_newsletter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$inviato_in_newsletter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_inviato_in_newsletter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$fonte is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_fonte is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$fonte_url is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_fonte_url is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_category is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_blz_affiliation_attributes is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_content_type is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_attributes is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_speciali is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_thumbnail_id is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$response_body is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$status is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_oembed_c164d8cd562885295b059783b0f0767b is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_oembed_time_c164d8cd562885295b059783b0f0767b is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_oembed_07dcac494764240ee9f9bb7c5fc2f6ce is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_oembed_time_07dcac494764240ee9f9bb7c5fc2f6ce is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_date_gmt is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$comment_status is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$ping_status is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_password is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_name is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$to_ping is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$pinged is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_modified is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_modified_gmt is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_content_filtered is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$guid is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$menu_order is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_mime_type is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$comment_count is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$filter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71
DuckDB: cos'è, come funziona e come gestire i database con Harlequin

DuckDB: cos'è, come funziona e come gestire i database con Harlequin

Cos'è DuckDB, come funziona e com'è possibile creare database ultra performanti da utilizzare per l'analisi dei dati, anche in memoria RAM. Come semplificare l'interrogazione delle basi di dati DuckDB con un software open source come Harlequin.

DuckDB è una soluzione per la gestione di database relazionali (RDBMS) ed è progettato per l’analisi dei dati ad alte prestazioni. Utilizza una combinazione di tecniche di compressione avanzate, elaborazione di query basata su vettori e caching intelligente per spingere l’acceleratore sulle performance. È quindi particolarmente adatto per l’integrazione con applicazioni e strumenti di analisi dei dati così da consentire l’esecuzione di query in tempo reale.

I documenti di supporto disponibili sul sito ufficiale del progetto DuckDB contengono le istruzioni per download e installazione su sistemi Windows, macOS e Linux.

Di base, DuckDB è un’applicazione che funziona da riga di comando: da qui si può creare un nuovo database, applicare modifiche, effettuare interrogazioni, creare basi di dati derivate e così via.

Le funzionalità principali di DuckDB

Facendo riferimento alla documentazione di DuckDB e cliccando sulla sezione Guides nella colonna di sinistra, si ha subito il polso delle potenzialità del database relazionale ad alte prestazioni. Progettato per l’analisi dati veloce ed efficiente, DuckDB offre supporto completo per SQL, compressione dei dati e integrazione con Python e altre librerie, il tutto in un pacchetto open source.

Come si può verificare negli esempi forniti all’interno della documentazione ufficiale, si possono importare ed esportare dati utilizzando SQL attingendo a formati comuni come CSV, Parquet e JSON. In un altro articolo abbiamo proprio visto cos’è un file CSV e come trasformare in database dati che normalmente sono aperti e gestiti con un foglio elettronico.

È inoltre possibile eseguire le query SQL da Python o da altri linguaggio e integrare DuckDB, ad esempio, con le librerie Pandas e i notebook Jupyter. Pandas è una libreria open source per la manipolazione e l’analisi dei dati in Python; i notebook Jupyter, invece, permettono di creare e condividere documenti contenenti codice eseguibile, testo descrittivo, grafici e risultati.

Per quanto riguarda Pandas, come abbiamo visto anche nell’articolo citato in precedenza, è possibile interrogare direttamente i DataFrame ed estrarre i dati d’interesse. Ciò proprio grazie all’integrazione tra DuckDB e Pandas.

Le performance verso le quali tende DuckDB permettono di massimizzare l’efficacia delle ricerche full text, utili per cercare e recuperare velocemente informazioni da documenti di testo. È inoltre possibile eseguire in modo molto semplice i cosiddetti ASOF Join ovvero operazioni di confronto tra dati temporali.

DuckDB: le caratteristiche più importanti

Alte prestazioni: il sistema è progettato per fornire elevate prestazioni nell’esecuzione di query complesse su grandi insiemi di dati. Utilizza tecniche avanzate come l’elaborazione vettoriale, la compressione dei dati e il caching intelligente per ottimizzare le operazioni di interrogazione.

Supporto SQL completo: supporta una vasta gamma di funzionalità SQL standard, inclusi JOIN, GROUP BY, aggregazioni, subquery e altro ancora.

Archiviazione ottimizzata: utilizza tecniche di compressione dei dati per ridurre lo spazio di archiviazione richiesto.

Elaborazione distribuita: supporta l’elaborazione distribuita. Ciò significa che DuckDB può essere utilizzato per gestire dati distribuiti su più nodi.

Utilizzo di dati in memoria: DuckDB consente di lavorare con i dati conservati nella memoria volatile. In questo modo è possibile ottenere analisi dati interattive estremamente performanti.

Estendibilità: è possibile estendere il sistema di gestione database attraverso funzioni personalizzate scritte in C++ o Python.

Integrazione con Python: DuckDB trova nel linguaggio Python il partner più naturale. Librerie quali duckdb-python consentono di predisporre script che interagiscono con i database DuckDB.

Open source: è un progetto open source che può vantare una comunità attiva. Il sorgente è accessibile pubblicamente e può essere eventualmente personalizzato.

Creare un nuovo database

Per importare dati in un nuovo database DuckDB, è sufficiente aprire l’interfaccia a riga di comando quindi digitare quanto segue:

duckdb -database nomedatabase.db

Con il comando COPY è possibile importare dati da un file CSV o da altre fonti di dati direttamente in una tabella DuckDB:

COPY table_name FROM '/path/to/data.csv' (FORMAT csv);

Come abbiamo visto nell’articolo citato in precedenza, si possono anche usare strumenti di terze parti o librerie Python, come Pandas, per caricare i dati da diverse fonti e quindi inserirli nel database DuckDB tramite le API Python.

È anche permessa la creazione di database in-memory: basta specificare il prefisso mem: prima del nome del database. Ad esempio:

duckdb -database mem:miodatabase

In questo caso il database DuckDB è appunto creato in memoria anziché su disco. Il comando COPY o altri metodi di caricamento dati funzionano anche nel caso in cui il database si trovi nella memoria RAM. Il codice Python riportato di seguito importa, ad esempio, i dati contenuti in file CSV all’interno del database creato in memoria:

import pandas as pd
import duckdb

# Legge i dati in un DataFrame Pandas
df = pd.read_csv('/dati.csv')

# Crea una connessione al database DuckDB in memoria
conn = duckdb.connect(database='mem:miodatabase')

# Inserisci il DataFrame nel database DuckDB
conn.register('mytable', df)

Come gestire i database DuckDB con Harlequin

Per rendere molto più dolce la curva di apprendimento di DuckDB, è da oggi possibile utilizzare un software open source come Harlequin.

Si tratta di un’applicazione, scritta in Python, che semplifica la gestione dei database DuckDB tramite la riga di comando. L’autore racconta di aver sviluppato Harlequin inizialmente esigente prettamente personali: perché le sue query diventavano più complesse e i risultati sempre più estesi. La CLI (command-line interface) di DuckDB ha delle limitazioni che, in questi frangenti, rallentano il lavoro.

Aprire DuckDB database con Harlequin

Anche Harlequin lavora da riga di comando ma presenta funzionalità aggiuntive che rendono più agevole l’interazione con i dati. Ad esempio, permette di scorrere il contenuto del database direttamente, accedere alla sua struttura, inviare query SQL e ottenere subito il risultato in un riquadro separato. Inoltre, consente di scegliere tra decini di stili differenti per la sua interfaccia testuale.

L’autore ha reso disponibile Harlequin come software open source, annunciando il rilascio della prima versione finale. Il software diventa accessibile a una vasta comunità di utenti che possono beneficiare delle sue funzionalità.

Query SQL su database DuckDB

Ricorrendo ad Harlequin, si può lavorare su qualunque database DuckDB, compresi quelli in-memory. Per installare il software è necessario disporre della più recente versione di Python:

pipx install harlequin

Per aprire uno o più database DuckDB, è possibile utilizzare il seguente comando da qualsiasi shell, fornendo i percorsi ai file da elaborare come argomenti:

harlequin "path/to/miodatabase.db" "altrodatabase.db"

Nella sintassi di esempio, si chiede ad Harlequin di aprire due database DuckDB specificandone le corrispondenti denominazioni.

Credit immagine in apertura: iStock.com/islander11

Ti consigliamo anche

Link copiato negli appunti