Ces trois étapes doivent être enchaînées pour
chaque source de données. Pour ce faire, nous avons opté à créer un job Glue pour chacune des couches qui permet de traiter pour chaque source et chaque couche
le flux en question en se basant sur du
paramétrage. Une fois cette question traitée, nous nous sommes penchés sur
l'orchestration et pour cela, nous avons eu quelques contraintes :
- Chaque source est exécutée dans son propre compte AWS
- Chaque source a plusieurs domaines qui doivent être traités séparément
- Chaque domaine peut contenir un grand nombre de flux (certains domaines peuvent aller jusqu'à 1000 tables)
- Chaque domaine a son propre scheduling
- Chaque domaine doit exécuter les trois étapes (tâches Glue décrites ci-dessus).
En outre, nous devons exécuter cette opération pour plusieurs pays, chaque pays ayant ses
propres sources spécifiques. Nous voulions néanmoins disposer d'une
vue centralisée pour surveiller
l'exécution de la collecte. Nous avons donc opté pour
Apache Airflow dans un compte AWS central. Mais nous devions trouver un moyen de créer des
DAGs de manière dynamique (en changeant certains paramètres dans la définition du DAG pour chaque domaine) et
d'exécuter le même pipeline (Landing, Raw et Curated) pour ce domaine.
Ayant déjà travaillé avec
Jinja dans la génération de
pages web, la génération
SQL et même dans
Airflow, nous avons voulu essayer de tirer parti de cette technologie pour créer
dynamiquement des fichiers Python qui contiennent chacun
le code de collecte du pipeline de données pour chaque domaine dans chaque pays avec leurs
paramètres spécifiques.