Un dels problemes que ens trobem en l’analítica de dades és el rendiment dels nostres quadres de comandament o de les nostres consultes, sobretot quan comencem a tenir grans volums de dades.
En aquest article explorarem el component de PostgreSQL pg_duckdb, que permet consultar fitxers parquet directament des de la nostra base de dades PostgreSQL.
Què són els fitxers parquet?
Els fitxers parquet són un tipus de fitxers codi obert orientat a columnes, cosa que els fa molt més eficients a l’hora d’emmagatzemar les dades i també molt més ràpids a l’hora de fer consultes.
Els fitxers parquet estan pensats només per a tasques analítiques, on es fan insercions de dades de forma massiva i es prioritza en la lectura de dades, no estan pensats per aplicacions operacionals, com pot ser un ERP, on hi ha escriptures constants de dades i lectures de poques files.
Els fitxers parquet poden ocupar menys una desena part d’espai del que ocuparia la mateixa informació en una base de dades. L’estalvi d’espai depèn de les dades que hi hagi, com més dades repetides, més espai s’estalvia. En el cas de taules pensades per a l’anàlisi de dades hi ha diverses dades repetides, com poden ser dates, dades de clients, proveïdors, productes, etc. Això fa que l’eficiència en espai dels fitxers parquet sigui molt elevada.
Aquest estalvi en espai es tradueix també en eficiència a l’hora de consultar les dades, a més, els fitxers parquet també s’organitzen internament per a facilitar la consulta, obtenint ràtios d’eficiència molt, molt elevats, sobretot si no cal creuar taules entre elles.
Podeu trobar més informació dels fitxers parquet a https://parquet.apache.org/
Com llegir els fitxers parquet?
Els fitxers parquet es comporten com si fossin taules de base de dades i hi ha diverses eines, com per exemple duckdb, que permeten consultar-los.
En la nostra arquitectura tenim muntat un PostgreSQL. PostgreSQL no permet llegir de forma nativa, amb el que necessitem alguna extensió per a poder-los llegir.
En aquest article us parlarem de pg_duckdb que integra un connector de duckdb sobre PostgreSQL per a poder llegir els fitxers parquet des de la nostra base de dades.
pg_duckdb
pg_duckdb és una extensió de PostgreSQL que podeu trobar el codi en aquest repositori: https://github.com/duckdb/pg_duckdb
En aquest subapartat hi ha les instruccions per a instal·lar-lo pas per pas: https://github.com/duckdb/pg_duckdb/blob/main/docs/compilation.md
Un cop instal·lada i activada l’extensió ja puc consultar els fitxers parquet utilitzant la funció read_parquet.
SELECT
r['nom_proveidor'] as proveidor
, r['nom_producte'] as producte
, sum(r['quantitat']) as quantitat
, sum(r['preu_no_iva']) as preu_no_iva
from read_parquet('/home/jordi/coopdevs-bi/SC/parquets/vendes_per_client_proveidor_procucte_202605.parquet') r
group by r['nom_proveidor']
, r['nom_producte']
Cal tenir en compte que per accedir a les columnes del fitxer parquet
s’ha de fer de la forma:
r[‘<nom de la columna>’]
pg_duckdb ens permet també creuar dades de fitxers parquet amb taules que estan a la nostra base de dades, per exemple:
SELECT
r['nom_proveidor'] as proveidor
, p.area_proveidor
, sum(r['quantitat']) as quantitat
, sum(r['preu_no_iva']) as preu_no_iva
from read_parquet('/home/jordi/coopdevs-bi/SC/parquets/vendes_per_client_proveidor_procucte_202605.parquet') r
join proveidors p on r['nif_proveidor']=p.nif
group by
r['nom_proveidor']
, p.area_proveidor
Una altra funcionalitat molt útil a l’hora de llegir fitxers parquet és que es poden posar comodins (wildcards) al nom del fitxer parquet, podent així consultar diversos fitxers parquet a la vegada.
Ex. Si vull les vendes per proveïdor i producte de tot 2026 puc utilitzar la següent consulta:
SELECT r['nom_proveidor'] as proveidor
, r['nom_producte'] as producte
, sum(r['quantitat']) as quantitat
, sum(r['preu_no_iva']) as preu_no_iva
from
read_parquet('/home/jordi/coopdevs-bi/SC/parquets/vendes_per_client_proveidor_procucte_2026*.parquet') r
group by
r['nom_proveidor']
, r['nom_producte']
Utilitzant l’asterisc (*) com a caràcter comodí. Aquesta funcionalitat els permet crear fitxers parquet ja segmentats quan els creem, facilitant el recàlcul d’alguna de les parts, si fes falta, i millorant l’eficiència de les consultes.
A més, pg_duckdb ens ofereix altres funcions com read_csv o
read_json per a llegir altres
tipologies de fitxers des de la nostra
base de dades.
En aquest article hem pogut veure com utilitzar fitxers parquet per a millorar l’eficiència de les consultes a la nostra base de dades i com poder-los llegir des de PostgreSQL, adaptant-lo a l’arquitectura que tenim del nostre sistema d’anàlisi de dades.