warpcomdev / istac

Integración información ISTAC
0 stars 0 forks source link

ETL de cubos de Istac

Esta ETL realiza la carga de cubos de datos de la API de e-cubos de Istac.

Prerrequisitos

Para poder ejecutar el proceso de ETL en un equipo es necesario disponer del siguiente software:

Software Versión
Python >= 3.8
pip *

El fichero requirements.txt contiene las dependencias que necesita el script para funcionar adecuadamente. Es recomendable crear un entorno virtual de Python¹ ² (virtualenv), acceder al mismo e instalar dichas dependencias mediante el comando pip install -r requirements.txt (recuerde ubicarse en su shell dentro del directorio istac_cubos).

Ejemplo:

  $ cd customerexperience-vertical/scripts/istac_cubos
  $ python3 -m venv venv
  $ source venv/bin/activate
  (venv)$ python -m pip install --upgrade pip
  (venv)$ python -m pip install -r requirements.txt

Configuración

Selección de cubos

Para efectuar la carga de los datos de un cubo, la ETL necesita un id de cubo y una URL de descarga. Ambos datos se encuentran a través de la aplicación jaxi del istac, accesible en la URL https://datos.canarias.es. Una vez que se localiza un conjunto de datos de interés, se debe hacer click sobre el enlace al cubo estadístico en formato PC-Axis:

seleccion de cubo

Esto conduce a la página donde se puede recuperar el ID y el enlace de descarga del cubo estadístico en particular, por ejemplo:

ID y URL de descarga

La lista completa de IDs de cubo y URLs de descarga a obtener debe volcarse a un fichero CSV, separado por comas, con codificación de caracteres utf-8. Este CSV debe tener al menos dos columnas:

El CSV puede tener otras columnas, que la ETL ignorará. Esas columnas adicionales pueden usarse como referencia, por ejemplo para identificar qué departamento del cliente solicita la integración de ese recurso, o qué información quiere obtener de él.

En este repositorio se incluye un CSV de ejemplo, cubos.csv, con los 325 cubos solicitados por el proyecto de Mallorca. Cada proyecto podrá personalizar su selección de cubos.

También se incluye en este repositorio un playbook de ejemplo, spyder.ipynb, con el código que se utilizó para obtener esta información a partir de los requisitos dados por el Consell de Mallorca.

Variables de configuración

Además del CSV de cubos a cargar, la ETL requiere de varias variables de configuración, que pueden proporcionarse bien en un fichero de configuración, o bien como variables de entorno:

El fichero config.example.cfg contiene un ejemplo de fichero de configuración, por si quiere utilizarse este mecanismo en lugar de (o además de) variables de entorno.

En caso de que una variable esté definida tanto en el fichero de configuración como en el entorno (ETLISTAC...), el valor de la variable de entorno tiene preferencia.

Ejecución

Lanzamiento del proceso

Para iniciar el proceso se ha de ejecutar desde el virtualenv el comando:

(venv)$ python etl.py

Si se está usando un fichero de configuración, se debe especificar la ruta al mismo con la opción -c (--config):

(venv)$ python etl.py -c <ruta/al/fichero/config.cfg>

El fichero de config no es necesario si todas las variables de ejecución se configuran como variables de entorno (ETLISTAC...).

Modelo resultante

El proceso de ETL se encarga de leer y enviar al Context Broker la siguiente información:

Recarga de datos

Cuando la ETL completa la carga de un recurso en el context broker, crea una o dos entidades de tipo IstacCubeBookmark en el Context Broker, para marcar la fecha del dato más reciente cargado:

En la próxima ejecución de la ETL, el script comprobará estos valores para no volver a cargar datos de ese cubo para la misma fecha, o anteriores.

En el caso excepcional de que se quisiera recargar desde la ETL un recurso completo, y no solo de manera incremental, sería necesario seguir estos pasos:

Referencias

  1. Tutorial de virtualenv, en inglés https://docs.python-guide.org/dev/virtualenvs/#lower-level-virtualenv

  2. Tutorial de virtualenv, en español https://rukbottoland.com/blog/tutorial-de-python-virtualenv/