L Analytics Engineer est le profil le plus demandé en data en 2025. Voici le test technique complet qu on mène chez Data Builder pour évaluer rigoureusement ce profil.
L Analytics Engineer fait le pont entre les Data Engineers (pipelines bruts) et les Data Analysts (consommation). Il produit des modèles dbt robustes, versionnes, testés et documentés que toute l équipe peut consommer en confiance.
Quelles sont les 3 requêtes SQL que vous posez systématiquement pour évaluer un AE ?
-- Question 1 : cohortes de rétention
-- Calculer le taux de rétention par cohorte hebdomadaire
WITH premiere_commande AS (
SELECT user_id,
DATE_TRUNC('week', MIN(order_date)) AS cohorte
FROM commandes
GROUP BY user_id
),
activite AS (
SELECT pc.cohorte,
DATE_TRUNC('week', c.order_date) AS semaine,
COUNT(DISTINCT c.user_id) AS actifs
FROM premiere_commande pc
JOIN commandes c USING (user_id)
GROUP BY 1, 2
)
SELECT
cohorte,
semaine,
DATEDIFF('week', cohorte, semaine) AS semaine_num,
actifs,
FIRST_VALUE(actifs) OVER (PARTITION BY cohorte ORDER BY semaine) AS taille_cohorte,
ROUND(actifs * 100.0 /
FIRST_VALUE(actifs) OVER (PARTITION BY cohorte ORDER BY semaine), 1) AS retention_pct
FROM activite
ORDER BY cohorte, semaine_num;
-- Question 2 : déduplication avec préférence
-- Garder la commande la plus récente par client
SELECT *
FROM commandes
QUALIFY ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_date DESC) = 1;
-- Question 3 : running total avec reset
-- Solde cumulatif par compte, réinitialisé à zéro si négatif
SELECT
compte_id,
date_op,
montant,
GREATEST(SUM(montant) OVER (PARTITION BY compte_id ORDER BY date_op), 0) AS solde_cumul
FROM mouvements;Comment évaluez-vous la maturité dbt d un candidat AE ?
-- Structure attendue d un projet dbt bien organisé
models/
├── staging/ -- 1 modèle par table source, renommage, cast
│ ├── stg_commandes.sql
│ └── _stg_commandes.yml -- tests + documentation
├── intermediate/ -- jointures et logique métier complexe
│ └── int_commandes_enrichies.sql
└── marts/
├── finance/
│ └── fct_revenus.sql
└── marketing/
└── dim_clients.sql
-- Ce qu on teste dans le YAML :
models:
- name: fct_revenus
columns:
- name: order_id
tests: [not_null, unique]
- name: montant
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_between:
min_value: 0Quelle est la différence entre un schéma en étoile et un schéma en flocon ? Quand choisissez-vous l un ou l autre ?
-- Schéma en étoile : recommandé pour la BI
-- Table de faits centrale + dimensions dénormalisées
fct_commandes (
order_id PK,
date_id FK, -- dim_date
client_id FK, -- dim_clients (inclut ville, pays, segment)
produit_id FK, -- dim_produits (inclut catégorie, marque)
montant,
quantite
)
-- Les dimensions sont plates : pas de table dim_ville séparée
-- Schéma en flocon : dimensions normalisées
-- dim_produits -> dim_categories -> dim_sous_categories
-- Plus économique en stockage mais jointures plus complexes
-- Déconseillé pour la BI self-serviceQuel niveau de Python attendez-vous d un AE ? Quels sont les cas d usage typiques ?
Pourquoi les questions de contexte métier sont-elles importantes pour évaluer un AE ?
| Compétence | Junior AE | Confirmé AE | Senior AE |
|---|---|---|---|
| SQL window functions | Bases (ROW_NUMBER) | LAG/LEAD, frames, cohortes | CTEs récursives, QUALIFY, JSON |
| dbt modèles | Staging + marts, ref() | Intermediate, macros, tests custom | Packages, CI slim, snapshots SCD2 |
| Modélisation | Comprend étoile vs flocon | Conçoit un schéma en étoile complet | SCD2, late-arriving facts, bridge tables |
| Python | pandas basique, scripts | Automatisation dbt API, pytest | Macros dbt avancées, outils admin |
| Communication métier | Explique son travail | Anime des ateliers de définition métriques | Définit les standards de l équipe |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.