Guia de implementação

Como implementar data lineage: guia passo a passo

Do planejamento à produção: padrões de arquitetura, captura automática, setup de ferramentas e boas práticas para Snowflake, BigQuery, dbt, Airflow e Looker.

25 min de leituraPara data & platform engineersCom exemplos de código

📚 Precisa de recomendações de ferramentas? Veja nosso comparativo:

Melhores ferramentas de data lineage (comparativo 2025)

1. Roadmap de implementação em 8 passos

Implementar data lineage é um projeto multifase: 1-3 meses com ferramentas modernas, 3-6 meses com plataforma enterprise. Siga esta roadmap para um rollout sem surpresas.

1

Definir escopo e objetivos

Duração: 1-2 semanas

Alinhe stakeholders e casos de uso claros. Assim você constrói a solução certa para a organização.

Ações-chave
  • Mapeie stakeholders: data engineers, analistas, compliance, negócio
  • Priorize casos de uso: compliance (LGPD/SOX), impacto, troubleshooting, documentação
  • Defina o perímetro: sistemas cobertos (warehouse, ETL, BI), granularidade (tabela vs coluna)
  • Métricas de sucesso: % de cobertura, tempo de análise de impacto, adoção de usuários
Casos de uso típicos
  • Compliance: rastrear campos PII/sensíveis para LGPD/CCPA
  • Análise de impacto: "Se eu mudar esta tabela, o que quebra?"
  • Root cause: "Por que este dashboard está errado?"
  • Migrações: entender dependências antes de migrar um sistema
  • Onboarding: ajudar novos membros a entender os fluxos
Dica

Comece com um único caso de uso de alto valor (compliance ou impacto). Prove valor rápido e depois amplie o escopo.

2

Escolher a abordagem

Duração: ~1 semana

Comprar, construir ou híbrido? O trade-off é tempo, custo e manutenção.

Buy: catálogo moderno

Ferramentas: Atlan, Select Star, Metaphor

Custo: $20-80k/ano

Setup: 1-4 semanas

Ideal para: times mid-market (10-50 pessoas) em stack moderno

Build: open source

Ferramentas: OpenLineage, DataHub, Marquez

Custo: $0 software, $50-150k/ano de esforço

Setup: 1-3 meses

Ideal para: times com forte engenharia e necessidade de customização

Híbrido: auto + manual

Ferramentas: Atlan/DataHub + Datadef

Custo: $20-80k/ano + $0-30k

Setup: 2-6 semanas

Ideal para: combinar precisão runtime + documentação de design

Grade de decisão

Escolha um catálogo moderno se quer velocidade e tem orçamento. Escolha open source se quer independência e tem devs disponíveis. Escolha híbrido se quer precisão runtime + documentação de arquitetura.

Veja nosso comparativo completo para detalhes.

3

Desenhar a arquitetura de lineage

Duração: 1-2 semanas

Desenhe como coletar, armazenar e expor metadados. Veja Padrões de arquitetura para detalhes.

Decisões-chave
  • Storage: Graph DB (Neo4j), relacional (Postgres) ou catálogo gerenciado
  • Ingestion: Pull agendado vs Push event-driven (OpenLineage)
  • Granularidade: nível tabela (mais simples) vs coluna (mais preciso)
  • Visualização: Web UI vs embutido (BI, notebooks)
4

Ativar a captura automática

Duração: 2-4 semanas

Configure os três métodos: parsing de logs SQL, extração via API, ingestão de manifest. Veja Captura automática.

1. Parsing de logs

Extrair SQL dos logs Snowflake/BigQuery/Redshift para inferir dependências

2. APIs de metadados

Puxar lineage das ferramentas de BI via REST/GraphQL

3. Ingestão de manifest

Parser do manifest.json do dbt e DAGs do Airflow

5

Integrar ao stack de dados

Duração: 2-4 semanas

Conecte todos os sistemas. É a parte mais longa porque cada sistema tem API e autenticação próprias.

Data warehouses

Snowflake, BigQuery, Redshift, Databricks — acesso a logs via JDBC/ODBC

Transformação

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

BI & Analytics

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

Dica: comece pelo sistema mais crítico (geralmente o warehouse) e valide a precisão antes de adicionar outras integrações. Veja Integrações para passos detalhados.

6

Validar e testar

Duração: 1-2 semanas

Teste a precisão do lineage end-to-end. Corrija gaps antes do rollout.

Checklist de validação
  • Traços end-to-end: rastreie 5-10 dashboards críticas até as fontes
  • Precisão em nível de coluna: verifique receitas, IDs de clientes
  • Conexões faltantes: ETL legado, arquivos Excel/CSV, scripts
  • Frescor: o lineage atualiza após mudança de schema?
  • Performance: aguenta 1000+ nós?

Problemas comuns

  • • SQL dinâmico difícil de parsear
  • • Lineage entre bancos faltando
  • • Fontes externas/API não capturadas
  • • Imports manuais Excel/CSV não rastreados
7

Ativar workflows de governança

Duração: 1-3 semanas

Conecte o lineage aos casos de negócio. É aqui que o valor aparece.

Compliance
  • Propagação de PII: marcar campos sensíveis e propagar downstream
  • Direito ao esquecimento: localizar todas as cópias de dados de clientes
  • Classificação: herdar labels de sensibilidade via lineage
Operações
  • Análise de impacto: ver quais dashboards quebram antes de mudar schema
  • Gestão de incidentes: chegar à causa de um incidente de qualidade de dados
  • Otimização de custos: identificar tabelas/views pouco usadas
8

Deploy e treinamento de usuários

Duração: 2-4 semanas (contínuo)

Lineage só gera valor se for usado. Conduza a adoção ativamente.

Plano de adoção
1
Piloto com power users: 5-10 data engineers/analistas no lançamento
2
Documente: guias para impacto, PII, troubleshooting
3
Treine por perfil: workshops de 1h para engenheiros, analistas, negócio
4
Exija análise de impacto: lineage obrigatório antes de mudança de schema
5
Meça adoção: usuários ativos mensais, consultas de lineage, uso de features
Métricas de sucesso

Acompanhe: Weekly active users (meta 50%+ do time de dados), tempo de análise de impacto (antes vs depois do lineage), incidentes evitados (mudanças bloqueadas antes da prod), requisições de compliance resolvidas (localização de PII).

2. Buy vs Build vs Híbrido

Primeira decisão estruturante: comprar, construir ou misturar. Cada opção tem trade-offs de custo, tempo e flexibilidade.

AbordagemFerramentasCustoPrazoEsforçoIdeal para
Buy: catálogo modernoAtlan, Select Star, Metaphor$20-80k/ano1-4 semanasBaixoTime-to-value rápido, stack moderno
Buy: plataforma enterpriseInformatica, Collibra$100-500k/ano3-6 mesesMédioEscala enterprise, governança forte
Build: open sourceDataHub, OpenLineage + Marquez$0 licença, $50-150k/ano de esforço1-3 mesesAltoTime de engenharia forte, necessidade de custom
Híbrido: auto + manualAtlan + Datadef$20-110k/ano2-6 semanasBaixo-médioPrecisão runtime + doc de arquitetura

Buy: catálogo moderno

Vantagens

  • • Time-to-value muito rápido
  • • Lineage automático desde o dia 1
  • • UX moderna que os analistas adoram
  • • Sem DevOps

Desvantagens

  • • Custo recorrente
  • • Lock-in no fornecedor
  • • Menos customização

Build: open source

Vantagens

  • • Sem licença
  • • Controle total e custom
  • • Independência de fornecedor
  • • Suporte da comunidade

Desvantagens

  • • Esforço de engenharia alto
  • • Manutenção contínua
  • • Evolução mais lenta

Híbrido: best of both

Vantagens

  • • Precisão runtime automatizada
  • • Documentação de intenção/design
  • • Setup rápido + flexibilidade
  • • Cobre lacunas (future state, APIs externas)

Desvantagens

  • • Dois tools para operar
  • • Custo total mais alto
  • • Risco de duplicidade

Nossa recomendação

Para a maioria dos times: comece com um catálogo cloud moderno (Atlan ou Select Star) para ganhar velocidade. Adicione Datadef para documentar arquitetura e intenção de design que ferramentas auto não capturam.

Para times com tempo e recursos de engenharia: construa em OpenLineage + DataHub para independência e custom. Reserve 2-3 meses de setup.

3. Padrões de arquitetura de lineage

Uma arquitetura típica tem três camadas: fontes (o que capturar), storage (onde o lineage vive) e visualização (como os usuários consomem).

Arquitetura tipo

Camada 1: Fontes (extração)

Warehouses

Logs de consultas Snowflake, BigQuery, Redshift

ETL/ELT

Manifest dbt, DAGs Airflow, lineage Spark

Ferramentas de BI

APIs do Looker, API de metadados do Tableau

Pipeline de ingestion

Camada 2: Storage de metadados (processing)

Graph DB

Neo4j para consultas de relação

DB relacional

Postgres para metadados estruturados

Catálogo gerenciado

Backend SaaS (Atlan, Collibra)

API / GraphQL

Camada 3: Visualização (consumo)

Web UI

Interface de catálogo para navegar

Embutido

Lineage dentro de BI/notebooks

Acesso API

Consultas programáticas para automação

Opções de storage

Graph DB (Neo4j, Amazon Neptune)

Ideal para consultas de relações complexas

✓ Prós: consultas rápidas, modelo natural para lineage

✗ Contras: operação mais complexa, skills menos comuns

DB relacional (Postgres, MySQL)

Bom para metadados estruturados e simples

✓ Prós: conhecido, fácil de consultar, tooling padrão

✗ Contras: consultas multi-hop lentas

Catálogo gerenciado (SaaS)

A ferramenta cuida de storage e otimização

✓ Prós: zero manutenção, otimizado para escala

✗ Contras: lock-in, sem acesso direto ao DB

Padrões de ingestion

Pull (extração agendada)

Jobs periódicos que extraem metadados

• Frequência: a cada 1-24h via cron/Airflow

• Ideal para: sistemas batch, BI, warehouses

• Latência: minutos a horas

Push (event-driven)

Sistemas emitem eventos de lineage em tempo real

• Método: eventos OpenLineage via Kafka/HTTP

• Ideal para: streaming, Spark, Airflow

• Latência: segundos

Híbrido (ambos)

Push para pipelines, pull para BI/warehouses

• Combina tempo real + cobertura ampla

4. Métodos de captura automática

Três métodos principais: parsing de logs SQL, APIs de metadados e ingestão de manifest. Ferramentas modernas combinam os três.

Método 1: parsing de logs (warehouses)

Extraímos as consultas dos logs do warehouse, fazemos parsing para identificar fontes e destinos e construímos o grafo. É o método mais poderoso para o layer de warehouse.

Como funciona

  1. 1. Conexão aos logs de auditoria
  2. 2. Extração das consultas SQL
  3. 3. Parsing para encontrar tabelas fonte/destino
  4. 4. Construção do grafo

Vantagens

  • • Captura o runtime real
  • • Sem mudança de código
  • • Possível precisão em nível de coluna
  • • Cobre consultas ad hoc

Limitações

  • • SQL complexo para parsear
  • • SQL dinâmico às vezes ausente
  • • Somente histórico (não preditivo)
  • • Requer acesso aos logs

Warehouses suportados

✅ Snowflake

Query via: SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY

Nível coluna: ✅ (via ACCESS_HISTORY)

✅ BigQuery

Query via: INFORMATION_SCHEMA.JOBS

Nível coluna: ✅ (com parsing)

✅ Redshift

Query via: STL_QUERY, STV_STATEMENTTEXT

Nível coluna: ⚠️ (limitado)

✅ Databricks

Query via: system.access.audit

Nível coluna: ✅ (Unity Catalog)

Exemplo: acesso aos logs do Snowflake
-- Extrair lineage dos logs do Snowflake
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étodo 2: APIs de metadados (BI)

Ferramentas de BI e orquestradores expõem APIs REST/GraphQL para recuperar dashboards, relatórios e fontes. Assim você cobre a camada de consumo.

Looker

LookML API + Metadata API

Extrai: explores, views, fields, dashboards

Tableau

Metadata API (GraphQL)

Extrai: workbooks, datasources, colunas

Power BI

REST API + Scanner API

Extrai: relatórios, datasets, dataflows

Exemplo: extração Looker
# Python: extrair lineage do Looker via SDK
import looker_sdk

sdk = looker_sdk.init40()

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

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

Método 3: ingestão de manifest (dbt, Airflow)

dbt e Airflow geram metadados (manifests, DAGs) descrevendo as transformações. Parseando-os você obtém um lineage de transformação perfeito.

Manifest do dbt

O dbt gera manifest.json com todos os modelos, fontes, testes e dependências.

✓ Lineage em nível de coluna embutido

✓ Metadados de testes incluídos

✓ Descrições capturadas

✓ DAG preciso

DAGs do Airflow

Parseie os arquivos Python dos DAGs para extrair dependências e fluxos.

✓ Dependências entre tarefas

✓ Tipos de operadores

✓ Informações de schedule

✓ Eventos OpenLineage nos runs

Exemplo: parsing do manifest do dbt
# Python: parsear o manifest.json do dbt para lineage
import json

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

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']}")
        
        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. Exemplos de integração

Passos concretos para conectar as principais ferramentas do stack moderno.

Integração Snowflake (query logs)

Passos

  1. 1
    Dar acesso a ACCOUNT_USAGE
    GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE lineage_role;
  2. 2
    Consultar QUERY_HISTORY
    SELECT query_text, database_name, schema_name
    FROM snowflake.account_usage.query_history
    WHERE query_type IN ('SELECT', 'INSERT', 'MERGE')
  3. 3
    Opção: ACCESS_HISTORY para nível de coluna
    SELECT * FROM snowflake.account_usage.access_history
    WHERE query_start_time >= DATEADD(day, -7, CURRENT_TIMESTAMP());

Dica: ACCESS_HISTORY dá precisão em coluna mas exige edição Enterprise. Logs sozinhos dão nível de tabela em todas as edições.

Integração do manifest do dbt

Passos

  1. 1
    Gerar o manifest após dbt run
    dbt run
    # Gera target/manifest.json automaticamente
  2. 2
    Subir o manifest na ferramenta de lineage
    # Upload para API do catálogo
    curl -X POST https://catalog.example.com/api/dbt/manifest   -H "Authorization: Bearer $API_KEY"   --data-binary @target/manifest.json
  3. 3
    Automatizar no CI/CD

    Inclua o upload do manifest no deploy do dbt

Boas práticas: a maioria dos catálogos (Atlan, Select Star, DataHub) tem integrações nativas com dbt. Use os plugins deles em vez de scripts próprios.

OpenLineage + Airflow

Passos

  1. 1
    Instalar o plugin OpenLineage Airflow
    pip install openlineage-airflow
  2. 2
    Configurar o backend no airflow.cfg
    [openlineage]
    transport = http://marquez-api:5000
    namespace = prod-data-pipelines
  3. 3
    Lineage emitido automaticamente na execução

    Sem mudança de código nos DAGs — eventos são enviados via OpenLineage

Operadores suportados: SQLExecuteQueryOperator, PythonOperator, BigQueryOperator, SnowflakeOperator etc.

Veja a documentação do OpenLineage para a lista completa.

6. Exemplos de código

Exemplo: script Python para lineage no Snowflake

import snowflake.connector
import json
from collections import defaultdict

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

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)

lineage_graph = defaultdict(list)

for row in cursor:
    query_id, query_text, db, schema, user, timestamp = row
    
    if 'INSERT INTO' in query_text.upper():
        target = extract_table_name(query_text, 'INSERT INTO')
        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)
            })

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

print(f"Lineage extraído para {len(lineage_graph)} tabelas fonte")
conn.close()

Exemplo: DAG Airflow para extrair lineage

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

def extract_snowflake_lineage():
    """Extrai lineage do Snowflake e envia para o catálogo"""
    lineage_data = get_snowflake_lineage()
    
    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"Enviadas {len(lineage_data)} arestas de lineage")

def extract_dbt_lineage():
    """Parsa o manifest do dbt e envia"""
    with open('/dbt/target/manifest.json') as f:
        manifest = json.load(f)
    
    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='Extração diária de metadados de lineage',
    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

Como implementar data lineage?

1) Escopo + objetivos, 2) ferramentas (catálogo, open source, manual), 3) arquitetura (storage, ingestion, visualização), 4) captura automática (logs, APIs, manifests), 5) integração no stack (warehouse, ETL, BI), 6) validação, 7) governança, 8) treinamento. Prazo: 1-3 meses com ferramentas modernas, 3-6 meses com plataforma enterprise.

Qual o melhor jeito de automatizar?

1) Parsing de logs SQL (Snowflake, BigQuery, Redshift), 2) APIs de metadados (Looker, Tableau), 3) manifests do dbt, 4) OpenLineage para Airflow/Spark. Atlan ou Select Star automatizam esses métodos.

Quanto tempo leva?

Catálogos cloud: 1-4 semanas. Plataformas enterprise: 2-6 meses. Open source: 1-3 meses. Ferramentas visuais (Datadef): imediato mas manutenção manual.

Quais ferramentas são necessárias?

1) Plataforma de lineage (Atlan, Collibra, DataHub), 2) extratores para seu stack (dbt, Airflow, Looker/Tableau), 3) acesso aos logs SQL (ACCOUNT_USAGE, INFORMATION_SCHEMA), 4) orquestração para refresh, 5) opcional: OpenLineage e documentação visual (Datadef).

Hora de agir

Ganhe semanas de setup e gere diagramas de lineage profissionais em minutos com IA.