El proyecto consiste en un ETL que consume datos de noticias mediante la libreria de GoogleNews
.
Recordar clonarse el repositorio de la branch data-eng-exams
- Tener instalado Docker
- Tener python >=3.8 y <3.10.
- Tener instalado Poetry para instalar el python environment de este proyecto. Recomendamos una versión >=1.3 y <1.4.
- Tener instalado Poetry >=1.3 y <1.4.
- Ejecutar:
poetry install
- Al hacer
poetry shell
podremos acceder a nuestro python environment con nuestras dependencias definidas enpyproject.toml
.
- Ir a la carpeta
docker
el cual contiene los archivos de configuracion de los servicios a desplegar (Airflow y postgres). - Para levantar los servicios ejecutar:
docker compose --env-file ../.env up
Esto debería buildear una imagen de docker llamada tienda-amiga-playground_base
(ver Dockerfile
) por ser la primera vez y luego se levantaran los servicios definidos en docker-compose.yaml
.
- Una vez levantados los servicios es posible ingresar a los containers con el comando
docker exec
o a los distintos servicios mediante el puerto definido de salida. En el caso de postgres dejaremos un comando útil de referencia para poder acceder a la consola de Postgres de forma remota. Para acceder a la UI de Airflow directamente ingresar a http://localhost:2023/ para ver el DAG de ejemplo para este proyecto.
Para el desarrollo del examen se pide:
- Armar otro ETL con alguna keyword de interés (por ejemplo
bitcoin
). - En la función de transformacion, limpiar los campos innecesarios, transformar otros para dejar sólo información relevante, etc. El resultado final debería ser un dataset mucho más limpio que el extraído inicialmente por
extract.py
- Agregar como columna el tiempo de procesamiento del DAG en el dataframe (hint: se puede usar el context de Airflow es posible obtener el campo
logical_date
). - Insertar el dataset final (incluido este nuevo campo) a la base de datos destino (
load.py
). - Actualmente los DAGs no tienen un
schedule
definido, agregarle una periodicidad para que corra cada 3 horas todos los dias menos los Domingos (hint: usar https://crontab.guru/). - Crear un DAG que se ejecute todos los dias a las 4AM UTC y que realice un logging (tipo print) de las palabras más usadas en cada keyword buscada para las ultimas 12 horas de búsqueda.
Algunos comandos/consejos útiles:
- Para poder acceder a la base de datos de forma remota
docker exec -it ta-playground-airflow-scheduler poetry run pgcli -h postgres-db -U tiendaamiga -d tiendaamiga_db
Puede ser útil para tirar queries tipo SELECT
o para droppear alguna tabla en caso de ser necesario.
- Se dispone de un notebook de ejemplo en la carpeta
notebooks
para poder interactuar con la API de Google News de forma interactiva. - Recomendamos el siguiente workflow:
- Crear una branch
ta-exam
en el repositorio. - Ir subiendo cambios a esa branch. Una vez subido el primer cambio, crear un Pull Request.
- En caso de querer agregar o modificar un DAG, recomendamos usar el notebook para prototipar por ejemplo las transformaciones sobre el dataframe de pandas e insertar los cambios en el codigo fuente en este proyecto. Todos los DAGs son parseados desde la carpeta
tienda_amiga/dags
.
- Crear una branch
- En caso de necesitar agregar una libreria o algun archivo binario recomendamos:
- Tener instalado el environment de Poetry ejecutando
poetry install
. - Ejecutar
poetry add <libreria_a_agregar>
. - Ir a la carpeta
docker
y ejecutardocker compose --env-file ../.env build
y luegodocker-compose --env-file ../.env up
- Tener instalado el environment de Poetry ejecutando
- Ante cualquier inconveniente de setup local con Poetry es posible acceder a algun container de Airflow para probar scripts de Python dentro del container haciendo:
docker exec -it ta-playground-airflow-scheduler /bin/bash