AccueilBlogTest technique dbt avance : macros, packages, snapshots, analyses
Guide recrutement data

Test technique dbt avance : macros, packages, snapshots, analyses

Au-dela des modeles de base, un Analytics Engineer Senior maitrise les macros, les packages communautaires, les snapshots pour le SCD2 et la documentation automatique.

Data Builder·Juin 2025·7 min de lecture·Analytics Engineer
Sommaire
  1. Macros Jinja avancees
  2. Packages dbt-utils et dbt-expectations
  3. Snapshots SCD2
  4. Analyses et seeds
  5. Hooks et operations
  6. Documentation et lineage
  7. Grille

dbt est devenu le standard de la transformation analytique. Mais connaitre SELECT ne suffit pas pour un poste Senior — on evalue la maitrise des macros, des packages et du cycle de vie complet des donnees.

1Macros Jinja avancees

Question discriminante

Quelle est la difference entre une macro et un modele ? Quand ecrivez-vous une macro plutot qu un modele ?

-- macros/generate_date_spine.sql {% macro generate_date_spine(start, end) %} {{ dbt_utils.date_spine( datepart='day', start_date="cast('" ~ start ~ "' as date)", end_date="cast('" ~ end ~ "' as date)" ) }} {% endmacro %} -- macros/get_column_values.sql {% macro get_top_n(column, table, n=10) %} {% set query %} SELECT DISTINCT {{ column }} FROM {{ ref(table) }} ORDER BY 1 LIMIT {{ n }} {% endset %} {% set results = run_query(query) %} {{ return(results.columns[0].values()) }} {% endmacro %}

2Packages dbt-utils et dbt-expectations

# packages.yml packages: - package: dbt-labs/dbt_utils version: ['>=1.0.0'] - package: calogica/dbt_expectations version: ['>=0.10.0'] # Utilisation dans les tests YAML models: - name: fct_orders columns: - name: amount tests: - dbt_expectations.expect_column_values_to_be_between: min_value: 0 max_value: 100000 - dbt_expectations.expect_column_proportion_of_unique_values_to_be_between: min_value: 0.95

3Snapshots : implementer le SCD2

Question discriminante

Qu est-ce qu un snapshot dbt ? Comment implementez-vous un SCD de type 2 avec dbt ?

-- snapshots/snap_customers.sql {% snapshot snap_customers %} {{ config( target_schema='snapshots', unique_key='customer_id', strategy='timestamp', updated_at='updated_at', invalidate_hard_deletes=True ) }} SELECT * FROM {{ source('crm', 'customers') }} {% endsnapshot %} -- Colonnes ajoutees automatiquement par dbt : -- dbt_scd_id : identifiant unique de la version -- dbt_updated_at : date de la mise a jour -- dbt_valid_from : date de debut de validite -- dbt_valid_to : date de fin (NULL = version courante)

4Analyses, seeds et exposures

5Hooks et operations

# dbt_project.yml models: mon_projet: marts: +post-hook: - 'GRANT SELECT ON {{ this }} TO ROLE analyst_role' - '{{ log("Model " ~ this ~ " built", info=True) }}' # on-run-start et on-run-end on-run-start: - 'CREATE SCHEMA IF NOT EXISTS {{ target.schema }}' on-run-end: - '{{ elementary.on_run_end() }}' # package de monitoring

6Documentation et lineage automatique

7Grille par niveau

NiveauMaitriseSignal GONO-GO
JuniorModeles SQL, tests generiques, ref() et source()Structure un projet dbt, utilise not_null/unique, sait ce que fait ref()Ne sait pas ce que fait ref() vs une jointure directe
ConfirmeMacros, dbt-utils, snapshots, CI/CD slimA ecrit une macro avec run_query, utilise dbt_utils.surrogate_key, a configure un snapshotN a jamais utilise dbt_utils, ne sait pas ce qu est un snapshot
SeniorPackages custom, hooks, exposures, column-level lineage, performanceA cree un package dbt interne, configure les hooks GRANT, documenté les exposuresNe sait pas ce que sont les exposures, n a jamais optimise les performances dbt

Vous recrutez un Analytics Engineer ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.