Linhagem de dados do PostgreSQL: Linhagem em nível de coluna a partir de views e SQL

linhagem de dados do PostgreSQL é o mapa em nível de coluna de como os dados se movem pelas suas views, CTEs e DMLs do PostgreSQL: quais colunas da tabela base alimentam cada coluna de view ou relatório e quais junções, filtros, conversões e agregações transformam os dados ao longo do caminho. O próprio catálogo do PostgreSQL informa que os objetos dependem uns dos outros — pg_depend Os registros indicam que uma view faz referência a uma tabela, mas não dizem nada sobre como as colunas se transformam. Construir uma linhagem real significa analisar o próprio SQL, e é exatamente isso que estamos fazendo. Gudu SQLFlow faz isso, com um analisador de dialeto PostgreSQL dedicado em vez de uma gramática ANSI genérica.

Experimente em 30 segundos: Cole qualquer consulta ou definição de visualização do PostgreSQL no Visualizador de linhagem SQLFlow gratuito e obtenha um diagrama de linhagem interativo em nível de coluna. A versão em nuvem possui um plano gratuito.

Por que o pg_depend não consegue responder a perguntas sobre linhagem?

O PostgreSQL mantém registros de dependências meticulosos. pg_depend e pg_rewrite saiba que receita_regional não pode ser descartado enquanto fizer referência a v_pedidos_enriquecidos, e esquema_de_informação As visualizações expõem quais tabelas uma visualização acessa. Isso é o rastreamento de dependências em nível de objeto, criado para GOTEJAR ... CASCATA Segurança — não linhagem.

O que o catálogo não pode lhe dizer: quais colunas específicas alimentam o sistema. receita, se quantia foi lançado ou agregado no caminho, seja status filtra o resultado sem nunca aparecer nele, e mostra como o caminho completo se parece quando as visualizações se acumulam em três ou quatro níveis de profundidade. Responder a perguntas como "de onde vem esse número?" ou "o que acontece se eu remover essa coluna?" exige reconstruir a lógica de transformação a partir do texto SQL armazenado nas definições de visualização — um problema de análise sintática, não uma consulta de catálogo.

Como o SQLFlow constrói a linhagem de dados do PostgreSQL

  1. Ingerir SQL. Cole consultas, carregue arquivos de script, conecte-se ao PostgreSQL via JDBC para obter DDL e visualizar definições diretamente ou importe um manifesto dbt para projetos dbt-on-Postgres.
  2. Analisar com uma gramática específica do PostgreSQL. O SQLFlow é construído sobre o Analisador SQL Geral (GSP), um front-end comercial para compilador SQL desenvolvido desde meados dos anos 2000 e validado com aproximadamente 13.600 conjuntos de testes por dialeto. Seu analisador sintático PostgreSQL lida com as construções próprias do dialeto — CTEs graváveis, INSERIR ... EM CASO DE CONFLITO, o :: Operador de conversão de tipo, herança e particionamento de DDL — e suas expansões de resolvedor semântico SELECIONE *, resolve referências de coluna por meio de CTEs, subconsultas e definições de visualização e, em seguida, extrai relacionamentos de origem para destino em nível de coluna.
  3. Visualize e exporte. O resultado é um diagrama interativo que você pode rastrear a montante e a jusante de qualquer coluna, exportável como JSON, CSV ou PNG, ou consultável por meio de uma API REST.

O PostgreSQL é um dos 39 dialetos para os quais o SQLFlow fornece analisadores sintáticos — incluindo os mecanismos da família Postgres: Greenplum, Amazon Redshift e EDB Postgres, cada um com seu próprio analisador sintático, pois cada um divergiu do PostgreSQL principal de maneiras relevantes para um mecanismo de linhagem. A metodologia completa é abordada no documento. Visão geral da ferramenta de linhagem de dados SQL.

Rastreando uma cadeia de visualização aninhada até as tabelas base.

A lógica é acumulada por meio de pilhas de visualização (view-on-view) no PostgreSQL, e é nesse ponto que o rastreamento manual de linhagem falha. Considere uma cadeia de dois níveis:

CRIAR VIEW v_orders_enriched AS SELECT o.order_id, o.customer_id, o.amount::numeric(12,2) AS amount, c.region FROM orders o JOIN customers c ON c.customer_id = o.customer_id WHERE o.status = 'shipped'; CRIAR VIEW v_region_revenue AS SELECT region, SUM(amount) AS revenue FROM v_orders_enriched GROUP BY region;

Pergunte ao SQLFlow onde v_region_revenue.revenue vem de e resolve toda a cadeia: receita é SOMA() sobre v_orders_enriched.amount, que é um numérico(12,2) elenco de pedidos.quantidadeO diagrama mostra cada etapa — tabela base, visão intermediária, agregado — como um caminho explorável, não como um palpite superficial. Ele também revela o que uma leitura ingênua não percebe: pedidos.status nunca aparece na saída, mas cada valor de receita depende do ONDE o.status = 'enviado' filtro. O SQLFlow registra isso como linhagem indireta (mais detalhes abaixo).

A mesma resolução funciona em qualquer profundidade. Em um esquema real onde as visualizações se empilham em cinco níveis de profundidade e metade delas usa SELECIONE *O SQLFlow expande os asteriscos com base nas definições reais das tabelas obtidas via JDBC, de modo que a linhagem permaneça precisa em nível de coluna, mesmo quando o texto SQL não nomeia as colunas.

Construções do PostgreSQL que quebram analisadores sintáticos genéricos

Ferramentas que tratam o PostgreSQL como "aproximadamente ANSI SQL" falham justamente nas instruções que carregam o maior fluxo de dados. Todas essas instruções são tratadas pelo analisador de dialeto PostgreSQL do SQLFlow:

ConstruirPor que isso é importante para a linhagem
CTEs graváveis (COM ... INSERIR/ATUALIZAR/EXCLUIR ... RETORNANDO)Uma única instrução lê e escreve: a saída DML da CTE alimenta a consulta externa. A linhagem deve conectar a tabela modificada, a RETORNANDO colunas e o objetivo final em um gráfico.
INSERIR ... EM CASO DE CONFLITO, ATUALIZARAs operações de upsert encaminham os dados por dois caminhos — o caminho de inserção e o caminho de atualização através do EXCLUÍDO pseudo-tabela. Ambas são fluxos de colunas reais para a tabela de destino.
Herança de tabelas e particionamento declarativoConsultas em uma tabela pai leem implicitamente suas tabelas filhas. O SQLFlow analisa o DDL de herança e particionamento para que a linhagem seja anexada corretamente no nível pai, em vez de fragmentada por partição.
CTEs encadeadas e visualizações aninhadasAs referências de coluna devem ser resolvidas em todas as camadas intermediárias, incluindo as CTEs que fazem referência a CTEs anteriores, até chegar às tabelas base físicas.
:: colunas de elenco e expressãoCada coluna de saída é mapeada para suas fontes por meio das funções e conversões aplicadas, para que você possa ver não apenas onde um valor veio de mas O que aconteceu com ele?.

Linhagem direta versus indireta: as colunas de filtro que você perderia se não as visse.

O SQLFlow distingue linhagem direta — valores de coluna que fluem fisicamente para uma saída — de linhagem indireta (de impacto) — colunas usadas em ONDE cláusulas, JUNTAR condições e AGRUPAR POR teclas que moldam o resultado sem chegar até ele. No exemplo acima, pedidos.quantidade é linhagem direta para receita; pedidos.status e ambos id_do_cliente As chaves de junção são indiretas.

A distinção pode ser alterada no diagrama e modifica decisões reais. Se você planeja alterar o domínio de pedidos.statusA linhagem direta indica que nada depende dela; a linhagem indireta mostra todos os relatórios de receita que filtra silenciosamente. A maioria das ferramentas de linhagem não modela esse tipo de relacionamento.

De uma única consulta a um ambiente PostgreSQL completo.

Para uma única cadeia de visualização complexa, o nível gratuito do SQLFlow Cloud é suficiente: colar, analisar, detalhar. Além disso:

  • Varreduras completas do banco de dados: Conecte-se via JDBC (ou use o extrator de metadados Grabit) para obter todas as definições de visualização e objeto e construir um repositório de linhagem persistente. Implantações corporativas realizam varreduras em lote em conjuntos de mais de 100 bancos de dados e mais de um milhão de colunas, com novas varreduras incrementais.
  • Integração de catálogo: Os adaptadores de exportação enviam a linhagem em nível de coluna para o DataHub, Microsoft Purview e OpenMetadata, permitindo que o SQLFlow funcione como o mecanismo de linhagem por trás do catálogo que você já utiliza.
  • Ambientes isolados por ar: SQLFlow no local Executa em Docker ou Kubernetes dentro da sua rede por $500/mês ou $4.800 (pagamento único) por tipo de banco de dados, instalável em dois servidores. O texto SQL nunca sai da sua infraestrutura.
  • Privacidade por design: O SQLFlow realiza apenas análises estáticas do código SQL e dos metadados do esquema. Ele nunca lê as linhas das suas tabelas.

A partir da versão 8.2.3, você também pode consultar o gráfico resultante em linguagem natural — “quais visualizações dependem de pedidos.quantidade?” — com cada tabela e coluna na resposta validada em relação à linhagem analisada antes de ser exibida.

E quanto às ferramentas de linhagem PostgreSQL de código aberto?

Analisadores de código aberto como linhagem sql e sqlglot São realmente boas em extrair a linhagem de tabelas e colunas básicas de consultas individuais e, para um punhado de instruções SELECT simples, podem ser tudo o que você precisa. As lacunas aparecem no PostgreSQL de produção: resolução SELECIONE * através de cadeias de visualização requer metadados de esquema ativos; CTEs graváveis e EM CONFLITO As operações de upsert exigem gramáticas que correspondam exatamente ao dialeto; a linhagem indireta por meio de filtros e chaves de junção geralmente não é modelada; e extrair a linhagem não é o mesmo que visualizá-la, armazená-la e compará-la em milhares de objetos. Se você estiver avaliando, execute sua pilha de visualização mais profunda e sua operação de upsert mais complexa em ambas e compare os gráficos.

Se o seu sistema operacional utiliza diferentes mecanismos de processamento, a mesma família de analisadores sintáticos os abrange com o mesmo formato de saída — consulte as páginas complementares para obter mais detalhes. linhagem de dados MySQL, Linhagem de dados Redshift, e linhagem de dados Greenplumou o base de conhecimento de linhagem de dados para conceitos.

Perguntas frequentes

O PostgreSQL possui linhagem de dados integrada?

Não. O PostgreSQL rastreia dependências em nível de objeto em pg_depend — quais visualizações fazem referência a quais tabelas — para fins de integridade, como GOTEJAR ... CASCATANão registra como as colunas são transformadas. A linhagem em nível de coluna precisa ser derivada da análise do SQL nas definições de visualização e nos scripts, que é o que o SQLFlow faz.

O SQLFlow precisa acessar os dados da minha tabela?

Não. O SQLFlow realiza análise estática do código SQL e, opcionalmente, lê metadados do esquema (definições de tabelas e colunas) para resolver referências. Ele nunca lê linhas. Na edição On-Premise, até mesmo o texto SQL permanece dentro da sua rede.

O SQLFlow consegue rastrear a linhagem por meio de CTEs graváveis e upserts com ON CONFLICT?

Sim. O analisador de dialeto do PostgreSQL lida com isso. COM ... INSERIR/ATUALIZAR/EXCLUIR ... RETORNANDO declarações e INSERIR ... EM CASO DE CONFLITO, ATUALIZAR, mapeando os fluxos de colunas de inserção e atualização para a tabela de destino.

Como são tratadas as tabelas particionadas e herdadas?

O SQLFlow analisa a herança do PostgreSQL e o DDL de particionamento declarativo, de modo que a linhagem das consultas em uma tabela pai seja anexada no nível pai, em vez de ser fragmentada em arestas por partição.

Como faço para obter a linhagem de um banco de dados PostgreSQL inteiro, e não apenas de uma consulta específica?

Conecte o SQLFlow ao banco de dados via JDBC ou extraia metadados com o ingestor Grabit. O SQLFlow coleta todas as definições de DDL e de visualização, analisa-as em conjunto e mantém um repositório de linhagem persistente e atualizado incrementalmente — escalável para ambientes com mais de 100 bancos de dados.

Qual o preço do SQLFlow?

O SQLFlow Cloud é gratuito a partir de um primeiro momento; contas premium custam £49,99/mês. O SQLFlow On-Premise custa £500/mês ou £4.800 (pagamento único) por tipo de banco de dados selecionado, mais £100/mês ou £1.000 (pagamento único) por tipo de banco de dados adicional.

Agora, rastreie sua linhagem do PostgreSQL.

Cole uma definição de visualização no visualizador gratuito e veja o gráfico em nível de coluna ou entre em contato conosco para analisarmos todo o seu ambiente PostgreSQL.