Implementation Guide

How to Implement Data Lineage: Step-by-Step Guide

Complete implementation guide from planning to production. Learn architecture patterns, automated capture methods, tool setup, and best practices for Snowflake, BigQuery, dbt, Airflow, and Looker.

25 min readFor Data & Platform EngineersWith code examples

See it as a diagram

Everything below, as a diagram you can edit. Describe yours and see it in seconds.

90/20003 credits left
Try:

No account needed · Editable canvas, not a picture

📚 Looking for tool recommendations? Check out our comparison guide:

Best Data Lineage Tools (2025 Comparison)

1. 8-Step Implementation Roadmap

Implementing data lineage is a multi-phase project spanning 1-3 months for modern tools or 3-6 months for enterprise platforms. Follow this proven roadmap to ensure successful adoption.

1

Define Scope & Objectives

Timeline: 1-2 weeks

Start by identifying stakeholders and defining clear use cases. This ensures you build the right solution for your organization's needs.

Key Activities
  • Identify stakeholders: Data engineers, analysts, compliance, business users
  • Define primary use cases: Compliance (GDPR, SOX), impact analysis, troubleshooting, documentation
  • Determine scope: Which systems (warehouse, ETL, BI), granularity (table vs column-level)
  • Set success metrics: Lineage coverage %, time to impact analysis, user adoption
Common Use Cases
  • Compliance: Track PII/sensitive data for GDPR, CCPA
  • Impact analysis: "If I change this table, what breaks?"
  • Root cause analysis: "Why is this dashboard showing wrong data?"
  • Migration planning: Understand dependencies before migrating systems
  • Onboarding: Help new team members understand data flows
Pro Tip

Start with one high-value use case (e.g., compliance or impact analysis) rather than trying to solve everything at once. Prove value quickly, then expand scope.

2

Choose Implementation Approach

Timeline: 1 week

Decide between buying a commercial tool, building on open source, or hybrid approach. This decision impacts timeline, cost, and maintenance burden.

Buy: Modern Catalog

Tools: Atlan, Select Star, Metaphor

Cost: $20-80k/year

Setup: 1-4 weeks

Best for: Mid-market teams (10-50 people) with modern stacks

Build: Open Source

Tools: OpenLineage, DataHub, Marquez

Cost: $0 software, $50-150k/year labor

Setup: 1-3 months

Best for: Teams with strong eng resources, want customization

Hybrid: Automated + Manual

Tools: Atlan/DataHub + Datadef

Cost: $20-80k/year + $0-30k

Setup: 2-6 weeks

Best for: Teams wanting runtime accuracy + design docs

Decision Framework

Choose modern catalog if you need fast time-to-value and have budget. Choose open source if you have engineering resources and want vendor independence. Choose hybrid if you need both runtime lineage and architecture documentation.

See our complete tools comparison for detailed analysis.

3

Design Lineage Architecture

Timeline: 1-2 weeks

Design the architecture for collecting, storing, and visualizing lineage metadata. This is covered in detail in the Architecture Patterns section below.

Key Architecture Decisions
  • Metadata storage: Graph database (Neo4j), relational (Postgres), or managed catalog
  • Ingestion pattern: Pull (scheduled extraction) vs Push (event-driven with OpenLineage)
  • Granularity: Table-level (faster, simpler) vs column-level (more accurate, complex)
  • Visualization: Web UI (catalog tool) vs embedded (BI tools, notebooks)
4

Set Up Automated Capture

Timeline: 2-4 weeks

Implement automated lineage capture from your data systems. The three main methods are query log parsing, metadata API extraction, and manifest ingestion. Detailed in Automated Capture Methods below.

1. Query Log Parsing

Extract SQL from warehouse query logs (Snowflake, BigQuery, Redshift) to infer lineage

2. Metadata API Extraction

Pull lineage from BI tools (Looker, Tableau) and ETL platforms via REST APIs

3. Manifest Ingestion

Parse dbt manifest.json and Airflow DAGs to capture transformation lineage

5

Integrate with Data Stack

Timeline: 2-4 weeks

Connect lineage capture to all systems in your data stack. Most time-consuming step as each system has different APIs and authentication methods.

Data Warehouses

Snowflake, BigQuery, Redshift, Databricks—connect via JDBC/ODBC for query log access

Transformation Tools

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

BI & Analytics

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

Pro Tip: Start with your most critical system (usually the data warehouse) and validate lineage accuracy before adding more integrations. See Tool Integration section for specific setup instructions.

6

Validate & Test Lineage

Timeline: 1-2 weeks

Test lineage accuracy by tracing known data flows end-to-end. Identify gaps and missing connections before rolling out to users.

Validation Checklist
  • End-to-end traces: Pick 5-10 critical reports/dashboards and trace lineage back to source systems
  • Column-level accuracy: For critical data (revenue, customer IDs), validate column-level transformations
  • Missing connections: Identify systems not yet captured (e.g., legacy ETL, Excel files, scripts)
  • Freshness: Verify lineage updates when schema or transformations change
  • Performance: Test query performance for large lineage graphs (1000+ nodes)

Common Issues

  • • Dynamic SQL not parsed correctly
  • • Cross-database/cross-warehouse lineage missing
  • • External API data sources not captured
  • • Manual Excel/CSV uploads not tracked
7

Enable Governance Workflows

Timeline: 1-3 weeks

Connect lineage to data governance use cases. This is where lineage delivers measurable business value.

Compliance Use Cases
  • PII propagation: Tag sensitive fields and trace downstream to enforce access controls
  • GDPR right to erasure: Find all copies of customer data for deletion requests
  • Data classification: Inherit sensitivity labels through lineage (PII → downstream)
Operational Use Cases
  • Impact analysis: Before changing a table, see what dashboards/reports will break
  • Incident management: When data quality fails, trace upstream to find root cause
  • Cost optimization: Identify unused tables/views for deprecation via lineage
8

Roll Out & Train Users

Timeline: 2-4 weeks (ongoing)

Train users and drive adoption. Lineage only delivers value when people actually use it.

Adoption Strategy
1
Pilot with power users: Start with 5-10 data engineers/analysts who are early adopters
2
Create documentation: Write guides for common use cases (impact analysis, finding PII, troubleshooting)
3
Hold training sessions: 1-hour workshops for different personas (engineers, analysts, business users)
4
Make it mandatory for changes: Require impact analysis (via lineage) before deploying schema changes
5
Measure adoption: Track monthly active users, lineage queries, and feature usage
Success Metrics

Track: Weekly active users (target: 50%+ of data team), Time to impact analysis (baseline vs with lineage), Incidents prevented (breaking changes caught before deploy), Compliance queries resolved (PII location requests).

2. Implementation Approaches: Buy vs Build vs Hybrid

The first major decision is whether to buy a commercial tool, build on open source, or use a hybrid approach. Each has distinct trade-offs in cost, timeline, and flexibility.

ApproachToolsCostTimelineEffortBest For
Buy: Modern CatalogAtlan, Select Star, Metaphor$20-80k/year1-4 weeksLowFast time-to-value, modern stacks
Buy: Enterprise PlatformInformatica, Collibra$100-500k/year3-6 monthsMediumEnterprise scale, heavy governance
Build: Open SourceDataHub, OpenLineage + Marquez$0 software, $50-150k labor/yr1-3 monthsHighStrong eng team, customization needs
Hybrid: Auto + ManualAtlan + Datadef$20-110k/year2-6 weeksLow-MedRuntime + architecture docs

Buy: Modern Catalog

Pros

  • • Fastest time-to-value (days, not months)
  • • Automated lineage from day one
  • • Modern UX that analysts love
  • • No DevOps maintenance burden

Cons

  • • Recurring annual cost
  • • Vendor lock-in
  • • Limited customization

Build: Open Source

Pros

  • • No software licensing cost
  • • Full control and customization
  • • Vendor independence
  • • Community support

Cons

  • • High engineering time investment
  • • Ongoing maintenance required
  • • Slower feature development

Hybrid: Best of Both

Pros

  • • Automated runtime accuracy
  • • Manual design intent docs
  • • Fast setup + flexibility
  • • Cover gaps (future-state, external APIs)

Cons

  • • Two tools to maintain
  • • Higher total cost
  • • Potential duplication

Our Recommendation

For most teams: Start with a modern cloud catalog (Atlan or Select Star) for fast time-to-value. Add Datadef for architecture documentation and design intent that automated tools can't capture.

For teams with strong engineering resources and time: Build on OpenLineage + DataHub for vendor independence and full customization. Budget 2-3 months for initial setup.

3. Lineage Architecture Patterns

A typical lineage architecture has three layers: data sources (systems to capture from), metadata storage (where lineage is stored), and visualization layer (how users consume lineage).

Typical Lineage Architecture

Layer 1: Data Sources (Extraction)

Warehouses

Query logs from Snowflake, BigQuery, Redshift

ETL/ELT

dbt manifests, Airflow DAGs, Spark lineage

BI Tools

Looker API, Tableau Metadata API

Ingestion Pipeline

Layer 2: Metadata Storage (Processing)

Graph DB

Neo4j for relationship queries

Relational DB

Postgres for structured metadata

Managed Catalog

SaaS backend (Atlan, Collibra)

API / GraphQL

Layer 3: Visualization (Consumption)

Web UI

Catalog tool interface for browsing

Embedded

Lineage in BI tools, notebooks

API Access

Programmatic queries for automation

Metadata Storage Options

Graph Database (Neo4j, Amazon Neptune)

Best for complex lineage queries (find all paths, multi-hop traversals)

✓ Pros: Fast relationship queries, natural fit for lineage

✗ Cons: More complex to operate, fewer devs know it

Relational DB (Postgres, MySQL)

Good for structured metadata with simpler queries

✓ Pros: Well-known, easy to query, standard tooling

✗ Cons: Multi-hop lineage queries are slow

Managed Catalog (SaaS backend)

Commercial tools handle storage and optimization

✓ Pros: Zero maintenance, optimized for scale

✗ Cons: Vendor lock-in, no direct DB access

Ingestion Patterns

Pull (Scheduled Extraction)

Periodic jobs extract metadata from source systems

• Schedule: Every 1-24 hours via cron/Airflow

• Good for: Batch systems, BI tools, warehouses

• Latency: Minutes to hours behind real-time

Push (Event-Driven)

Systems emit lineage events in real-time

• Method: OpenLineage events via Kafka/HTTP

• Good for: Streaming pipelines, Spark, Airflow

• Latency: Near real-time (seconds)

Hybrid (Both)

Use push for pipelines, pull for BI/warehouses

• Best of both worlds: real-time + comprehensive

4. Automated Lineage Capture Methods

There are three main methods for automatically capturing lineage: query log parsing, metadata API extraction, and manifest ingestion. Modern tools use all three to build comprehensive lineage.

Method 1: Query Log Parsing (Warehouses)

Query log parsing extracts SQL queries from data warehouse logs, parses them to identify tables and columns, and infers lineage relationships. This is the most powerful method for capturing warehouse-level lineage.

How It Works

  1. 1. Connect to warehouse audit logs
  2. 2. Extract SQL queries executed by users
  3. 3. Parse SQL to identify source/target tables
  4. 4. Build lineage graph from parsed queries

Pros

  • • Captures actual runtime lineage
  • • No code changes required
  • • Column-level accuracy possible
  • • Covers ad-hoc queries too

Cons

  • • Complex SQL hard to parse
  • • Dynamic SQL may be missed
  • • Historical data only (not predictive)
  • • Query log access required

Supported Warehouses

✅ Snowflake

Query via: SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY

Column-level: ✅ (via ACCESS_HISTORY)

✅ BigQuery

Query via: INFORMATION_SCHEMA.JOBS

Column-level: ✅ (with query parsing)

✅ Redshift

Query via: STL_QUERY, STV_STATEMENTTEXT

Column-level: ⚠️ (limited)

✅ Databricks

Query via: system.access.audit

Column-level: ✅ (Unity Catalog)

Example: Snowflake Query Log Access
-- 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;

Method 2: Metadata API Extraction (BI Tools)

BI tools and orchestrators expose REST APIs for extracting metadata including dashboards, reports, and their data sources. This captures the consumption layer of your data stack.

Looker

LookML API + Metadata API

Extracts: Explores, views, fields, dashboards

Tableau

Metadata API (GraphQL)

Extracts: Workbooks, datasources, columns

Power BI

REST API + Scanner API

Extracts: Reports, datasets, dataflows

Example: Looker Metadata Extraction
# 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}")

Method 3: Manifest Ingestion (dbt, Airflow)

Transformation tools like dbt and Airflow generate metadata files (manifests, DAGs) that describe transformations. Parsing these provides perfect transformation-layer lineage.

dbt Manifest

dbt generates manifest.json containing all models, sources, tests, and their dependencies.

✓ Column-level lineage built-in

✓ Test metadata included

✓ Documentation strings captured

✓ Perfect DAG representation

Airflow DAGs

Parse Airflow DAG Python files to extract task dependencies and data flows.

✓ Task-level dependencies

✓ Operator types (SQL, Python, etc)

✓ Schedule information

✓ OpenLineage events for runs

Example: dbt Manifest Parsing
# 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. Tool Integration Examples

Here are specific setup instructions for integrating lineage with popular tools in the modern data stack.

Snowflake Query Log Integration

Setup Steps

  1. 1
    Grant access to ACCOUNT_USAGE schema
    GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE lineage_role;
  2. 2
    Query QUERY_HISTORY for SQL statements
    SELECT query_text, database_name, schema_name
    FROM snowflake.account_usage.query_history
    WHERE query_type IN ('SELECT', 'INSERT', 'MERGE')
  3. 3
    Optional: Use ACCESS_HISTORY for column-level lineage
    SELECT * FROM snowflake.account_usage.access_history
    WHERE query_start_time >= DATEADD(day, -7, CURRENT_TIMESTAMP());

Pro Tip: ACCESS_HISTORY provides perfect column-level lineage but requires Enterprise Edition. Query logs alone give table-level lineage on all editions.

dbt Manifest Integration

Setup Steps

  1. 1
    Generate manifest after dbt run
    dbt run
    # Generates target/manifest.json automatically
  2. 2
    Upload manifest to lineage tool (via API or S3)
    # 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
    Automate in CI/CD

    Add manifest upload to your dbt deployment script

Best Practice: Most catalog tools (Atlan, Select Star, DataHub) have native dbt integrations. Use their plugins instead of building custom upload scripts.

OpenLineage + Airflow Integration

Setup Steps

  1. 1
    Install OpenLineage Airflow plugin
    pip install openlineage-airflow
  2. 2
    Configure OpenLineage backend in airflow.cfg
    [openlineage]
    transport = http://marquez-api:5000
    namespace = prod-data-pipelines
  3. 3
    Lineage automatically emitted on task execution

    No DAG code changes required—lineage sent via OpenLineage events

Supported Operators: SQLExecuteQueryOperator, PythonOperator, BigQueryOperator, SnowflakeOperator, and more.

See OpenLineage docs for full list.

6. Code Examples & Scripts

Example: Python Script to Extract Snowflake Lineage

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()

Example: Airflow DAG for Scheduled Lineage Extraction

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. Frequently Asked Questions

How do you implement data lineage?

To implement data lineage: 1) Define scope and objectives, 2) Choose tools (automated catalog, open source, or manual), 3) Design architecture (metadata storage, ingestion, visualization), 4) Set up automated capture (query logs, APIs, manifests), 5) Integrate with data stack (warehouses, ETL, BI), 6) Validate accuracy, 7) Enable governance workflows, 8) Train users. Timeline: 1-3 months for modern tools, 3-6 months for enterprise platforms.

What is the best way to automate data lineage?

Best automation methods: 1) Query log parsing for warehouses (Snowflake, BigQuery, Redshift) extracts SQL to infer lineage, 2) Metadata API extraction from BI tools (Looker, Tableau) via REST APIs, 3) Manifest ingestion from dbt (manifest.json parsing), 4) OpenLineage instrumentation in Airflow/Spark for runtime events. Modern tools like Atlan and Select Star automate all of these methods.

How long does it take to implement data lineage?

Implementation timeline varies by approach: Modern cloud catalogs (Atlan, Select Star) take 1-4 weeks for initial setup. Enterprise platforms (Informatica, Collibra) require 2-6 months with consulting. Open-source tools (DataHub, OpenLineage) need 1-3 months with engineering resources. Visual documentation tools (Datadef) provide instant results but require manual maintenance.

What tools are needed to implement data lineage?

Essential tools: 1) Lineage platform (Atlan, Collibra, or DataHub), 2) Metadata extractors for your stack (dbt, Airflow, Looker connectors), 3) Query log access to warehouses (Snowflake ACCOUNT_USAGE, BigQuery INFORMATION_SCHEMA), 4) Orchestration for scheduled metadata refresh, 5) Optional: OpenLineage for vendor-neutral instrumentation, visual tools like Datadef for documentation.

Start implementing

Skip weeks of complex setup and create professional lineage diagrams in minutes with AI-powered automation.