In progress
Data Engineering | School | 3 min read
CHU Data Pipeline.
Hospitals sit on mountains of data and still decide on gut feeling. This decision-support platform for a public hospital orchestrates the ETL with Airflow, refines the data through bronze, silver and gold layers, checks its quality and serves it in Metabase. Fully dockerized.
- Medallion architecture
- Dockerized stack
CHU Data Pipeline
Plateforme Big Data décisionnelle pour le contexte CHU.
Objectif: orchestrer les pipelines ETL (Airflow), ingerer des sources heterogenes (PostgreSQL, CSV), transformer les donnees, et alimenter des tableaux de bord Metabase.
Structure du projet
chu-pipeline/
├── airflow/
│ ├── dags/ # DAGs Airflow (orchestration)
│ │ ├── chu_daily_pipeline.py # Main DAG
│ │ └── utils.py # Helpers (run_python_script, run_sql_on_postgres, etc)
│ └── ...
├── sql/
│ ├── scripts/ # Scripts exécutés par DAGs
│ │ ├── extract/ # Extract Python (PostgreSQL, CSV)
│ │ ├── transform/ # Transform SQL PostgreSQL
│ │ ├── load/ # Load Python (staging PostgreSQL)
│ │ └── validate_gold.py # Data quality
│ └── init/ # Schema DDL (init DB)
├── docker/ # Dockerfiles + docker-compose.yml
├── metabase/ # Requetes et assets Metabase
├── data/
│ ├── raw/ # Fichiers sources CSV locaux (non versionnes)
│ ├── bronze/ # Extractions brutes produites par les scripts
│ ├── silver/ # Donnees nettoyees, normalisees
│ └── gold/ # Donnees analytiques
├── docs/
│ ├── WORKFLOW.md # Git + PR process
│ ├── ROLES.md # Rôles & responsabilités
│ └── ARCHITECTURE.md # Tech stack & zones
└── README.md
Démarrage rapide
-
Setup local:
cp .env.example .env docker-compose up -d -
Vérifier Airflow:
- URL:
http://localhost:8080 - Login:
airflow / airflow
- URL:
-
Voir les DAGs:
- Airflow UI > DAGs
- DAG
chu_daily_pipelinedoit être visible
Donnees sources et dossier raw
- Les CSV sources a traiter doivent etre places dans
data/raw/(local). - Dans le conteneur Airflow, ce dossier est monte en
/opt/airflow/data/raw. - Le script
sql/scripts/extract/extract_csv.pylit uniquement les fichiers*.csvpresents directement dans ce dossier. - Les fichiers de
data/raw/sont ignores par Git. Seuldata/raw/.gitkeepest versionne pour conserver le dossier. - Le dump PostgreSQL source reste dans
project_data/BDD PostgreSQL/DATA2023et sert a alimenter la base sourcepostgres.
Perspectives
sql/scripts/extract/extract_ftp.pyreste en reserve si une source FTP apparait plus tard.- Pour le moment, le pipeline utilise seulement PostgreSQL et les CSV locaux de
data/raw/. - Les traitements geographie, deces et satisfaction sont disponibles et activables via
ENABLE_EXTENDED_FACTS=true.
Architecture
| Zone | Type | Contenu | Outil |
|---|---|---|---|
| Bronze | Files | CSV extraits, bruts | CSV in /opt/airflow/data/bronze/ |
| Silver | Files | Donnees nettoyees, normalisees | Zone optionnelle, non utilisee dans le DAG actuel |
| Gold | Tables | Tables analytiques | PostgreSQL (schema gold) |
Modele de constellation retenu
- Le modele cible conserve les cles metier texte existantes:
dim_etablissement.finesscomme cle reference etablissementdim_patient.id_patienten textedim_professionnel.id_professionnelen texte
- Les tables de faits referencent ces cles metier, pas des surrogate keys entieres pour ces dimensions.
HiveQL et analytique
- Le pipeline principal Airflow execute PostgreSQL uniquement.
- HiveQL est positionne comme couche analytique complementaire pour gros volumes ou usages exploratoires.
- Si active ensuite, il sera alimente depuis Gold PostgreSQL ou via export dedie.
Restitution Metabase
- Source principale: PostgreSQL schema
gold - Utiliser les vues metier
gold.v_kpi_* - Rafraichissement des questions apres execution DAG quotidienne
- PowerBI reste optionnel en backup, hors flux principal
Orchestration: Apache Airflow (daily @ 00:00 UTC)
Restitution: Metabase connecte a PostgreSQL (Gold)
Documentation
- (WIP)
Roadmap
- Phase 1: Restructuration dirs + stubs
- Phase 2: Docker (compose, Dockerfile, env)
- Phase 3: DAGs complets + utils
- Phase 4: Collègues écrivent scripts
- Phase 5: Metabase + validation