En aquest article parlarem de l’arquitectura de l’Espai de Dades i del procés de càrrega de dades.
El cor de l’espai de dades està muntat amb CKAN (https://ckan.org/). CKAN és el líder en portals de dades obertes i espais de dades de codi lliure. És utilitzat pel portal de dades obertes de Suïssa, Berlín, el govern de Mèxic o per RENFE, entre d’altres.
CKAN necessita una base de dades principal (CKAN DB a l’esquema) on guarda les dades bàsiques per al seu funcionament, com poden ser els usuaris i rols, datasets pujats, etc.
Per altra banda CKAN permet instal·lar un plugin que és el datastore. Aquest plugin emmagatzema les dades pujades en taules de base de dades, permetent així poder exportar les dades mitjançant una API, ajudant així a l’automatització. A l’instal·lar el datastore necessitem una nova base de dades (DATASTORE DB a l’esquema) per a que CKAN guardi les dades.
CKAN necessita un SOLR i un Redis per a funcionar. Aquests 2 components serveixen per a millorar les cerques i per a gestionar la cache.
CKAN es posa en marxa a través d’un servei que anomemem supervisor.
La versió de CKAN utilitzada és 2.11, instal·lada sobre un Ubuntu jammy.
Com arriben les dades a CKAN?
Per tal d’alimentar CKAN i assegurar que les dades sempre són consultables mitjançant API hem dissenyat un fluxe que consisteix en els següents passos:
- Es van a buscar les dades a l’origen (tant poden ser dades obertes, com dades d’empreses) mitjançant una API (ja oberta o donada pel client). Aquestes dades es guarden en una nova base de dades (DATA DB a l’esquema) a l’esquema opendata.
- Un cop tenim les dades obertes les podem transformar, juntar amb altres dades ja baixades i es crea una nova estructura (que pot ser idèntica a la ja baixada mitjançant API) i es guarda a la mateixa base de dades, però a l’esquema data.
- Finalment, es crea el dataset a partir de l’API de CKAN i també s’alimenta el datastore. A partir d’aquest moment les dades ja estan publicades (en format públic o privat) al portal i són accessibles tant via web com per API.
Tot aquest procés està orquestrat a través d’un DAG d’Airflow que executa cada dia en ordre els 3 passos. Els processos estan controlats per un jsons de configuració que indiquen a cada procés quines dades ha de carregar.
Podeu trobar el codi dels dags i dels scripts de dbt a:
- https://git.coopdevs.org/coopdevs/bi/opendata/open-data-dags
- https://git.coopdevs.org/coopdevs/bi/opendata/open-data-scripts
Extensions principals instal·lades a CKAN
Les extensions que hem instal·lat al nostre CKAN són:
- datastore: permet tenir les dades en datastores i que siguin consultables mitjançant API o visualitzades com a taula/gràfic.
- datatables_view: permet visualtizar les dades d’un datastore com a taula filtrable
- image_view text_view video_view webpage_view: permeten visualitzar les taules en diferents formats.
- charts_view charts_builder_view: permeten mostrar les dades d’un datastore com a gràfic.
Adaptació aspecte CKAN
CKAN permet l’adaptació de l’aspecte de la web, tant els colors, logotips, com el contingut que es mostra.
Per tal de fer aquesta adaptació CKAN permet adjuntar una nova extensió que conté una sobreescriptura de les diferents pàgines.
En el nostre cas podeu trobar les adaptacions a: https://git.coopdevs.org/coopdevs/bi/opendata/open-data/-/tree/main/inventory/host_vars/dadess.dadess.cat/ckanext-essopendata_theme?ref_type=heads
Podeu trobar el codi base de CKAN amb els templates que es poden sobreescriure al github de CKAN: https://github.com/ckan/ckan/tree/master/ckan/
La instal·lació de l’extensió es fa igual que la resta d’extensions de CKAN, muntant un paquet python, instal·lant-lo amb pip i activant-lo a ckan.plugins del fitxer ckan.ini.
Desplegament de CKAN
El desplegament de CKAN l’hem fet mitjançant ansible, que ens permet l’automatització del desplegament i també el control de canvis. Ansible detecta canvis en la configuració i només desplega les parts necessàries.
Com sempre, podeu trobar tot el codi per a fer el desplegament amb les variables utilitzades a:
https://git.coopdevs.org/coopdevs/bi/opendata/open-data/-/tree/main?ref_type=heads