AccueilBlogTest technique Data Engineer clé en main
Tests prêts à l'emploi

Test technique Data Engineer clé en main : SQL + Python + pipeline (take-home 2h)

Ce test couvre les trois piliers du métier de Data Engineer : requêter (SQL), traiter (Python), et concevoir un pipeline fiable. En version take-home (2h) ou live, il donne une image complète du niveau. Corrigés et grille inclus. Rappel : un take-home non supervisé est moins fiable qu'un live — privilégiez le live si possible.

Data Builder·Juillet 2025·12 min de lecture·Test métier complet · Data Engineer · take-home 2h

Le fil rouge du métier — et de ce test — est la fiabilité. On ne cherche pas seulement du code qui marche, mais du code robuste, testé, et un pipeline pensé pour l'échec. C'est ce qui distingue un vrai Data Engineer.

1Partie 1 — SQL (30 min)

La consigne

Une requête d'agrégation non triviale + une optimisation.

On demande une requête analytique (ex. le dernier achat de chaque client via une fonction fenêtre) puis comment l'optimiser sur gros volume. On évalue la maîtrise du SQL avancé et la conscience de la performance.

-- Dernier achat de chaque client SELECT * FROM ( SELECT o.*, ROW_NUMBER() OVER (PARTITION BY client_id ORDER BY date_commande DESC) AS rn FROM commandes o ) t WHERE rn = 1;
  • Attendu : une fonction fenêtre (ROW_NUMBER) maîtrisée.
  • Attendu : une piste d'optimisation (index, partition) justifiée.

2Partie 2 — Python (45 min)

La consigne

Écrire un traitement robuste et testé.

On fournit une source imparfaite (un CSV ou une API simulée) et on demande un script qui l'ingère, la fiabilise et gère les erreurs. On regarde surtout la robustesse et la présence de tests.

def nettoyer(df): df = df.drop_duplicates() df["montant"] = pd.to_numeric(df["montant"], errors="coerce") return df.dropna(subset=["id", "montant"]) def test_nettoyer(): brut = pd.DataFrame({"id":[1,1,None], "montant":["10","10","x"]}) assert len(nettoyer(brut)) == 1 # doublon retire, ligne invalide retiree
  • Gère les cas d'erreur (valeurs manquantes, échec de lecture).
  • Écrit au moins un test unitaire sur la logique clé.
  • Code lisible, fonctions réutilisables.

3Partie 3 — Concevoir un pipeline

La consigne

Décrire l'orchestration d'un pipeline quotidien fiable.

Sans forcément coder, le candidat décrit comment il orchestrerait le tout en production : ordre des tâches, relances, alertes, idempotence. C'est la partie la plus discriminante.

  • Ordonne les étapes (extract → transform → load).
  • Prévoit relances, alertes et reprise sans doublons (idempotence).
  • Pense monitoring : comment saura-t-il qu'un run a échoué ?

Signal d'alerte : ce que révèle ce test complet : le SQL et le Python peuvent être bons, mais c'est la partie 3 (fiabilité du pipeline) qui distingue un vrai Data Engineer d'un bon développeur. Un candidat qui néglige la gestion d'échec n'a pas le réflexe du métier.

4Grille par niveau

NiveauMaîtrise attendueSignal GONO-GO
JuniorCode qui fonctionneRéussit SQL et Python de baseAucune gestion d'erreur ni test
ConfirméCode robuste et testéGère les erreurs, écrit des testsPipeline sans gestion d'échec
SeniorPipeline fiable et idempotentPense reprise, alertes, monitoringBon code mais pipeline fragile
LeadArchitecture et standardsConçoit pour l'échec et l'échelleNéglige la fiabilité en production

Vous recrutez un profil data ?

Data Builder mène l'entretien technique et vous livre un rapport clair et détaillé sous 24h. Premier entretien offert.

Tester gratuitementRéserver un appel