đŠ Data Engineer
MĂ©tier âcolonne vertĂ©braleâ data : concevoir et opĂ©rer des pipelines fiables (batch & streaming), garantir la qualitĂ©, la traçabilitĂ©, la performance et la gouvernance jusquâau DWH/Lakehouse et aux usages (BI, ML, produits data).
Scope : ingestion â transformation â modĂ©lisation â serving â observabilitĂ© â sĂ©curitĂ© â coĂ»ts. Stack typique : SQL/Python, Spark, Airflow, Kafka, dbt, BigQuery/Snowflake/Databricks, S3/GCS/ADLS, Iceberg/Delta/Hudi.
Fondamentaux & rĂŽle
Pourquoi le Data Engineer est crucial : fiabilitĂ©, dĂ©lais, coĂ»ts, gouvernance, âdata as a productâ.
Pipelines ETL/ELT
Orchestration, dépendances, incrémental, idempotence, backfills, retries, SLA, CI/CD.
Streaming & temps réel
Kafka/PubSub, partitions, ordering, exactly-once (approche), fenĂȘtres, late events, CDC.
Modélisation analytique
Star schema, Data Vault, Kimball, métriques, SCD, grain, dimensions conformes, semantic layer.
Qualité, tests & observabilité
Data contracts, tests (schema, nulls, uniques), alerting, lineage, SLO data, incident & RCA.
Sécurité & conformité
PII, RBAC/ABAC, masking, encryption, secrets, audit logs, RGPD, retention, DLP.
Lake / DWH / Lakehouse
Parquet, partitioning, compaction, Iceberg/Delta/Hudi, clustering, coûts, performance query.
Plateforme & DevOps data
Infra as Code, environnements, CI/CD, secrets, observabilité, runbooks, finops, multi-tenant.
Toolbox & patterns
Cheatsheet SQL, stratĂ©gies dâincrĂ©mental, idempotence, retries, backfill, dedup, SCD, CDC.
Parcours & interviews
JuniorâSeniorâStaff : compĂ©tences, portfolio, questions, âsenior mindsetâ (fiabilitĂ© & coĂ»ts).
Mission (version ârĂ©alitĂ© prodâ)
- Rendre les données utilisables : fiables, documentées, accessibles, au bon coût.
- RĂ©duire le âtime-to-dataâ : du signal brut â table/feature exploitable rapidement.
- Garantir la confiance : qualité, tests, contrats, traçabilité, audit.
- Industrialiser : code, CI/CD, observabilitĂ©, runbooks, gestion dâincidents.
- Optimiser : performance (IO/compute), coĂ»ts (stockage, requĂȘtes, streaming).
Livrables attendus
| Livrable | Concret | Pourquoi |
|---|---|---|
| Pipelines | Jobs batch/stream, incrémental, backfills. | Data fraßche. |
| ModĂšle analytique | Staging â marts â semantic/metrics. | BI/ML stable. |
| Qualité | Tests, contracts, alerting, RCA. | Confiance. |
| Doc | Catalog, lineage, owners, SLA. | Autonomie. |
| Gouvernance | RBAC, PII, retention. | Risque â |
Le modĂšle mental : âdata supply chainâ
ETL vs ELT (trĂšs simplement)
- ETL : transformer avant dâĂ©crire dans le DWH (plus âancienâ / on-prem).
- ELT : charger dâabord puis transformer dans le DWH (cloud moderne, dbt).
- Dans les faits : on mixe selon sources/volumes/latence.
Interfaces avec les autres métiers
- Data Analyst : besoins métriques + sémantique + refresh + granularité.
- ML Engineer / DS : features, training/serving parity, drift, labels.
- Platform/DevOps : IAM, infra, observabilité, coûts, SRE.
- Security/Legal : PII, RGPD, retention, audit.
KPI âdataâ (ceux qui comptent)
| KPI | Définition | Pourquoi |
|---|---|---|
| Freshness | Ăge de la donnĂ©e vs SLA. | DĂ©cisions Ă temps. |
| Completeness | % lignes attendues reçues. | Pas de trous. |
| Accuracy | RÚgles de cohérence (ex: totaux). | Confiance. |
| Timeliness | Durée pipeline / latence. | UX produit data. |
| Reliability | Fail rate, retry storms. | Stabilité. |
| Cost/Query | CoĂ»t par requĂȘte/table. | FinOps. |
SLO data (exemple)
Incident data (mode opératoire)
| Ătape | Action | Livrable |
|---|---|---|
| 1 | Qualifier impact (tables/produits). | Scope + priorité. |
| 2 | Stopper lâhĂ©morragie (pause, fallback). | Mitigation. |
| 3 | Diagnostiquer (logs + lineage). | Cause probable. |
| 4 | Fix + backfill contrÎlé. | Data restaurée. |
| 5 | RCA + actions préventives. | Runbook + tests. |
Dette data typique
- Jobs âscriptâ sans idempotence â doublons.
- Pas de contrats â breaking changes silencieux.
- âSELECT *â partout â explosion schĂ©ma.
- Pas de partitioning/clustering â coĂ»ts x10.
Le paradigme Senior (data)
- Un senior ne âfait pas un jobâ : il construit un systĂšme fiable avec garanties.
- Il pense contrats, observabilité, coûts, backfills, évolution.
- Il conçoit une plateforme oĂč lâanalyste/DS devient autonome.
- Il réduit la charge on-call avec tests + automation + runbooks.
Ăchelle de maturitĂ© (L1âL5)
- L1 : scripts ponctuels, pas de tests, pas de logs.
- L2 : orchestration basique, retries, doc minimal.
- L3 : incrémental, idempotence, tests & alerting.
- L4 : contracts, lineage, CI/CD, finops, gouvernance.
- L5 : plateforme (self-serve), SLO data, stratégie lakehouse.
Le âsenior checklistâ avant prod
DiffĂ©rence âData productâ vs âtablesâ
Un data product = dataset + dĂ©finition (sĂ©mantique) + SLO + doc + owner + accĂšs + tests. Câest ce qui rend la data rĂ©utilisable sans tribal knowledge.
Anti-patterns (à éviter)
- Full refresh partout (coût + temps + risque).
- Pas dâidempotence (doublons, inconsistences).
- Pas de tests (découverte par les utilisateurs).
- Pas dâownership (personne responsable, incidents Ă©ternels).
- Transformation hors repo (SQL âĂ la mainâ dans le DWH).
- Schema drift ignoré (colonnes qui apparaissent/disparaissent).
Red flags production
| Signal | Cause probable | Fix |
|---|---|---|
| Coûts explosent | Scans full tables | Partition/cluster + pruning |
| Doublons | Upserts absents | MERGE + keys + dedup |
| Retards | Backlog / skew | Scale + repartition |
| Changements silencieux | Pas de contracts | Schema validation |
Orchestration (pattern moderne)
Dépendances (le vrai problÚme)
- Ordonnancement (upstream/downstream) + SLA (P95).
- Gestion des échecs : retries contrÎlés, dead-letter, alerting.
- Idempotence : relancer ne doit pas âréécrire nâimporte quoiâ.
- Versioning : schémas & transformations évoluent (compat).
Data lineage (usage)
- âPourquoi le dashboard est faux ?â â remonter jusquâĂ la source + job fautif.
- âQuel impact si je change cette colonne ?â â blast radius.
ETL/ELT : choix pragmatiques
| Cas | Approche | Pourquoi |
|---|---|---|
| Volumes énormes | ELT + partition | Pushdown SQL |
| Transformations complexes | Spark | Distribué |
| APIs rate-limit | Land raw + retry | Rejouable |
| PII | Mask tÎt | Réduire risque |
Idempotence (2 patterns)
SLA vs SLO
SLA = promesse. SLO = objectif interne mesuré (freshness, completeness). Le senior instrumente les deux.
Incrémental : stratégies
| Stratégie | Principe | Limites |
|---|---|---|
| Watermark | max(updated_at) | Late events |
| CDC | log changes | Opérations + schema |
| Partition delta | rebuild partitions | Skew partitions |
| Hash diff | compare row hash | Coût compute |
Late events (fenĂȘtre de sĂ©curitĂ©)
MERGE (concept)
Déduplication (propre)
PiÚges incrémental
- Horodatage non fiable (timezones, clocks, updates massifs).
- Deletes : il faut gĂ©rer le âtombstoneâ ou soft delete.
- Schema drift : colonnes nouvelles â contracts + compat.
- Skew : une partition devient Ă©norme (ex: âtodayâ).
Observabilité minimale
Backfill : la compĂ©tence âseniorâ
- Rejouer 3 ans de données = risque : coûts + temps + cohérence.
- Un senior prĂ©pare un plan : fenĂȘtres, prioritĂ©s, validation, rollback.
Plan de backfill (template)
Technique : partition swap
Rebuild une partition isolĂ©e, valider, puis swap â minimise impact.
Backfill guardrails (coûts)
| Risque | SymptĂŽme | Protection |
|---|---|---|
| Coût compute | Jobs x100 | Limiter parallélisme |
| Impact prod | Queries lentes | FenĂȘtres off-peak |
| IncohĂ©rence âdouble writeâ | Doublons | Idempotence + locks |
| Explosion storage | Tables gigantesques | TTL + compaction |
CI/CD data (pattern)
dbt : conventions de base
- Staging (stg_) = normaliser sources ; Marts = tables métiers.
- Tests : unique, not_null, relationships + tests custom business.
- Docs + exposures (dashboards) + owners.
Release safe
- DĂ©ploiement par âversionâ (views / semantic layer).
- Feature flags data (basculer un dashboard sur v2).
- Rollbacks : garder N versions, switch rapide.
Kafka (les concepts qui comptent)
- Topic : flux logique ; partition : parallélisme + ordering.
- Key : garantit lâordre par clĂ© (mĂȘme partition).
- Consumer group : scalabilitĂ© (1 partition â 1 consumer actif).
- Retention : temps ou taille ; permet replays.
- Schema registry : compat backward/forward (Avro/Protobuf/JSON).
PiĂšges
- Skew : une key domine â hotspot partition â lag.
- Too many partitions : overhead & opérations.
- Pas de contracts : consumers cassés au moindre changement.
Pattern streaming â lakehouse
KPI streaming
At-least-once vs at-most-once vs exactly-once
| Mode | Risque | Quand |
|---|---|---|
| At-most-once | Perte | Logs non critiques |
| At-least-once | Doublons | TrĂšs courant |
| Exactly-once | Complexité | Besoin strict |
RĂ©alitĂ© : âexactly-onceâ = design
- Souvent : at-least-once + idempotence (dedup keys) = résultat correct.
- Transactions end-to-end : plus difficile (source â sink).
Dedup streaming
DLQ (Dead Letter Queue)
Stateful streaming
- FenĂȘtres (tumbling/sliding/session) pour agrĂ©gations.
- Late events : watermark + allowed lateness.
- State store : checkpointing, recovery.
Le vrai danger : explosion de state
- Trop de keys uniques â state Ă©norme â coĂ»ts / instabilitĂ©.
- Solution : TTL, compaction, dimensionnement, clé mieux choisie.
CDC (Change Data Capture)
- Capture inserts/updates/deletes depuis logs DB.
- Permet sync near real-time vers lake/DWH.
- Besoin : gestion schema evolution + ordering + replays.
Tombstones
Pour les deletes : Ă©vĂ©nement âdeleteâ ou soft-delete + rĂšgles downstream.
PiĂšges CDC
- Changements de PK â casse la dĂ©dup.
- Transactions multi-tables â ordering subtil.
- Schema drift non gĂ©rĂ© â consumers cassent.
Grain : la décision n°1
- Le grain = âune ligne reprĂ©sente quoi ?â (order, order_line, eventâŠ).
- Si le grain est flou â mĂ©triques incohĂ©rentes, doublons, joins dangereux.
- Documenter : clés, cardinalité, nullability, business meaning.
Star schema (classique)
Joins : rĂšgles dâhygiĂšne
| RĂšgle | But |
|---|---|
| FK explicites | Ăviter many-to-many cachĂ©s. |
| Keys stables | Réconcilier sources. |
| Dimensions conformes | Comparables entre marts. |
| Surrogate keys | Gérer historiques SCD. |
La modĂ©lisation est un contrat : elle protĂšge la BI et Ă©vite les âdashboards qui mententâ.
SCD (Slowly Changing Dimensions)
| Type | Principe | Usage |
|---|---|---|
| SCD1 | Overwrite | Pas dâhistorique |
| SCD2 | Versionner (valid_from/to) | Historique complet |
| SCD3 | Colonnes âprevâ | Historique limitĂ© |
SCD2 : structure
PiĂšges SCD
- Natural key pas stable â explosions de versions.
- Late updates â corriger pĂ©riodes (backfill dimension).
- Join fact/dim sur mauvaise clĂ© (ou sans date) â mĂ©triques fausses.
Métriques : rendre le BI stable
- DĂ©finir les mĂ©triques une fois (revenue, active users, churnâŠ).
- Ăviter â10 dĂ©finitions de revenueâ selon dashboard.
- Semantic layer : métriques + dimensions + rÚgles (filtres).
Template métrique
Réconciliation (finance)
Le senior prĂ©voit les checks : totals vs systĂšmes source, Ă©carts tolĂ©rĂ©s, et âreconciliation tablesâ (audit-friendly).
Data Vault (quand ?)
- Beaucoup de sources, schĂ©mas instables, besoin dâaudit/traçabilitĂ©.
- Hub (keys), Links (relations), Satellites (attributs/historique).
- Souvent : Vault en âsilverâ + marts Kimball en âgoldâ.
Trade-off
Data contracts : pourquoi câest âgame changerâ
- Un contrat définit : schéma, types, nullability, clés, SLA, owners.
- Le producer sâengage ; le consumer peut se fier (ou alerte).
- Réduit drastiquement les breaking changes silencieux.
Contrat (exemple)
Schema evolution : rĂšgles
| Changement | Compat | Action |
|---|---|---|
| Ajout colonne nullable | OK | Mettre Ă jour docs/tests |
| Renommer colonne | Danger | Deprecation + dual write |
| Changer type | Risque | Versionner |
| Supprimer colonne | Breaking | Deprecation window |
Tests data (minimum viable)
| Test | Exemple | But |
|---|---|---|
| Schema | colonnes/types | Compat |
| Nulls | not_null(order_id) | Clés |
| Unique | unique(order_id) | Doublons |
| Relationships | FK vers dim | Intégrité |
| Business | amount >= 0 | Validité |
Test âvolumeâ & âfreshnessâ
Great Expectations / dbt tests (idées)
- Checksums par partition (ex: total_amount par jour).
- Outliers : P99, anomalies par segment.
- Reconciliation : totals vs source systĂšme.
- Drift de distribution : KS-test / PSI (selon besoin).
Observabilité data = logs + metrics + lineage
- Metrics : freshness, volume, null_rate, dedup_rate, cost/run.
- Logs : erreurs parsing, retries, DLQ, timeouts.
- Lineage : impact analysis (qui dépend de quoi).
Dashboard on-call (idéal)
Alerting : éviter le bruit
- Alertes âactionnablesâ (owner + runbook + lien logs).
- Seuils dynamiques (baseline), pas du statique partout.
- Regrouper incidents : âsource X downâ plutĂŽt que 50 tables rouges.
Incidents data (cas typiques)
- Source API rate-limited â trous + retards.
- Schema drift â colonnes manquantes, types changĂ©s.
- Duplication â replays, non-idempotence.
- CoĂ»t query â scans full table, partition pruning cassĂ©e.
RCA (template)
Actions préventives (les plus efficaces)
- Data contracts + schema registry.
- Idempotence + dedup + MERGE.
- Freshness/volume monitoring + alerting owners.
- Runbooks & backfill playbook.
- FinOps guardrails (quotas, budgets, best practices).
PII : identifier & classifier
- Cartographier oĂč se trouve la PII (sources â lake â marts â exports).
- Minimiser : ne pas ingérer si inutile (data minimization).
- Masquage : tokenization / hashing / partial masking selon usage.
- Chiffrement : at-rest + in-transit + key management.
Risques majeurs
| Risque | Cause | Fix |
|---|---|---|
| Exfiltration | Exports non contrÎlés | RBAC + audit + DLP |
| Sur-collecte | âOn prend toutâ | Minimisation |
| Fuite logs | PII en logs | Scrubbing + policies |
RBAC/ABAC : design
- RBAC : rĂŽles (analyst, engineer, financeâŠ)
- ABAC : attributs (pays, équipe, device, projet)
- Principe : least privilege + séparation prod/dev
Service accounts & secrets
- Secrets manager, rotation, scopes minimaux.
- Interdire clés longues durées si possible.
Golden rules
RGPD : points durs cÎté data
- Retention (durée de conservation) + purge.
- Droit Ă lâeffacement (suppression / anonymisation).
- Traçabilité des accÚs (audit logs).
- Transferts (zones géographiques), sous-traitants.
Audit logs
Qui a lu quoi, quand, depuis oĂč, pour combien de lignes ? (selon capacitĂ©s plateforme)
Data deletion (pattern)
Patterns robustes
- PII vault : dataset isolé, accÚs ultra restreint.
- Curated views : exposer uniquement ce qui est nécessaire.
- Row-level security : filtrer selon attributs (pays, équipe).
- Masking dynamique : affichage masqué selon rÎle.
Formats
- Parquet : colonne, compression, pushdown â standard analytique.
- JSON : flexible mais coûteux pour analytics (raw uniquement).
- Avro/Protobuf : streaming + schema evolution (souvent avec registry).
Bronze/Silver/Gold
Compaction (pourquoi)
- Trop de petits fichiers = overhead énorme.
- Compaction = fusionner fichiers + optimiser metadata.
- Scheduling : nightly/weekly selon volumes.
Partitioning : rĂšgle simple
- Partitionner sur colonne souvent filtrée (souvent date).
- Ăviter trop haute cardinalitĂ© (ex: user_id) â trop de partitions.
- Partition pruning = clé pour coûts/perf.
Clustering / Z-order (selon engines)
- Organiser physiquement pour améliorer scans (ex: par customer_id).
- à appliquer aprÚs avoir stabilisé volumes.
Anti-pattern
Heuristique
Table formats (Iceberg/Delta/Hudi)
| Fonction | Ce que ça apporte |
|---|---|
| ACID | Transactions sur data lake |
| Time travel | Revenir Ă une version |
| Schema evolution | Changements contrÎlés |
| Upserts/Merge | CDC & idempotence |
Pourquoi câest clĂ©
Permet dâappliquer des pratiques DWH âpropresâ sur un data lake (fiabilitĂ© & replays).
Time travel (usage incident)
Câest une arme anti-incidents trĂšs âseniorâ.
FinOps data : leviers
- Partition pruning (le plus gros gain).
- Clustering + statistiques (si supporté).
- Limiter full scans : vues/semantic layer.
- Budgets/quotas : alerting sur requĂȘtes coĂ»teuses.
- Compaction, retention, tiering storage.
Cost guardrails (exemple)
Ce que fait un Data Engineer âplatform-awareâ
- IaC (réseau, IAM, storage, compute), séparation dev/stage/prod.
- CI/CD : images, jobs, dbt, migrations de schéma.
- Observabilité : logs, metrics, traces pipelines.
- Runbooks & on-call : playbooks incident/backfill.
- FinOps : capacité, scheduling, autoscaling, budgets.
Multi-tenant (si plateforme interne)
- Projets/teams isolés (IAM), quotas, naming conventions, catalog.
- Templates & golden paths : âpaver la routeâ pour les Ă©quipes.
Golden path (exemple)
Ăviter la jungle
SQL (cheatsheet utile)
Idempotence : options
- MERGE/UPSERT (clé stable) + watermark.
- Append-only + dedup (window function) + âlatest winsâ.
- Partition rebuild + swap (pour corrections/backfills).
Backfill playbook (résumé)
SCD2 (pseudo)
Streaming dedup (idée)
Progression naturelle
- Junior : SQL, pipelines simples, ingestion fichiers/APIs, conventions.
- Confirmé : orchestration, incrémental, dbt, tests, partitioning.
- Senior : streaming/CDC, observabilité, contracts, backfills, finops.
- Staff/Lead : plateforme self-serve, gouvernance, stratégie lakehouse.
Compétences qui font la différence
- Concevoir idempotence + backfills (replay safe).
- Lire/optimiser plans (pruning, clustering, skew).
- Mettre en place contrats + tests + alerting.
- Gérer coûts & performance (FinOps).
- Communication : doc, ownership, sémantique claire.
IdĂ©es de projets (trĂšs âseniorâ)
- Pipeline CDC DB â lakehouse (MERGE + time travel + backfills).
- Framework âdata contractsâ + validation schema + alerting.
- Data observability : freshness/volume anomalies + lineage impact.
- Optimisation coûts DWH : partitioning + guardrails + reporting.
- Semantic layer : métriques centralisées + tests de réconciliation.
Ce que le recruteur veut voir
Questions fréquentes
- Explique idempotence et comment tu évites les doublons.
- Watermark vs CDC : avantages/limites.
- Comment tu fais un backfill dâun an sans exploser les coĂ»ts ?
- Quâest-ce quâun data contract et comment tu gĂšres schema evolution ?
- Comment tu dĂ©finis et mesures la freshness dâun dataset ?
- Partitioning/clustering : comment tu choisis ?
- Pourquoi les dashboards âmententâ et comment tu lâempĂȘches ?
