En 2025, construire un pipeline de donnees en temps reel implique souvent des centaines de lignes de Python, un orchestrateur comme Airflow, et des semaines de configuration. Et si vous pouviez definir le meme pipeline en 30 lignes de YAML ? L'approche declarative change la donne.
Le probleme des pipelines en 2025
L'ecosysteme data est plus fragmente que jamais :
- Trop d'outils — Airflow, Prefect, Dagster, dbt, Fivetran, Airbyte... chaque outil couvre un morceau du puzzle
- Trop de code boilerplate — 80% du code d'un pipeline est de la plomberie, pas de la logique metier
- Trop de maintenance — Chaque dependance Python est une bombe a retardement (versions, conflits, deprecations)
- Trop de latence — La plupart des outils sont concus pour le batch, pas le temps reel
Selon un rapport de Fivetran 2024, les equipes data passent en moyenne 44% de leur temps sur la maintenance des pipelines existants plutot que sur de nouveaux projets.
Imperatif vs declaratif : Python vs YAML
La difference fondamentale :
| Aspect | Imperatif (Python) | Declaratif (YAML) |
|---|---|---|
| Approche | "Comment faire" | "Quoi faire" |
| Code type | 200-500 lignes | 20-50 lignes |
| Courbe d'apprentissage | Semaines | Heures |
| Maintenance | Dependances Python | Un binaire + YAML |
| Temps reel | Complexe a implementer | Natif |
| Flexibilite | Illimitee | Limitee aux plugins |
L'approche imperative vous donne un controle total, mais au prix de la complexite. L'approche declarative sacrifie un peu de flexibilite pour une simplicite radicale.
Anatomie d'un pipeline YAML
Un pipeline declaratif se decompose en trois sections :
1. Sources — D'ou viennent les donnees ?
source:
type: http
url: "https://api.example.com/events"
method: GET
auth:
type: oauth2
token_url: "https://auth.example.com/token"
rate_limit: 100/minute
pagination:
type: cursor
field: "next_cursor"
2. Transforms — Que faire avec les donnees ?
transforms:
- type: sql
engine: duckdb
query: |
SELECT
user_id,
event_type,
timestamp,
json_extract(payload, '$.amount') as amount
FROM input
WHERE event_type IN ('purchase', 'refund')
- type: pii_mask
fields: [email, phone]
method: sha256
3. Sinks — Ou envoyer les resultats ?
sink:
type: postgresql
connection: "postgres://user:pass@host:5432/db"
table: "events_processed"
batch_size: 1000
on_conflict: upsert
key: [event_id]
3 cas d'usage concrets
Cas 1 : Sync API vers base de donnees
Vous avez une API REST qui emet des evenements et vous voulez les stocker dans PostgreSQL avec un enrichissement SQL. En Python, c'est 200+ lignes (requests, psycopg2, gestion d'erreurs, retry...). En YAML declaratif, c'est 25 lignes.
Cas 2 : CDC (Change Data Capture)
Capturer les changements d'une base PostgreSQL source et les repliquer vers Snowflake en temps reel. Le CDC natif elimine le besoin de Debezium + Kafka Connect.
Cas 3 : Masquage PII
Lire des donnees contenant des informations personnelles, les anonymiser (hachage SHA-256) et les envoyer vers un data lake. Le masquage est declare comme un simple transform, pas un service separe.
Comparaison des outils
| Critere | Airflow | Singer/Meltano | Mako |
|---|---|---|---|
| Approche | Imperatif (Python DAGs) | Semi-declaratif | Declaratif (YAML) |
| Temps reel | Non (batch) | Non (batch) | Oui (natif) |
| Transforms | Python | dbt (SQL) | SQL + WASM |
| Installation | Complexe | pip install | Un binaire Go |
| Observabilite | UI web | Logs | Prometheus + Grafana |
Quick start en 5 minutes
Voici comment demarrer avec Mako, un framework open-source de pipelines declaratifs ecrit en Go :
# Cloner et compiler
git clone https://github.com/Stefen-Taime/mako.git
cd mako
go build -o bin/mako .
# Initialiser un nouveau pipeline
./bin/mako init
# Lancer le pipeline
./bin/mako run pipeline.yaml
Mako supporte les sources HTTP/REST, Kafka, PostgreSQL CDC, DuckDB et les fichiers (JSON, CSV, Parquet). Les transforms incluent SQL via DuckDB, plugins WASM (Go/Rust), validation de schema et masquage PII. Cote sinks : PostgreSQL, Snowflake, BigQuery, ClickHouse, S3, GCS et plus.
Conclusion
L'approche declarative YAML ne remplacera pas Python pour tous les cas d'usage. Mais pour 80% des pipelines de donnees courants — sync API, CDC, ETL simple, masquage PII — elle offre une alternative radicalement plus simple et maintenable. Mako est un framework open-source (MIT) qui incarne cette philosophie : YAML in, events out.
Ressources :