Les entretiens d'ingénieur data évaluent trois choses : le SQL, votre façon de concevoir et d'exploiter des pipelines de données, et votre raisonnement face à l'échelle et aux pannes. Voici 20 questions avec des réponses que vous pouvez adapter, dans l'ordre où les candidats les rencontrent généralement. Les exemples SQL ont été exécutés sur une petite base d'exemple avant publication, et les résultats affichés sont la sortie réelle.
Questions SQL
1. Trouver le deuxième salaire le plus élevé dans chaque entreprise ou au global
Utilisez DENSE_RANK, pour que les ex æquo partagent un rang et que « deuxième plus élevé » désigne la deuxième valeur distincte.
SELECT name, salary
FROM (
SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS r
FROM employees
) t
WHERE r = 2;
Sur une table avec les salaires 150, 130, 130, 110, 90, 70, cela renvoie les deux personnes payées 130. Expliquez pourquoi vous avez choisi DENSE_RANK plutôt que RANK (qui saute des numéros après les ex æquo) et ROW_NUMBER (qui départage les ex æquo de façon arbitraire).
2. Les deux plus gros salaires de chaque département
SELECT dept, name, salary
FROM (
SELECT dept, name, salary,
RANK() OVER (PARTITION BY dept ORDER BY salary DESC) AS r
FROM employees
) t
WHERE r <= 2;
PARTITION BY redémarre le classement pour chaque département. Mentionnez que des salaires à égalité peuvent renvoyer plus de deux lignes avec RANK.
3. Total cumulé par client
SELECT customer, order_date, amount,
SUM(amount) OVER (PARTITION BY customer ORDER BY order_date) AS running_total
FROM orders;
Pour un client avec des commandes de 10, 20 et 30 à des dates croissantes, les totaux cumulés sont 10, 30 et 60.
4. Supprimer les lignes en double en gardant la première
SELECT id, user_id
FROM (
SELECT id, user_id,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY id) AS rn
FROM events
) t
WHERE rn = 1;
Ici, ROW_NUMBER est le bon choix, car vous voulez exactement une ligne par groupe. Préparez-vous à expliquer comment vous décideriez quel doublon garder dans une vraie table (horodatage le plus récent, enregistrement le plus complet).
5. Écart avec la ligne précédente
SELECT order_date, amount,
amount - LAG(amount) OVER (ORDER BY order_date) AS change
FROM orders
WHERE customer = 'A';
L'écart de la première ligne est NULL, car il n'y a pas de ligne précédente. Dites-le à voix haute, car c'est la relance habituelle.
6. Quelle est la différence entre WHERE et HAVING ?
WHERE filtre les lignes avant le regroupement, et HAVING filtre les groupes après l'agrégation. On ne peut pas utiliser une fonction d'agrégation comme COUNT(*) dans WHERE.
7. Comment accélérer une requête lente ?
- Regardez le plan d'exécution avant de changer quoi que ce soit.
- Vérifiez que les filtres peuvent utiliser un index, et que les fonctions appliquées à la colonne ne le bloquent pas.
- Réduisez les données lues : ne sélectionnez que les colonnes nécessaires, filtrez tôt, et partitionnez les grandes tables par date.
- Remplacez les sous-requêtes répétées par des jointures ou des expressions de table communes, et vérifiez l'absence de multiplication accidentelle de lignes dans les jointures.
- Pour les entrepôts de données, vérifiez les clés de clustering ou de tri et le volume de données lu par chaque requête.
Questions de conception de pipeline
8. ETL ou ELT ?
ETL transforme les données avant de les charger. ELT charge d'abord les données brutes et les transforme à l'intérieur de l'entrepôt. ELT est courant avec les entrepôts cloud, car le stockage est bon marché, les données brutes restent disponibles pour un retraitement, et les transformations peuvent être versionnées en SQL. ETL garde du sens quand les données doivent être nettoyées ou masquées avant d'arriver, par exemple pour supprimer les données personnelles.
9. Batch ou streaming ?
Choisissez selon le degré de fraîcheur nécessaire. Le batch est plus simple et moins coûteux, et convient aux rapports quotidiens. Le streaming convient aux cas où les minutes ou les secondes comptent, comme la détection de fraude ou les tableaux de bord en temps réel. Beaucoup de systèmes utilisent les deux. Parlez de la décision métier, pas seulement de la technologie.
10. Qu'est-ce qu'un pipeline idempotent, et pourquoi est-ce important ?
L'exécuter deux fois produit le même résultat que l'exécuter une fois. C'est important parce que les jobs échouent et sont relancés. Pour rendre un chargement idempotent, écrivez par partition et écrasez cette partition, ou utilisez un upsert avec une clé stable, pour qu'une relance ne crée pas de doublons.
11. Comment gérez-vous les données en retard ou désordonnées ?
Utilisez le temps de l'événement plutôt que le temps d'arrivée, et définissez le retard maximal possible des données. Dans les systèmes de streaming, un watermark indique au job combien de temps attendre avant de fermer une fenêtre. Pour les tables batch, retraitez régulièrement les partitions récentes, ou prévoyez un processus de correction qui réécrit les jours concernés.
12. Comment concevez-vous pour les pannes et les relances ?
Faites des étapes petites, idempotentes et relançables indépendamment. Stockez l'état en dehors du job. Alertez sur les données manquantes ou en retard autant que sur les erreurs. Fixez une limite au nombre de relances, et envoyez les échecs répétés à un endroit où quelqu'un les consulte.
13. Comment vérifiez-vous la qualité des données ?
| Contrôle | Exemple |
|---|---|
| Complétude | Le nombre de lignes correspond à la source dans une tolérance donnée |
| Unicité | La clé primaire ne contient pas de doublons |
| Validité | Les valeurs tombent dans une plage ou un ensemble attendu |
| Fraîcheur | L'horodatage le plus récent est suffisamment récent |
| Cohérence | Les totaux concordent entre les tables liées |
Exécutez les contrôles à l'intérieur du pipeline et échouez tôt, pour que les données erronées n'atteignent pas les rapports.
Questions de modélisation et de stockage
14. Qu'est-ce qu'un schéma en étoile ?
Une table de faits centrale contient des événements mesurables, comme des commandes, et pointe vers des tables de dimensions qui les décrivent, comme le client, le produit et la date. Il est facile à interroger et rapide à agréger. Un schéma en flocon normalise davantage les dimensions, ce qui économise de l'espace mais ajoute des jointures.
15. Que sont les dimensions à évolution lente ?
Ce sont des attributs de dimension qui changent avec le temps, comme l'adresse d'un client. Le type 1 écrase l'ancienne valeur et perd l'historique. Le type 2 ajoute une nouvelle ligne avec des dates de début et de fin, ce qui conserve l'historique. Dites lequel vous choisiriez pour quel attribut et pourquoi.
16. Comment partitionner une grande table ?
Partitionnez sur une colonne sur laquelle la plupart des requêtes filtrent, généralement une date. Les requêtes qui filtrent dessus ne lisent que les partitions correspondantes. Évitez une colonne avec trop de valeurs distinctes, ce qui crée un nombre énorme de petites partitions.
17. Quels formats de fichiers utilisez-vous pour l'analytique, et pourquoi ?
Les formats en colonnes comme Parquet stockent chaque colonne ensemble, de sorte que les requêtes qui lisent quelques colonnes ignorent le reste et se compressent bien. Les formats en lignes comme CSV ou JSON sont faciles à produire et à lire mais lents et volumineux à grande échelle.
Questions de traitement distribué
18. Qu'est-ce qu'un shuffle dans Spark, et pourquoi est-ce coûteux ?
Un shuffle déplace les données entre les machines afin que les lignes ayant la même clé se retrouvent ensemble, comme dans les jointures et les group-by. Il coûte du transfert réseau, des écritures sur disque et du tri. Pour le réduire, filtrez tôt, choisissez des nombres de partitions raisonnables et diffusez une petite table dans une jointure pour que la grande n'ait pas à se déplacer.
19. Comment gérez-vous l'asymétrie des données ?
L'asymétrie signifie que quelques clés détiennent la majorité des données, donc une tâche s'exécute bien plus longtemps que les autres. Les options incluent le salage de la clé chaude en ajoutant un suffixe aléatoire et une double agrégation, la diffusion du côté le plus petit d'une jointure, et le filtrage ou le traitement séparé des clés chaudes.
20. Que fait un orchestrateur comme Airflow ?
Il planifie et exécute les tâches dans l'ordre, défini comme un graphe orienté où chaque tâche dépend des autres. Il gère les nouvelles tentatives, les backfills et les alertes, et montre ce qui s'est exécuté et ce qui a échoué. Il coordonne le travail. Il n'est pas censé faire lui-même le traitement lourd, qui doit s'exécuter dans un entrepôt ou un moteur de traitement.
Comment se préparer
- Entraînez-vous sur les modèles de fonctions de fenêtrage ci-dessus jusqu'à pouvoir les écrire sans regarder.
- Préparez un pipeline que vous avez construit, avec le volume, les échecs rencontrés et ce que vous avez changé.
- Soyez prêt à dessiner une architecture simple sur un tableau blanc et à expliquer ce qui se passe lorsqu'une étape échoue.
- Relisez votre CV : chaque outil qui y figure peut vous être demandé.
Pour vous entraîner sur des sujets connexes, consultez nos guides sur les questions d'entretien Kafka, les questions d'entretien Databricks, les questions d'entretien Snowflake et les questions d'entretien de system design.
Entraînez-vous à voix haute et avec vos propres mots. Une transcription par la suite montre où vous avez divagué ou manqué l'essentiel. Respectez les règles de l'employeur sur les outils d'IA lors de tout entretien ou test en direct.
Entraînez vos réponses avec YesToTheOffer
Répétez à voix haute, obtenez des réponses construites à partir de votre propre CV et consultez votre transcription par la suite. 30 minutes gratuites, sans abonnement.



