AccueilBlogTest technique data lineage : OpenLineage, DataHub et traçabilité
Guide recrutement data

Test technique data lineage : OpenLineage, DataHub et traçabilité

Le data lineage permet de savoir d où vient une donnée et où elle va. En 2025, c est un sujet Senior qui différencie les profils avec une vraie culture de gouvernance.

Data Builder·Juin 2025·6 min de lecture·Analytics Engineer · Data Engineer
Sommaire
  1. Pourquoi le data lineage
  2. OpenLineage standard
  3. DataHub et lineage
  4. Lineage dbt
  5. Column-level lineage
  6. Impact analysis
  7. Grille

1Pourquoi le data lineage est critique

Question discriminante

Dans quels cas concrets le data lineage vous a-t-il été utile ?

  • Impact analysis — 'si je renomme cette colonne dans stg_orders, quels dashboards cassent ?' Sans lineage, impossible de répondre
  • Root cause analysis — 'le KPI revenu a baissé de 20% hier, quelle transformation est responsable ?' Le lineage permet de remonter à la source
  • Conformité RGPD — 'où sont utilisées les données personnelles de cette table source ?' Le lineage répond en secondes
  • Onboarding — comprendre comment les données circulent dans l organisation sans interroger des dizaines de personnes

2OpenLineage : le standard ouvert

Question discriminante

Qu est-ce qu OpenLineage ? Pourquoi est-ce un standard important ?

# Exemple d événement OpenLineage émis par Airflow { 'eventType': 'COMPLETE', 'eventTime': '2025-01-15T08:30:00Z', 'job': { 'namespace': 'airflow', 'name': 'pipeline_ventes.transform_orders' }, 'inputs': [{ 'namespace': 'snowflake', 'name': 'RAW_DB.FIVETRAN.ORDERS', 'facets': { 'schema': { 'fields': [{'name': 'order_id', 'type': 'VARCHAR'}] } } }], 'outputs': [{ 'namespace': 'snowflake', 'name': 'PROD_DB.STAGING.STG_ORDERS' }] }
  • OpenLineage — standard ouvert (Linux Foundation) pour émettre des événements de lineage depuis n importe quel outil
  • Intégrations natives — Airflow, Spark, dbt, Flink, Great Expectations émettent des événements OpenLineage
  • Backends — Marquez (référence open source), DataHub, Atlan peuvent recevoir ces événements

3DataHub : catalogue et lineage centralisé

Question discriminante

Comment DataHub agrège-t-il le lineage de plusieurs outils différents ?

  • DataHub — plateforme de gouvernance open source (LinkedIn) qui centralise les métadonnées et le lineage
  • Sources d ingestion — Snowflake, BigQuery, dbt, Airflow, Looker, Power BI, Kafka : chaque source a un connecteur DataHub
  • UI de lineage — graphe interactif qui montre les dépendances de la source jusqu aux dashboards
  • Déploiement — Docker Compose pour le dev local, Kubernetes pour la production
# Lancer DataHub localement pip install acryl-datahub datahub docker quickstart # Ingestor dbt datahub ingest -c dbt_ingest.yaml # dbt_ingest.yaml source: type: dbt config: manifest_path: ./target/manifest.json catalog_path: ./target/catalog.json sources_path: ./target/sources.json

4Lineage dbt : le point de départ

Question discriminante

Comment dbt génère-t-il le lineage automatiquement ?

  • ref() et source() — chaque appel à ref() et source() dans un modèle dbt crée une arête dans le graphe de lineage
  • dbt DAG — dbt construit automatiquement le graphe de dépendances à partir des refs. Visualisable dans dbt docs
  • dbt docs generate — génère un site de documentation avec le graphe de lineage navigable
  • Exposure — documenter les consommateurs finaux (dashboards, APIs) comme arêtes sortantes du lineage

5Column-level lineage : la granularité maximale

Question discriminante

Qu est-ce que le column-level lineage ? Pourquoi est-il plus puissant que le table-level lineage ?

  • Table-level lineage — 'la table fct_orders dépend de stg_orders'. Utile mais pas suffisant pour l impact analysis
  • Column-level lineage — 'la colonne fct_orders.amount vient de stg_orders.unit_price * stg_orders.quantity'. Granularité fine
  • Cas d usage — identifier précisément quelle colonne source impacte quel KPI, même après 10 transformations
  • Outils — dbt 1.6+ génère le column-level lineage automatiquement. DataHub et Atlan le visualisent
  • Limite — les transformations complexes (Python, Spark) sont difficiles à tracer au niveau colonne

6Impact analysis en pratique

Question discriminante

Montrez comment vous utilisez le lineage pour évaluer l impact d un changement.

# dbt : identifier les modèles impactés par un changement # Si je modifie stg_orders.sql, quels modèles sont affectés ? dbt ls --select stg_orders+ # stg_orders et tous ses descendants # Exclure les modèles en dehors du périmètre dbt build --select stg_orders+ # rebuilder la chaîne complète # DataHub API : impact analysis programmatique from datahub.ingestion.api.common import PipelineContext # Requêter les downstream datasets d une colonne client.get_downstream_lineage( dataset='urn:li:dataset:(urn:li:dataPlatform:snowflake,PROD_DB.STAGING.STG_ORDERS,PROD)' )
# OpenLineage : émettre du lineage depuis n'importe quel job from openlineage.client import OpenLineageClient, set_producer from openlineage.client.run import RunEvent, Run, Job from openlineage.client.facet import SqlJobFacet, DatasetFacet client = OpenLineageClient.from_environment() set_producer("https://github.com/my-org/data-pipeline") # Émettre un event de début de job run_event = RunEvent( eventType="START", eventTime=datetime.now().isoformat(), run=Run(runId=str(uuid.uuid4())), job=Job(namespace="data-platform", name="transform_orders"), inputs=[DatasetFacet(namespace="snowflake", name="raw.orders")], outputs=[DatasetFacet(namespace="snowflake", name="analytics.fct_orders")] ) client.emit(run_event) # Intégrations natives OpenLineage # - dbt : dbt-ol package (lineage automatique) # - Airflow : openlineage-airflow provider # - Spark : openlineage-spark jar # - Great Expectations : openlineage-great-expectations
  • OpenLineage vs DataHub lineage — OpenLineage : standard ouvert pour émettre du lineage depuis n'importe quel outil. DataHub/Marquez/Atlan : backends qui consomment ces events
  • Marquez — metadata repository open source compatible OpenLineage. Alternative légère à DataHub pour le lineage seul
  • Lineage colonne par colonne — le lineage table-to-table ne suffit pas. Le lineage colonne permet de tracer l'origine de chaque champ (ex : amount dans fct_orders vient de raw.transactions.price)
  • Impact analysis — avec le lineage, répondre en 30 secondes à "si je change cette colonne source, quels dashboards seront impactés ?"
  • Airflow integration — installer apache-airflow-providers-openlineage. Chaque task Airflow émet automatiquement des events de lineage vers Marquez ou DataHub
  • OpenLineage vs DataHub lineage - OpenLineage : standard ouvert pour emettre du lineage depuis n importe quel outil. DataHub/Marquez/Atlan : backends qui consomment ces events
  • Marquez - metadata repository open source compatible OpenLineage. Alternative legere a DataHub pour le lineage seul
  • Lineage colonne par colonne - le lineage table-to-table ne suffit pas. Tracer l origine de chaque champ permet l impact analysis precise
  • Impact analysis - avec le lineage, repondre en 30 secondes a : si je change cette colonne source, quels dashboards seront impactes ?
  • Airflow integration - installer apache-airflow-providers-openlineage. Chaque task Airflow emet automatiquement des events de lineage vers Marquez ou DataHub

7Grille par niveau

NiveauMaitriseSignal GONO-GO
ConfirméLineage dbt, dbt docs, comprend le conceptUtilise ref() systématiquement, sait générer dbt docs avec le lineageNe sait pas ce qu est le data lineage
SeniorOpenLineage, DataHub, column-level lineage, impact analysisA déployé DataHub, utilise l impact analysis avant chaque changement critiqueN a jamais entendu parler d OpenLineage

Vous recrutez un Analytics Engineer ou Data Engineer ?

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