Guide d’implémentation

Comment implémenter le data lineage : guide pas à pas

De la planification à la prod : patterns d’architecture, capture automatique, setup des outils et bonnes pratiques pour Snowflake, BigQuery, dbt, Airflow et Looker.

25 min de lecturePour data & platform engineersAvec exemples de code

📚 Besoin de recommandations d’outils ? Consulte notre comparatif :

Meilleurs outils de data lineage (comparatif 2025)

1. Roadmap d’implémentation en 8 étapes

Mettre en place le data lineage est un projet multi-phase : 1-3 mois avec des outils modernes, 3-6 mois avec une plateforme enterprise. Suis cette roadmap pour un déploiement sans surprise.

1

Définir le scope et les objectifs

Durée : 1-2 semaines

Identifie les parties prenantes et des cas d’usage clairs. Tu t’assures ainsi de construire la bonne solution pour ton organisation.

Actions clés
  • Cartographier les parties prenantes : data engineers, analystes, compliance, métiers
  • Prioriser les cas d’usage : compliance (RGPD/SOX), analyse d’impact, troubleshooting, documentation
  • Définir le périmètre : systèmes couverts (warehouse, ETL, BI), granularité (table vs colonne)
  • Métriques de succès : % de couverture, temps d’analyse d’impact, adoption utilisateurs
Cas d’usage typiques
  • Compliance : tracer les champs PII/sensibles pour le RGPD/CCPA
  • Analyse d’impact : « Si je change cette table, qu’est-ce qui casse ? »
  • Root cause : « Pourquoi ce dashboard est faux ? »
  • Migration : comprendre les dépendances avant de migrer un système
  • Onboarding : aider les nouveaux à comprendre les flux
Astuce

Commence par un seul cas d’usage à forte valeur (compliance ou impact). Prouve la valeur rapidement, puis élargis le périmètre.

2

Choisir l’approche

Durée : ~1 semaine

Acheter, construire, ou hybride ? Ce choix conditionne le délai, le coût et la maintenance.

Buy : catalogue moderne

Outils : Atlan, Select Star, Metaphor

Coût : $20-80k/an

Setup : 1-4 semaines

Idéal pour : équipes mid-market (10-50 pers.) sur stack moderne

Build : open source

Outils : OpenLineage, DataHub, Marquez

Coût : $0 logiciel, $50-150k/an de charge

Setup : 1-3 mois

Idéal pour : équipes avec fortes ressources engineering, besoin de custom

Hybride : auto + manuel

Outils : Atlan/DataHub + Datadef

Coût : $20-80k/an + $0-30k

Setup : 2-6 semaines

Idéal pour : combiner précision runtime + doc de design

Grille de décision

Choisis un catalogue moderne si tu veux aller vite et as le budget. Choisis l’open source si tu veux l’indépendance et as des devs dispo. Choisis l’hybride si tu veux la précision runtime + la documentation d’architecture.

Voir notre comparatif complet pour les détails.

3

Concevoir l’architecture lineage

Durée : 1-2 semaines

Dessine comment collecter, stocker et exposer les métadonnées. Voir la section Patterns d’architecture pour les détails.

Décisions clés
  • Stockage : Graph DB (Neo4j), relationnel (Postgres) ou catalogue managé
  • Ingestion : Pull planifié vs Push event-driven (OpenLineage)
  • Granularité : niveau table (plus simple) vs colonne (plus précis)
  • Visualisation : Web UI vs intégré (BI, notebooks)
4

Mettre en place la capture automatique

Durée : 2-4 semaines

Mets en place les trois méthodes : parsing des logs SQL, extraction via API, ingestion de manifeste. Voir Capture automatique.

1. Parsing des logs

Extraire le SQL des logs Snowflake/BigQuery/Redshift pour inférer les dépendances

2. APIs métadonnées

Récupérer le lineage des outils BI via REST/GraphQL

3. Ingestion de manifeste

Parser manifest.json dbt et les DAGs Airflow

5

Intégrer au stack data

Durée : 2-4 semaines

Connecte tous les systèmes. C’est la partie la plus longue car chaque système a ses APIs et son auth.

Data warehouses

Snowflake, BigQuery, Redshift, Databricks — accès aux logs via JDBC/ODBC

Transformation

dbt (manifest.json), Airflow (parsing DAG), Spark (listener OpenLineage)

BI & Analytics

Looker (API LookML), Tableau (Metadata API), Power BI (REST)

Astuce : commence par le système le plus critique (souvent le warehouse) et valide la précision avant d’ajouter d’autres intégrations. Voir Intégrations outils pour les étapes détaillées.

6

Valider et tester

Durée : 1-2 semaines

Teste la précision du lineage bout en bout. Corrige les manques avant le roll-out.

Checklist de validation
  • Traces end-to-end : tracer 5-10 dashboards critiques jusqu’aux sources
  • Précision niveau colonne : vérifier revenus, IDs clients
  • Connexions manquantes : ETL legacy, fichiers Excel/CSV, scripts
  • Fraîcheur : le lineage se met-il à jour après un changement de schéma ?
  • Performance : supporte-t-il 1000+ nœuds ?

Problèmes courants

  • • SQL dynamique mal parsé
  • • Lineage cross-database manquant
  • • Sources externes/API non capturées
  • • Imports Excel/CSV manuels non tracés
7

Activer les workflows de gouvernance

Durée : 1-3 semaines

Branche le lineage aux cas d’usage métiers. C’est là que la valeur business se concrétise.

Compliance
  • Propagation PII : taguer les champs sensibles et propager en downstream
  • Droit à l’effacement : localiser toutes les copies de données client
  • Classification : hériter des labels de sensibilité via le lineage
Opérations
  • Analyse d’impact : voir quels dashboards vont casser avant une modif de schéma
  • Gestion d’incident : remonter la cause d’un incident data quality
  • Optimisation coûts : identifier les tables/views peu utilisées
8

Déployer et former les utilisateurs

Durée : 2-4 semaines (continu)

Le lineage crée de la valeur seulement s’il est utilisé. Conduis l’adoption activement.

Plan d’adoption
1
Pilote avec les power users : 5-10 data engineers/analystes au lancement
2
Rédiger de la doc : guides pour impact, PII, troubleshooting
3
Former par profil : ateliers 1h pour engineers, analystes, métiers
4
Rendre obligatoire avant les changements : exiger une analyse d’impact via le lineage avant tout déploiement de schéma
5
Mesurer l’adoption : utilisateurs actifs mensuels, requêtes lineage, usage des features
Mesures de succès

Suis : Weekly active users (objectif 50%+ de l’équipe data), temps d’analyse d’impact (avant vs après lineage), incidents évités (changements bloqués avant prod), requêtes compliance résolues (localisation PII).

2. Buy vs Build vs Hybride

Premier choix structurant : acheter, construire ou mixer. Chaque option a ses compromis de coût, délai et flexibilité.

ApprocheOutilsCoûtDélaiEffortIdéal pour
Buy : catalogue moderneAtlan, Select Star, Metaphor$20-80k/an1-4 semainesFaibleTime-to-value rapide, stack moderne
Buy : plateforme enterpriseInformatica, Collibra$100-500k/an3-6 moisMoyenScale enterprise, forte gouvernance
Build : open sourceDataHub, OpenLineage + Marquez$0 licence, $50-150k/an de charge1-3 moisÉlevéÉquipe eng solide, besoin de custom
Hybride : auto + manuelAtlan + Datadef$20-110k/an2-6 semainesFaible-moyenPrécision runtime + doc d’architecture

Buy : catalogue moderne

Avantages

  • • Time-to-value ultra rapide
  • • Lineage auto dès le jour 1
  • • UX moderne appréciée des analystes
  • • Pas de maintenance DevOps

Inconvénients

  • • Coût récurrent
  • • Dépendance éditeur
  • • Moins de custom

Build : open source

Avantages

  • • Pas de licence
  • • Contrôle total et custom
  • • Indépendance fournisseur
  • • Support communauté

Inconvénients

  • • Effort engineering important
  • • Maintenance continue
  • • Évolutions plus lentes

Hybride : best of both

Avantages

  • • Précision runtime automatisée
  • • Documentation d’intention de design
  • • Setup rapide + flexibilité
  • • Couvre les trous (future state, APIs externes)

Inconvénients

  • • Deux outils à opérer
  • • Coût total plus élevé
  • • Risque de doublon

Notre reco

Pour la plupart des équipes : démarre avec un catalogue cloud moderne (Atlan ou Select Star) pour aller vite. Ajoute Datadef pour documenter l’architecture et l’intention de design que les outils auto ne capturent pas.

Pour les équipes avec du temps et des ressources eng : construis sur OpenLineage + DataHub pour l’indépendance et le custom. Prévois 2-3 mois de setup.

3. Patterns d’architecture de lineage

Une architecture typique comporte trois couches : sources (systèmes à capturer), stockage (où vit le lineage) et visualisation (comment les utilisateurs consomment).

Architecture type

Couche 1 : Sources (extraction)

Warehouses

Logs de requêtes Snowflake, BigQuery, Redshift

ETL/ELT

Manifeste dbt, DAGs Airflow, lineage Spark

Outils BI

API Looker, API métadonnées Tableau

Pipeline d’ingestion

Couche 2 : Stockage métadonnées (processing)

Graph DB

Neo4j pour les requêtes de relations

DB relationnelle

Postgres pour des métadonnées structurées

Catalogue managé

Backend SaaS (Atlan, Collibra)

API / GraphQL

Couche 3 : Visualisation (consommation)

Web UI

Interface catalogue pour naviguer

Embedded

Lineage intégré dans BI/notebooks

Accès API

Requêtes programmatiques pour l’automatisation

Options de stockage

Graph DB (Neo4j, Amazon Neptune)

Idéal pour les requêtes de relations complexes

✓ Pros : requêtes rapides, modèle naturel pour le lineage

✗ Cons : exploitation plus complexe, moins de compétences dispo

DB relationnelle (Postgres, MySQL)

Bien pour des métadonnées structurées et simples

✓ Pros : connu, facile à requêter, tooling standard

✗ Cons : requêtes multi-hop lentes

Catalogue managé (SaaS)

Les outils gèrent le stockage et l’optimisation

✓ Pros : zéro maintenance, optimisé pour l’échelle

✗ Cons : lock-in, pas d’accès direct DB

Patterns d’ingestion

Pull (extraction planifiée)

Jobs périodiques qui extraient les métadonnées

• Fréquence : toutes les 1-24h via cron/Airflow

• Idéal pour : systèmes batch, BI, warehouses

• Latence : minutes à heures

Push (event-driven)

Les systèmes émettent des événements lineage en temps réel

• Méthode : événements OpenLineage via Kafka/HTTP

• Idéal pour : streaming, Spark, Airflow

• Latence : secondes

Hybride (les deux)

Push pour les pipelines, pull pour BI/warehouses

• Combine temps réel + couverture large

4. Méthodes de capture automatique

Trois méthodes principales : parsing des logs SQL, APIs métadonnées et ingestion de manifeste. Les outils modernes combinent les trois.

Méthode 1 : parsing des logs (warehouses)

On extrait les requêtes des logs du warehouse, on les parse pour identifier sources et cibles et on construit le graphe. C’est la méthode la plus puissante pour le niveau warehouse.

Comment ça marche

  1. 1. Connexion aux logs d’audit
  2. 2. Extraction des requêtes SQL
  3. 3. Parsing pour trouver tables sources/cibles
  4. 4. Construction du graphe

Avantages

  • • Capture le runtime réel
  • • Pas de changement de code
  • • Précision colonne possible
  • • Couvre aussi l’ad hoc

Limites

  • • SQL complexe à parser
  • • SQL dynamique parfois manquant
  • • Historique uniquement (pas prédictif)
  • • Accès aux logs requis

Warehouses supportés

✅ Snowflake

Query via : SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY

Niveau colonne : ✅ (via ACCESS_HISTORY)

✅ BigQuery

Query via : INFORMATION_SCHEMA.JOBS

Niveau colonne : ✅ (avec parsing)

✅ Redshift

Query via : STL_QUERY, STV_STATEMENTTEXT

Niveau colonne : ⚠️ (limité)

✅ Databricks

Query via : system.access.audit

Niveau colonne : ✅ (Unity Catalog)

Exemple : accès aux logs Snowflake
-- Extract lineage from Snowflake query logs
SELECT 
  query_text,
  start_time,
  user_name,
  database_name,
  schema_name,
  tables_scanned,
  tables_modified
FROM snowflake.account_usage.query_history
WHERE start_time >= DATEADD(day, -7, CURRENT_TIMESTAMP())
  AND query_type IN ('SELECT', 'INSERT', 'MERGE', 'CREATE_TABLE_AS_SELECT')
ORDER BY start_time DESC;

Méthode 2 : APIs métadonnées (BI)

Les outils BI et orchestrateurs exposent des APIs REST/GraphQL pour récupérer dashboards, rapports et sources. Tu couvres ainsi la couche consommation.

Looker

LookML API + Metadata API

Extrait : explores, views, fields, dashboards

Tableau

Metadata API (GraphQL)

Extrait : workbooks, datasources, colonnes

Power BI

REST API + Scanner API

Extrait : rapports, datasets, dataflows

Exemple : extraction Looker
# Python: Extract Looker lineage via SDK
import looker_sdk

sdk = looker_sdk.init40()

# Get all dashboards
dashboards = sdk.all_dashboards(fields="id,title")

for dashboard in dashboards:
    # Get dashboard elements
    elements = sdk.dashboard_dashboard_elements(dashboard.id)
    
    for element in elements:
        if element.query:
            query = sdk.query(element.query.id)
            # Extract source tables from query
            print(f"Dashboard: {dashboard.title}")
            print(f"  Tables: {query.view}, {query.model}")

Méthode 3 : ingestion de manifeste (dbt, Airflow)

dbt et Airflow génèrent des métadonnées (manifestes, DAGs) décrivant les transformations. En les parsant, tu obtiens un lineage de transformation parfait.

Manifeste dbt

dbt génère manifest.json avec tous les modèles, sources, tests et dépendances.

✓ Lineage niveau colonne intégré

✓ Métadonnées de tests incluses

✓ Descriptions capturées

✓ DAG parfait

DAGs Airflow

Parser les fichiers Python des DAGs pour extraire dépendances et flux.

✓ Dépendances entre tâches

✓ Types d’opérateurs

✓ Infos de schedule

✓ Événements OpenLineage pour les runs

Exemple : parsing du manifeste dbt
# Python: Parse dbt manifest.json for lineage
import json

with open('target/manifest.json') as f:
    manifest = json.load(f)

# Extract model lineage
for node_id, node in manifest['nodes'].items():
    if node['resource_type'] == 'model':
        print(f"Model: {node['name']}")
        print(f"  Depends on: {node['depends_on']['nodes']}")
        
        # Column-level lineage
        for col_name, col_info in node['columns'].items():
            print(f"    Column: {col_name}")
            if 'meta' in col_info and 'upstream' in col_info['meta']:
                print(f"      From: {col_info['meta']['upstream']}")

5. Exemples d’intégration

Étapes concrètes pour connecter les principaux outils du stack moderne.

Intégration Snowflake (query logs)

Étapes

  1. 1
    Donner accès à ACCOUNT_USAGE
    GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE lineage_role;
  2. 2
    Interroger QUERY_HISTORY
    SELECT query_text, database_name, schema_name
    FROM snowflake.account_usage.query_history
    WHERE query_type IN ('SELECT', 'INSERT', 'MERGE')
  3. 3
    Option : ACCESS_HISTORY pour le niveau colonne
    SELECT * FROM snowflake.account_usage.access_history
    WHERE query_start_time >= DATEADD(day, -7, CURRENT_TIMESTAMP());

Astuce : ACCESS_HISTORY donne la précision colonne mais nécessite l’édition Enterprise. Les logs seuls donnent le niveau table sur toutes les éditions.

Intégration du manifeste dbt

Étapes

  1. 1
    Générer le manifeste après dbt run
    dbt run
    # Génère target/manifest.json automatiquement
  2. 2
    Uploader le manifeste dans l’outil de lineage
    # Upload to catalog tool API
    curl -X POST https://catalog.example.com/api/dbt/manifest   -H "Authorization: Bearer $API_KEY"   --data-binary @target/manifest.json
  3. 3
    Automatiser en CI/CD

    Ajouter l’upload du manifeste au déploiement dbt

Bonnes pratiques : la plupart des catalogues (Atlan, Select Star, DataHub) ont des intégrations natives dbt. Utilise leurs plugins plutôt que des scripts maison.

OpenLineage + Airflow

Étapes

  1. 1
    Installer le plugin OpenLineage Airflow
    pip install openlineage-airflow
  2. 2
    Configurer le backend dans airflow.cfg
    [openlineage]
    transport = http://marquez-api:5000
    namespace = prod-data-pipelines
  3. 3
    Lineage émis automatiquement à l’exécution

    Pas de changement de code dans les DAGs — les événements partent via OpenLineage

Opérateurs supportés : SQLExecuteQueryOperator, PythonOperator, BigQueryOperator, SnowflakeOperator, etc.

Voir la doc OpenLineage pour la liste complète.

6. Exemples de code

Exemple : script Python pour le lineage Snowflake

import snowflake.connector
import json
from collections import defaultdict

# Connect to Snowflake
conn = snowflake.connector.connect(
    account='YOUR_ACCOUNT',
    user='YOUR_USER',
    password='YOUR_PASSWORD',
    warehouse='COMPUTE_WH',
    database='SNOWFLAKE',
    schema='ACCOUNT_USAGE'
)

# Query recent queries for lineage
query = """
SELECT 
    query_id,
    query_text,
    database_name,
    schema_name,
    user_name,
    start_time
FROM snowflake.account_usage.query_history
WHERE query_type IN ('INSERT', 'MERGE', 'CREATE_TABLE_AS_SELECT')
  AND start_time >= DATEADD(day, -7, CURRENT_TIMESTAMP())
ORDER BY start_time DESC
LIMIT 1000;
"""

cursor = conn.cursor()
cursor.execute(query)

# Parse queries and build lineage
lineage_graph = defaultdict(list)

for row in cursor:
    query_id, query_text, db, schema, user, timestamp = row
    
    # Simple parsing (use sqlparse or sqlglot for production)
    if 'INSERT INTO' in query_text.upper():
        # Extract target table
        target = extract_table_name(query_text, 'INSERT INTO')
        # Extract source tables from FROM/JOIN clauses
        sources = extract_table_names(query_text, ['FROM', 'JOIN'])
        
        for source in sources:
            lineage_graph[source].append({
                'target': target,
                'query_id': query_id,
                'user': user,
                'timestamp': str(timestamp)
            })

# Output lineage as JSON
with open('lineage_output.json', 'w') as f:
    json.dump(dict(lineage_graph), f, indent=2)

print(f"Extracted lineage for {len(lineage_graph)} source tables")
conn.close()

Exemple : DAG Airflow pour extraire le lineage

from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime, timedelta
import requests

def extract_snowflake_lineage():
    """Extract lineage from Snowflake and send to catalog"""
    # Your lineage extraction logic here
    lineage_data = get_snowflake_lineage()
    
    # Upload to catalog tool API
    response = requests.post(
        'https://catalog.example.com/api/lineage',
        headers={'Authorization': f'Bearer {CATALOG_API_KEY}'},
        json=lineage_data
    )
    response.raise_for_status()
    print(f"Uploaded {len(lineage_data)} lineage edges")

def extract_dbt_lineage():
    """Parse dbt manifest and upload"""
    with open('/dbt/target/manifest.json') as f:
        manifest = json.load(f)
    
    # Upload to catalog
    response = requests.post(
        'https://catalog.example.com/api/dbt/manifest',
        headers={'Authorization': f'Bearer {CATALOG_API_KEY}'},
        json=manifest
    )
    response.raise_for_status()

default_args = {
    'owner': 'data-platform',
    'depends_on_past': False,
    'start_date': datetime(2025, 1, 1),
    'email_on_failure': True,
    'retries': 2,
    'retry_delay': timedelta(minutes=5),
}

with DAG(
    'lineage_extraction',
    default_args=default_args,
    description='Daily lineage metadata extraction',
    schedule_interval='@daily',
    catchup=False,
) as dag:

    extract_snowflake = PythonOperator(
        task_id='extract_snowflake_lineage',
        python_callable=extract_snowflake_lineage,
    )

    extract_dbt = PythonOperator(
        task_id='extract_dbt_lineage',
        python_callable=extract_dbt_lineage,
    )

    extract_snowflake >> extract_dbt

7. FAQ

Comment implémenter le data lineage ?

1) Scope + objectifs, 2) outils (catalogue, open source, manuel), 3) architecture (stockage, ingestion, visualisation), 4) capture auto (logs, APIs, manifestes), 5) intégration au stack (warehouse, ETL, BI), 6) validation, 7) gouvernance, 8) formation. Délai : 1-3 mois avec outils modernes, 3-6 mois sur plateforme enterprise.

Quelle est la meilleure façon d’automatiser ?

1) Parsing des logs SQL (Snowflake, BigQuery, Redshift), 2) APIs métadonnées (Looker, Tableau), 3) manifestes dbt, 4) OpenLineage pour Airflow/Spark. Atlan ou Select Star automatisent ces méthodes.

Combien de temps cela prend ?

Catalogues cloud : 1-4 semaines. Plateformes enterprise : 2-6 mois. Open source : 1-3 mois. Outils visuels (Datadef) : immédiat mais maintenance manuelle.

Quels outils sont nécessaires ?

1) Plateforme lineage (Atlan, Collibra, DataHub), 2) extracteurs pour ton stack (dbt, Airflow, Looker/Tableau), 3) accès logs SQL (ACCOUNT_USAGE, INFORMATION_SCHEMA), 4) orchestration pour rafraîchir, 5) option : OpenLineage et doc visuelle (Datadef).

Passer à l’action

Gagne des semaines de setup et génère des diagrammes de lineage pros en quelques minutes grâce à l’IA.