Pipelines & orchestration
Un pipeline de données est un DAG
Extraction → nettoyage → features → entraînement → évaluation → publication : des tâches avec des dépendances, exécutées sur un déclencheur (horaire, événement). Les orchestrateurs (Airflow, le vétéran ; Dagster/Prefect, les modernes) gèrent le graphe, les retries, les alertes et l'observabilité.
Tu reconnais immédiatement le modèle : c'est ta CI/CD, avec une différence culturelle — les pipelines de données sont rejoués sur le passé (backfills) et échouent partiellement (la partition du 12 mars a un souci, pas les autres).
L'idempotence n'est pas négociable
La propriété centrale d'une tâche de pipeline : la rejouer produit le même état. Concrètement :
- écrire en overwrite de partition (
annee=2026/mois=07/jour=12), jamais en append aveugle ; - des tâches paramétrées par la date logique (« traite le 12 juillet »), pas « traite maintenant » ;
- résultat : un backfill = relancer bêtement les 90 dernières dates. Sans idempotence, chaque replay double les données.
La qualité des données est un test
« Garbage in, garbage out » devient opérationnel avec des assertions sur les données, exécutées DANS le pipeline :
# à la sortie de l'étape features (great_expectations, pandera, ou du simple assert)
assert df.montant.notna().all(), "montants NULL détectés"
assert (df.montant >= 0).all(), "montants négatifs"
assert df.client_id.is_unique, "doublons clients"
assert len(df) > 0.8 * len_hier, "volume anormalement bas (-20 %)"
La dernière est la plus précieuse : un volume qui chute signale presque toujours un problème amont (export cassé, partenaire en panne) — le genre d'incident qui, sans assertion, se découvre trois semaines plus tard dans un modèle dégradé.
Où s'arrête le data engineer, où commence le MLE
Frontière floue, mais en pratique : le data engineer amène des données propres et fraîches dans le warehouse/lake ; le MLE construit features, entraînement et déploiement au-dessus. Dans une petite équipe, tu feras les deux — d'où ce module.
Une tâche de pipeline idempotente…