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
| Niveau | Maitrise | Signal GO | NO-GO |
|---|
| Confirmé | Lineage dbt, dbt docs, comprend le concept | Utilise ref() systématiquement, sait générer dbt docs avec le lineage | Ne sait pas ce qu est le data lineage |
| Senior | OpenLineage, DataHub, column-level lineage, impact analysis | A déployé DataHub, utilise l impact analysis avant chaque changement critique | N a jamais entendu parler d OpenLineage |