DuckDB: creare un file parquet a partire da file di testo di grandi dimensioni

Un esempio a partire da un file CSV, con i parametri ottimizzati per buone performance
duckdb
csv
parquet
performance
Autore/Autrice
Affiliazione
Data di Pubblicazione

4 marzo 2023

In queste settimane ho guardato un po’ i dati della “Banca dati Servizio Contratti Pubblici - SCP” che contiene gli avvisi, i bandi e gli esiti di gara in formato aperto, raccolti dalla “Banca dati SCP - Servizio Contratti Pubblici”, gestita dalla Direzione Generale per la regolazione e i contratti pubblici del Ministero delle Infrastrutture e Trasporti.

Nel dataset sono presenti file CSV di medie dimensioni, come quello denominato v_od_atti.csv, composto da 685.000 righe per 45 colonne, per un totale di circa 570 MB.

Non sono big data e ci sono tanti modi per interrogarlo e trasformarlo con poco sforzo e rapidità. Uno molto comodo è quello di usare DuckDB: prima per la conversione di formato e poi per tutte le query che si vorranno fare.

Molto comodo convertire il CSV in formato parquet. Si passa da circa 570 a 45 MB, e si ha a disposizione un formato che è rapidissimo da interrogare.

Per farlo si può usare DuckDB a riga di comando:

echo "COPY (SELECT *
FROM read_csv_auto('input.csv'))
TO 'output.parquet' (FORMAT 'PARQUET',
CODEC  'Snappy',PER_THREAD_OUTPUT TRUE);" \
| duckdb

E in 10 secondi (sulla mia macchina con 16 GB di RAM e un pentium 7) il file è pronto.

La preziosa fonte/ispirazione è il bravissimo Mark Litwintschik.

Torna in cima