{"id":6748,"date":"2026-07-12T02:05:45","date_gmt":"2026-07-12T10:05:45","guid":{"rendered":"https:\/\/www.gudusoft.com\/data-lineage-examples\/"},"modified":"2026-07-13T19:03:45","modified_gmt":"2026-07-14T03:03:45","slug":"data-lineage-examples","status":"publish","type":"page","link":"https:\/\/www.gudusoft.com\/pt\/exemplos-de-linhagem-de-dados\/","title":{"rendered":"Exemplos de linhagem de dados: 6 cen\u00e1rios reais com SQL e diagramas"},"content":{"rendered":"<p>UM <strong>exemplo de linhagem de dados<\/strong> Mostra, para um trecho concreto de SQL, quais tabelas e colunas de origem alimentam quais colunas de sa\u00edda e por quais transforma\u00e7\u00f5es os dados passam ao longo do caminho. Os seis exemplos pr\u00e1ticos abaixo abrangem situa\u00e7\u00f5es que os engenheiros de dados realmente encontram: um simples SQL. <code>INSERIR-SELECIONAR<\/code>Este artigo apresenta uma transforma\u00e7\u00e3o multi-CTE, uma cadeia de visualiza\u00e7\u00f5es, um procedimento armazenado com SQL din\u00e2mico, uma cadeia de modelos dbt e um fluxo ETL entre bancos de dados. Cada exemplo fornece o SQL e, em seguida, descreve exatamente como \u00e9 o grafo de linhagem correspondente.<\/p>\n\n\n\n<div class=\"gd-stats\"><div class=\"gd-stat\"><b>6<\/b><span>Exemplos pr\u00e1ticos, cada um com SQL real.<\/span><\/div><div class=\"gd-stat\"><b>39<\/b><span>dialetos SQL, cada um com um analisador sint\u00e1tico dedicado.<\/span><\/div><div class=\"gd-stat\"><b>N\u00edvel da coluna<\/b><span>granularidade, n\u00e3o apenas em n\u00edvel de tabela<\/span><\/div><div class=\"gd-stat\"><b>Direto + indireto<\/b><span>bordas, ambas rastreadas<\/span><\/div><\/div>\n\n\n\n<div class=\"wp-block-group gd-callout is-layout-constrained\"><div class=\"wp-block-group__inner-container\">\n\n<p><strong>Todos os exemplos nesta p\u00e1gina s\u00e3o reproduz\u00edveis:<\/strong> Cole o SQL no <a href=\"https:\/\/sqlflow.gudusoft.com\/?utm_source=gudusoft&amp;utm_medium=website&amp;utm_campaign=data-lineage-examples\" target=\"_blank\" rel=\"noreferrer noopener\">Visualizador de linhagem SQLFlow gratuito<\/a> e voc\u00ea obt\u00e9m o diagrama interativo descrito abaixo.<\/p>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Como ler estes exemplos<\/h2>\n\n\n\n<p><strong class=\"gd-lead-in\">Cada grafo de linhagem cont\u00e9m dois tipos de arestas.<\/strong> UM <strong>direto<\/strong> Uma &quot;borda&quot; significa que os dados fluem fisicamente de uma coluna de origem para uma coluna de destino, possivelmente por meio de uma fun\u00e7\u00e3o ou agrega\u00e7\u00e3o. <strong>indireto<\/strong> borda significa uma coluna que molda o resultado sem atingir o limite: colunas usadas em <code>ONDE<\/code>, <code>JUNTAR<\/code>, e <code>AGRUPAR POR<\/code> cl\u00e1usulas. Ignorar as arestas indiretas \u00e9 o que leva ao fracasso da an\u00e1lise de impacto, pois remover uma coluna de filtro quebra um relat\u00f3rio t\u00e3o certamente quanto remover uma coluna selecionada. Se esses termos s\u00e3o novos para voc\u00ea, comece com <a href=\"https:\/\/www.gudusoft.com\/pt\/o-que-e-linhagem-de-dados\/\">O que \u00e9 linhagem de dados?<\/a> e <a href=\"https:\/\/www.gudusoft.com\/pt\/linhagem-de-dados-em-nivel-de-coluna\/\">Como funciona a linhagem em n\u00edvel de coluna<\/a>, depois volte.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo 1: um exemplo simples de linhagem de dados INSERT-SELECT<\/h2>\n\n\n\n<p>O ponto de partida para qualquer discuss\u00e3o sobre linhagem: uma declara\u00e7\u00e3o que agrega dados em uma tabela de resumo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>INSERT INTO sales_summary (region, total_amount) SELECT c.region, SUM(o.amount) FROM orders o JOIN customers c ON o.customer_id = c.id WHERE o.status = &#039;completed&#039; GROUP BY c.region;<\/code><\/pre>\n\n\n\n<p>O gr\u00e1fico de linhagem possui tr\u00eas tabelas (<code>pedidos<\/code>, <code>clientes<\/code>, <code>resumo_de_vendas<\/code>) e estas arestas ao n\u00edvel da coluna:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Coluna alvo<\/th><th>Coluna de origem<\/th><th>Tipo de borda<\/th><th>Via<\/th><\/tr><\/thead><tbody>\n<tr><td><code>resumo_de_vendas.regi\u00e3o<\/code><\/td><td><code>clientes.regi\u00e3o<\/code><\/td><td>Direto<\/td><td>c\u00f3pia simples<\/td><\/tr>\n<tr><td><code>resumo_de_vendas.valor_total<\/code><\/td><td><code>pedidos.quantidade<\/code><\/td><td>Direto<\/td><td><code>SOMA()<\/code><\/td><\/tr>\n<tr><td><code>resumo_de_vendas.*<\/code><\/td><td><code>pedidos.status<\/code><\/td><td>Indireto<\/td><td><code>ONDE<\/code> filtro<\/td><\/tr>\n<tr><td><code>resumo_de_vendas.*<\/code><\/td><td><code>pedidos.id_do_cliente<\/code>, <code>clientes.id<\/code><\/td><td>Indireto<\/td><td><code>JUNTAR<\/code> doen\u00e7a<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p>Observe o que o gr\u00e1fico j\u00e1 mostra e que uma visualiza\u00e7\u00e3o em n\u00edvel de tabela n\u00e3o mostraria: <code>clientes.email<\/code> e todas as outras colunas intocadas n\u00e3o desempenham nenhum papel aqui, e <code>pedidos.status<\/code> \u00c9 importante mesmo que nunca apare\u00e7a na sa\u00edda. Muitas ferramentas de linhagem ignoram completamente essa \u00faltima aresta; o SQLFlow modela a linhagem direta e indireta como tipos de relacionamento separados e altern\u00e1veis.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo 2: transforma\u00e7\u00e3o multi-CTE<\/h2>\n\n\n\n<p>\u00c9 nos CTEs (Common Traded Events) que os diagramas de linhagem desenhados \u00e0 m\u00e3o come\u00e7am a se situar, pois cada CTE representa uma rela\u00e7\u00e3o tempor\u00e1ria pela qual o grafo deve passar sem perder o rastro das fontes originais.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>COM daily AS ( SELECT order_date, customer_id, SUM(amount) AS day_total FROM orders GROUP BY order_date, customer_id ), rated AS ( SELECT customer_id, day_total, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY day_total DESC) AS rn FROM daily ) SELECT customer_id, day_total AS best_day_revenue FROM rated WHERE rn = 1;<\/code><\/pre>\n\n\n\n<p>O gr\u00e1fico de linhagem \u00e9 renderizado. <code>di\u00e1rio<\/code> e <code>classificado<\/code> como n\u00f3s intermedi\u00e1rios, portanto, o caminho completo da coluna de interesse \u00e9: <code>pedidos.quantidade<\/code> \u2192 <code>SOMA()<\/code> \u2192 <code>total di\u00e1rio.dia<\/code> \u2192 <code>classificado.total_do_dia<\/code> \u2192 <code>melhor_receita_di\u00e1ria<\/code>A fun\u00e7\u00e3o de janela cria uma cadeia mais sutil: <code>agora<\/code> \u00e9 calculado a partir de <code>id_do_cliente<\/code> (parti\u00e7\u00e3o) e <code>total_do_dia<\/code> (pedindo), e ent\u00e3o <code>ONDE rn = 1<\/code> faz <code>agora<\/code> uma entrada indireta para cada coluna de sa\u00edda. Portanto, <code>pedidos.quantidade<\/code> influ\u00eancias <code>melhor_receita_di\u00e1ria<\/code> duas vezes: diretamente pela soma e indiretamente pela classifica\u00e7\u00e3o que decide qual linha permanece. Um resolvedor que s\u00f3 faz correspond\u00eancia de padr\u00f5es em nomes de colunas n\u00e3o consegue enxergar esse segundo caminho.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo 3: uma cadeia de vistas<\/h2>\n\n\n\n<p>Empilhamento de visualiza\u00e7\u00f5es. Em um data warehouse maduro, um relat\u00f3rio geralmente est\u00e1 a tr\u00eas ou quatro defini\u00e7\u00f5es de visualiza\u00e7\u00e3o de dist\u00e2ncia das tabelas f\u00edsicas, e a pergunta &quot;de onde realmente vem esse n\u00famero?&quot; exige percorrer toda a cadeia.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CRIAR VIEW v_active_customers AS SELECT id, name, email FROM customers WHERE status = &#039;active&#039;; CRIAR VIEW v_customer_revenue AS SELECT a.id, a.name, SUM(o.amount) AS revenue FROM v_active_customers a JOIN orders o ON o.customer_id = a.id GROUP BY a.id, a.name;<\/code><\/pre>\n\n\n\n<p>O gr\u00e1fico mostra <code>v_customer_revenue.revenue<\/code> tra\u00e7ando o contorno da vis\u00e3o de volta para <code>pedidos.quantidade<\/code>, com <code>status dos clientes<\/code> anexada como uma aresta indireta herdada do filtro da primeira visualiza\u00e7\u00e3o. Ela tamb\u00e9m exp\u00f5e algo \u00fatil na dire\u00e7\u00e3o oposta: <code>v_active_customers.email<\/code> \u00e9 selecionada pela primeira visualiza\u00e7\u00e3o, mas n\u00e3o \u00e9 consumida por nada posteriormente. Colunas mortas como essa s\u00e3o exatamente o que voc\u00ea deseja encontrar antes de uma limpeza ou migra\u00e7\u00e3o, e elas s\u00e3o invis\u00edveis no n\u00edvel da tabela. Quando as defini\u00e7\u00f5es de visualiza\u00e7\u00e3o usam <code>SELECIONE *<\/code>O SQLFlow expande a estrela em rela\u00e7\u00e3o ao esquema, de modo que cada coluna herdada ainda seja resolvida para sua origem f\u00edsica.<\/p>\n\n\n\n<div class=\"wp-block-group gd-panel-navy is-layout-constrained\"><div class=\"wp-block-group__inner-container\">\n\n<h2 class=\"wp-block-heading\">Exemplo 4: procedimento armazenado com SQL din\u00e2mico<\/h2>\n\n\n\n<p>Este \u00e9 o exemplo que diferencia as ferramentas de linhagem, pois o nome da tabela de destino sequer existe como texto literal no c\u00f3digo. Aqui est\u00e1 um procedimento do SQL Server que cria um snapshot mensal por meio de uma tabela tempor\u00e1ria e uma tabela montada dinamicamente. <code>INSERIR<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE PROCEDURE dbo.load_monthly_snapshot @month VARCHAR(7) AS BEGIN SELECT o.customer_id, SUM(o.amount) AS month_total INTO #monthly FROM dbo.orders o WHERE CONVERT(VARCHAR(7), o.order_date, 126) = @month GROUP BY o.customer_id; DECLARE @sql NVARCHAR(MAX) = N&#039;INSERT INTO dbo.snapshot_monthly (customer_id, month_total) &#039; + N&#039;SELECT customer_id, month_total FROM #monthly&#039;; EXEC sp_executesql @sql; END<\/code><\/pre>\n\n\n\n<p>O gr\u00e1fico de linhagem correto supera ambos os obst\u00e1culos: <code>pedidos.quantidade<\/code> \u2192 <code>SOMA()<\/code> \u2192 <code>#mensal.total_mensal<\/code> \u2192 <code>snapshot_monthly.month_total<\/code>, com <code>pedidos.data_do_pedido<\/code> como uma borda indireta atrav\u00e9s do <code>ONDE<\/code> cl\u00e1usula e a <code>@m\u00eas<\/code> par\u00e2metro rastreado como entrada para esse filtro. Para chegar l\u00e1, \u00e9 necess\u00e1rio um analisador sint\u00e1tico procedural T-SQL real (n\u00e3o um divisor de instru\u00e7\u00f5es), rastreamento de tabelas tempor\u00e1rias entre instru\u00e7\u00f5es e resolu\u00e7\u00e3o da string SQL passada para <code>sp_executesql<\/code>O SQLFlow possui analisadores sint\u00e1ticos procedurais dedicados para T-SQL do SQL Server e PL\/SQL do Oracle, resolve SQL din\u00e2mico dentro de procedimentos e, adicionalmente, renderiza um gr\u00e1fico de chamadas mostrando quais procedimentos invocam quais, de modo que a linhagem de procedimento para procedimento tamb\u00e9m fica vis\u00edvel. O SQL din\u00e2mico \u00e9 o ponto cego mais comum em ferramentas de linhagem; se voc\u00ea for avaliar qualquer ferramenta, teste-a primeiro com esse padr\u00e3o.<\/p>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo 5: cadeia de modelos dbt<\/h2>\n\n\n\n<p>O dbt fornece linhagem em n\u00edvel de modelo pronta para uso. <code>ref()<\/code>Mas a quest\u00e3o interessante \u00e9 no n\u00edvel da coluna: qual campo de origem alimenta qual coluna do data mart, por meio de qual etapa as renomea\u00e7\u00f5es s\u00e3o feitas?<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- models\/staging\/stg_orders.sql SELECT id AS order_id, customer_id, amount, status FROM {{ source(&#039;raw&#039;, &#039;orders&#039;) }} -- models\/marts\/fct_customer_revenue.sql SELECT customer_id, SUM(amount) AS lifetime_revenue FROM {{ ref(&#039;stg_orders&#039;) }} WHERE status = &#039;completed&#039; GROUP BY customer_id<\/code><\/pre>\n\n\n\n<p>Importe o manifesto dbt do projeto para o SQLFlow e o grafo resolver\u00e1 as refer\u00eancias parametrizadas em uma cadeia de colunas concreta: <code>raw.orders.quantidade<\/code> \u2192 <code>stg_orders.amount<\/code> \u2192 <code>SOMA()<\/code> \u2192 <code>fct_customer_revenue.lifetime_revenue<\/code>, com a renomea\u00e7\u00e3o <code>eu ia<\/code> \u2192 <code>id_do_pedido<\/code> preservado no salto de palco e <code>status<\/code> transportado como uma aresta indireta do filtro do datamart. Como o manifesto vincula os modelos aos objetos do data warehouse que eles criam, o mesmo grafo reconcilia a linhagem gerenciada pelo dbt com tudo o mais que interage com essas tabelas fora do dbt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo 6: ETL entre bancos de dados<\/h2>\n\n\n\n<p>Os mecanismos de processamento de im\u00f3veis abrangem v\u00e1rios aspectos. Um fluxo t\u00edpico: um banco de dados operacional do SQL Server \u00e9 extra\u00eddo para armazenamento em nuvem, carregado no ambiente de teste do Snowflake e, em seguida, transformado em um esquema anal\u00edtico. O processo de carregamento e transforma\u00e7\u00e3o se parece com isto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Snowflake COPY INTO staging.orders_raw FROM @s3_extract\/orders\/; INSERT INTO analytics.fct_orders (order_id, customer_id, amount_usd) SELECT r.order_id, r.customer_id, r.amount * fx.rate FROM staging.orders_raw r JOIN staging.fx_rates fx ON fx.currency = r.currency;<\/code><\/pre>\n\n\n\n<p>No lado do Snowflake, o gr\u00e1fico mostra <code>valor_em_d\u00f3lares<\/code> como uma coluna calculada com dois pais diretos, <code>pedidos_brutos.quantidade<\/code> e <code>fx_rates.rate<\/code>, unidos pela express\u00e3o aritm\u00e9tica, mais <code>moeda<\/code> como uma aresta indireta da condi\u00e7\u00e3o de jun\u00e7\u00e3o. Para abranger todo o pipeline, voc\u00ea alimenta o SQLFlow com ambos os lados em seus respectivos dialetos: a l\u00f3gica de extra\u00e7\u00e3o T-SQL analisada com o analisador do SQL Server e os scripts do Snowflake analisados com o analisador do Snowflake, de um total de 39 analisadores espec\u00edficos para cada dialeto. Em implanta\u00e7\u00f5es corporativas, os resultados s\u00e3o armazenados em um reposit\u00f3rio de linhagem persistente que realiza varreduras em lote de conjuntos de mais de 100 bancos de dados e mais de um milh\u00e3o de colunas, de modo que o panorama completo do SQL Server ao Snowflake reside em um \u00fanico gr\u00e1fico e pode ser exportado para o DataHub, Microsoft Purview ou OpenMetadata.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que todos os seis exemplos t\u00eam em comum?<\/h2>\n\n\n\n<p>Todos os gr\u00e1ficos acima foram derivados exclusivamente de texto SQL e metadados de esquema. Esse \u00e9 o m\u00e9todo principal por tr\u00e1s de tudo isso. <a href=\"https:\/\/www.gudusoft.com\/pt\/ferramenta-de-linhagem-de-dados-sql\/\">Linhagem de dados baseada em SQL<\/a>Como a l\u00f3gica de transforma\u00e7\u00e3o j\u00e1 reside no SQL, a an\u00e1lise est\u00e1tica desse SQL reconstr\u00f3i a linhagem sem agentes, sem acesso ao log de consultas e sem nunca ler uma linha dos seus dados. As diferen\u00e7as entre os exemplos residem apenas na complexidade da an\u00e1lise sint\u00e1tica, partindo de uma \u00fanica consulta. <code>INSERIR-SELECIONAR<\/code> para SQL din\u00e2mico dentro de um procedimento.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Exemplo<\/th><th>O que isso exercita<\/th><th>Parte dif\u00edcil<\/th><\/tr><\/thead><tbody>\n<tr><td>1. INSERIR-SELECIONAR<\/td><td>Bordas diretas versus indiretas<\/td><td>Modelagem <code>ONDE<\/code>\/<code>JUNTAR<\/code> colunas como linhagem<\/td><\/tr>\n<tr><td>2. Multi-CTE<\/td><td>Rela\u00e7\u00f5es intermedi\u00e1rias<\/td><td>Entradas de fun\u00e7\u00e3o de janela; caminho de filtro por classifica\u00e7\u00e3o<\/td><\/tr>\n<tr><td>3. Veja a cadeia<\/td><td>Defini\u00e7\u00f5es aninhadas<\/td><td>Expans\u00e3o estelar; identifica\u00e7\u00e3o de colunas mortas<\/td><\/tr>\n<tr><td>4. Procedimento armazenado<\/td><td>C\u00f3digo de procedimento<\/td><td>Tabelas tempor\u00e1rias e resolu\u00e7\u00e3o din\u00e2mica de SQL<\/td><\/tr>\n<tr><td>5. cadeia dbt<\/td><td>SQL com modelos<\/td><td>Resolvendo <code>ref()<\/code>\/<code>fonte()<\/code> para objetos reais<\/td><\/tr>\n<tr><td>6. ETL entre bancos de dados<\/td><td>V\u00e1rios dialetos<\/td><td>Consolidando gr\u00e1ficos por motor em um \u00fanico reposit\u00f3rio.<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<div class=\"wp-block-group gd-panel-navy gd-cta is-layout-constrained\"><div class=\"wp-block-group__inner-container\">\n\n<h2 class=\"wp-block-heading\">Consulte a linhagem para obter seu pr\u00f3prio SQL.<\/h2>\n\n\n<p>Cole qualquer consulta, procedimento ou script e obtenha o gr\u00e1fico em n\u00edvel de coluna em segundos.<\/p>\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-3\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/sqlflow.gudusoft.com\/?utm_source=gudusoft&amp;utm_medium=website&amp;utm_campaign=data-lineage-examples\" target=\"_blank\" rel=\"noreferrer noopener\">Experimente o SQLFlow gratuitamente<\/a><\/div>\n\n\n<div class=\"wp-block-button is-style-outline\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.gudusoft.com\/pt\/ferramenta-de-linhagem-de-dados-sql\/\">Consulte a ferramenta de linhagem.<\/a><\/div>\n<\/div>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Perguntas frequentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">O que \u00e9 um diagrama de linhagem de dados?<\/h3>\n\n\n<p>Um diagrama de linhagem de dados \u00e9 um grafo direcionado no qual os n\u00f3s representam tabelas, visualiza\u00e7\u00f5es ou colunas, e as arestas mostram como os dados fluem entre eles por meio de transforma\u00e7\u00f5es SQL. Diagramas em n\u00edvel de coluna, como os descritos nesta p\u00e1gina, desenham uma aresta para cada rela\u00e7\u00e3o coluna de origem-coluna de destino, anotada com a fun\u00e7\u00e3o ou cl\u00e1usula que a criou.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Posso reproduzir esses exemplos por conta pr\u00f3pria?<\/h3>\n\n\n<p>Sim. Cole qualquer um dos trechos de SQL acima no <a href=\"https:\/\/sqlflow.gudusoft.com\/?utm_source=gudusoft&amp;utm_medium=website&amp;utm_campaign=data-lineage-examples\">Visualizador SQLFlow gratuito<\/a>Basta selecionar o dialeto correspondente e o diagrama interativo aparecer\u00e1 em segundos. A vers\u00e3o em nuvem possui um plano gratuito.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qual a diferen\u00e7a entre linhagem direta e indireta?<\/h3>\n\n\n<p>A linhagem direta significa que os dados fluem de uma coluna de origem para uma coluna de destino, por exemplo. <code>SOMA(pedidos.quantidade)<\/code> alimenta\u00e7\u00e3o <code>montante total<\/code>A linhagem indireta significa que uma coluna influencia o resultado sem aparecer nele, como por exemplo... <code>ONDE<\/code> filtro ou <code>JUNTAR<\/code> O SQLFlow rastreia ambos como tipos de aresta separados e altern\u00e1veis; a maioria das ferramentas captura apenas o fluxo direto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c9 poss\u00edvel extrair a linhagem de procedimentos armazenados e SQL din\u00e2mico?<\/h3>\n\n\n<p>Sim, mas precisa de um analisador sint\u00e1tico procedural, n\u00e3o apenas de um analisador de consultas. O SQLFlow possui analisadores sint\u00e1ticos dedicados para Oracle PL\/SQL e SQL Server T-SQL, rastreia a linhagem por meio de par\u00e2metros e tabelas tempor\u00e1rias, resolve strings SQL constru\u00eddas dentro de procedimentos e desenha o grafo de chamadas de procedimento para procedimento.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">As ferramentas de c\u00f3digo aberto conseguem lidar com esses exemplos?<\/h3>\n\n\n<p>Parcialmente. Bibliotecas como <code>linhagem sql<\/code> e <code>sqlglot<\/code> S\u00e3o realmente boas em analisar consultas individuais e lidam bem com os exemplos 1 e 2. Os exemplos que valem a pena testar antes de confirmar s\u00e3o os de 4 a 6: c\u00f3digo procedural com SQL din\u00e2mico, linhagem indireta como um tipo de aresta separado e a integra\u00e7\u00e3o de um conjunto de dados com m\u00faltiplos dialetos em um \u00fanico grafo interativo. Execute seu procedimento armazenado mais complexo em qualquer ferramenta que voc\u00ea avalie e compare os resultados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Com quais dialetos SQL esses exemplos funcionam?<\/h3>\n\n\n<p>O SQLFlow fornece 39 analisadores sint\u00e1ticos espec\u00edficos para dialetos, incluindo Snowflake, BigQuery, Redshift, Databricks, Oracle, SQL Server, PostgreSQL, MySQL, Teradata, Hive, Spark SQL e Trino. Os exemplos acima usam SQL gen\u00e9rico, T-SQL, SQL com templates dbt e sintaxe Snowflake, e cada um \u00e9 analisado por sua pr\u00f3pria gram\u00e1tica, em vez de uma gram\u00e1tica ANSI gen\u00e9rica.<\/p>\n\n\n\n<div class=\"wp-block-group alignfull gd-band gd-band-navy gd-cta is-layout-constrained\" style=\"padding-top:56px;padding-bottom:56px\"><div class=\"wp-block-group__inner-container\">\n\n<h2 class=\"wp-block-heading\">Transforme seu pr\u00f3prio SQL em um diagrama de linhagem.<\/h2>\n\n\n<p>Cole uma consulta, um procedimento ou um script completo no visualizador gratuito e obtenha o gr\u00e1fico em n\u00edvel de coluna em segundos. Para ambientes com muitos bancos de dados, fale conosco sobre o reposit\u00f3rio corporativo.<\/p>\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-5\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/sqlflow.gudusoft.com\/?utm_source=gudusoft&amp;utm_medium=website&amp;utm_campaign=data-lineage-examples\" target=\"_blank\" rel=\"noreferrer noopener\">Experimente o SQLFlow gratuitamente<\/a><\/div>\n\n\n<div class=\"wp-block-button is-style-outline\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.gudusoft.com\/pt\/contato\/\">Solicite uma demonstra\u00e7\u00e3o empresarial<\/a><\/div>\n<\/div>\n\n<\/div><\/div>\n\n\n\n<script type=\"application\/ld+json\">{\n    \"@context\": \"https:\\\/\\\/schema.org\",\n    \"@graph\": [\n        {\n            \"@type\": \"TechArticle\",\n            \"headline\": \"Data Lineage Examples: 6 Real Scenarios with SQL and Diagrams\",\n            \"description\": \"Six worked data lineage examples with real SQL: INSERT-SELECT, multi-CTE transforms, view chains, stored procedures with dynamic SQL, dbt model chains, and cross-database ETL, each with the column-level lineage graph explained.\",\n            \"author\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Gudu Software\",\n                \"url\": \"https:\\\/\\\/www.gudusoft.com\\\/\"\n            },\n            \"publisher\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Gudu Software\",\n                \"url\": \"https:\\\/\\\/www.gudusoft.com\\\/\"\n            }\n        },\n        {\n            \"@type\": \"FAQPage\",\n            \"mainEntity\": [\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"What is a data lineage diagram?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"A data lineage diagram is a directed graph in which nodes are tables, views, or columns and edges show how data flows between them through SQL transformations. Column-level diagrams draw one edge per source-column-to-target-column relationship, annotated with the function or clause that created it.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Can I reproduce these examples myself?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"Yes. Paste any of the SQL snippets into the free SQLFlow visualizer at sqlflow.gudusoft.com, pick the matching dialect, and the interactive diagram appears in seconds. The cloud edition has a free tier.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"What is the difference between direct and indirect lineage?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"Direct lineage means data flows from a source column into a target column, for example SUM(orders.amount) feeding total_amount. Indirect lineage means a column influences the result without appearing in it, such as a WHERE filter or JOIN key. SQLFlow tracks both as separate, toggleable edge types.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Can lineage be extracted from stored procedures and dynamic SQL?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"Yes, but it needs a procedural parser. SQLFlow has dedicated parsers for Oracle PL\\\/SQL and SQL Server T-SQL, traces lineage through parameters and temp tables, resolves dynamic SQL built inside procedures, and draws the procedure-to-procedure call graph.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Do open-source tools handle these examples?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"Partially. Libraries like sqllineage and sqlglot parse individual queries well and handle simple INSERT-SELECT and CTE cases. The examples worth testing before you commit involve procedural code with dynamic SQL, indirect lineage as a separate edge type, and stitching a multi-dialect estate into one interactive graph.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Which SQL dialects do these examples work with?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"SQLFlow ships 39 dialect-specific parsers, including Snowflake, BigQuery, Redshift, Databricks, Oracle, SQL Server, PostgreSQL, MySQL, Teradata, Hive, Spark SQL, and Trino. Each dialect is parsed by its own grammar rather than a generic ANSI one.\"\n                    }\n                }\n            ]\n        }\n    ]\n}<\/script>","protected":false},"excerpt":{"rendered":"<p>A data lineage example shows, for a concrete piece of SQL, which source tables and columns feed which output columns, and through which transformations the data passes along the way. The six worked examples below cover the situations data engineers actually hit: a plain INSERT-SELECT, a multi-CTE transform, a chain of views, a stored procedure with dynamic SQL, a dbt model chain, and a cross-database ETL flow. Each example gives the SQL, then describes exactly what the lineage graph looks like for it. 6worked examples, each with real SQL 39SQL dialects, each a dedicated parser Column-levelgranularity, not just table-level Direct\u2026<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":5}},"_links":{"self":[{"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/pages\/6748"}],"collection":[{"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/comments?post=6748"}],"version-history":[{"count":1,"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/pages\/6748\/revisions"}],"predecessor-version":[{"id":6823,"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/pages\/6748\/revisions\/6823"}],"wp:attachment":[{"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/media?parent=6748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}