All projects
rawcleangold
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

  1. Setup local:

    cp .env.example .env
    docker-compose up -d
    
  2. Vérifier Airflow:

    • URL: http://localhost:8080
    • Login: airflow / airflow
  3. Voir les DAGs:

    • Airflow UI > DAGs
    • DAG chu_daily_pipeline doit ê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.py lit uniquement les fichiers *.csv presents directement dans ce dossier.
  • Les fichiers de data/raw/ sont ignores par Git. Seul data/raw/.gitkeep est versionne pour conserver le dossier.
  • Le dump PostgreSQL source reste dans project_data/BDD PostgreSQL/DATA2023 et sert a alimenter la base source postgres.

Perspectives

  • sql/scripts/extract/extract_ftp.py reste 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

ZoneTypeContenuOutil
BronzeFilesCSV extraits, brutsCSV in /opt/airflow/data/bronze/
SilverFilesDonnees nettoyees, normaliseesZone optionnelle, non utilisee dans le DAG actuel
GoldTablesTables analytiquesPostgreSQL (schema gold)

Modele de constellation retenu

  • Le modele cible conserve les cles metier texte existantes:
    • dim_etablissement.finess comme cle reference etablissement
    • dim_patient.id_patient en texte
    • dim_professionnel.id_professionnel en 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

  1. Source principale: PostgreSQL schema gold
  2. Utiliser les vues metier gold.v_kpi_*
  3. Rafraichissement des questions apres execution DAG quotidienne
  4. 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