{"id":6761,"date":"2026-07-12T02:07:41","date_gmt":"2026-07-12T10:07:41","guid":{"rendered":"https:\/\/www.gudusoft.com\/spark-sql-data-lineage\/"},"modified":"2026-07-12T02:07:41","modified_gmt":"2026-07-12T10:07:41","slug":"spark-sql-data-lineage","status":"publish","type":"page","link":"https:\/\/www.gudusoft.com\/pt\/linhagem-de-dados-spark-sql\/","title":{"rendered":"Linhagem de dados do Spark SQL: Linhagem de colunas para pipelines do Spark"},"content":{"rendered":"<p><strong>Linhagem de dados Spark SQL<\/strong> \u00e9 o mapa em n\u00edvel de coluna de como os dados se movem pelo seu c\u00f3digo Spark SQL: quais colunas de origem alimentam cada tabela escrita por um a <code>CRIAR TABELA ... COMO SELECIONAR<\/code> ou <code>INSERIR SOBRESCREVER<\/code>, e atrav\u00e9s das quais visualiza\u00e7\u00f5es tempor\u00e1rias, jun\u00e7\u00f5es, fun\u00e7\u00f5es e filtros s\u00e3o utilizados ao longo do processo. <strong>Gudu SQLFlow<\/strong> O Spark SQL cria esse mapa analisando estaticamente seu c\u00f3digo SQL com um analisador de dialeto Spark dedicado \u2014 sem necessidade de instrumentar um cluster, conectar um listener ou executar um job. Basta colar o SQL e obter o diagrama de linhagem.<\/p>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-constrained\" style=\"background-color:#eef7fb;padding-top:24px;padding-bottom:24px\"><div class=\"wp-block-group__inner-container\">\n\n<p><strong>Experimente agora:<\/strong> Cole qualquer script Spark SQL no <a href=\"https:\/\/sqlflow.gudusoft.com\/?utm_source=gudusoft&amp;utm_medium=website&amp;utm_campaign=spark-sql-data-lineage\" target=\"_blank\" rel=\"noreferrer noopener\">visualizador de linhagem SQL online gratuito<\/a>Selecione o dialeto Spark e rastreie qualquer coluna a montante ou a jusante. A edi\u00e7\u00e3o Cloud possui um n\u00edvel gratuito.<\/p>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Listeners em tempo de execu\u00e7\u00e3o versus an\u00e1lise est\u00e1tica: duas maneiras de obter a linhagem do Spark<\/h2>\n\n\n\n<p>Existem duas abordagens fundamentalmente diferentes para a linhagem no mundo Spark, e a maioria das equipes eventualmente precisa de ambas.<\/p>\n\n\n\n<p><strong>Linhagem de tempo de execu\u00e7\u00e3o<\/strong> \u2014 a abordagem adotada pelo OpenLineage e sua integra\u00e7\u00e3o com o Spark \u2014 anexa um ouvinte \u00e0 sess\u00e3o do Spark e emite eventos de linhagem \u00e0 medida que cada tarefa \u00e9 executada. \u00c9 realmente muito bom no que faz: registra o que foi executado, quando foi executado e em quais conjuntos de dados, com metadados em n\u00edvel de execu\u00e7\u00e3o que a an\u00e1lise est\u00e1tica n\u00e3o consegue obter. Se a sua pergunta \u00e9 &quot;o que o pipeline da noite passada realmente processou?&quot;, a linhagem em tempo de execu\u00e7\u00e3o responde a essa pergunta.<\/p>\n\n\n\n<p><strong>Linhagem est\u00e1tica<\/strong> \u2014 A abordagem do SQLFlow \u2014 analisa o pr\u00f3prio texto SQL e deriva a linhagem do c\u00f3digo, da mesma forma que um compilador faria. Isso abrange tudo o que a captura em tempo de execu\u00e7\u00e3o, estruturalmente, n\u00e3o consegue:<\/p>\n\n\n\n<ul><li><strong>SQL que voc\u00ea ainda n\u00e3o executou.<\/strong> Um novo pipeline em um pull request, um script herdado de outra equipe, uma lista de tarefas agendadas trimestralmente \u2014 nenhum deles emite eventos de tempo de execu\u00e7\u00e3o at\u00e9 que sejam executados, possivelmente em dados de produ\u00e7\u00e3o.<\/li>\n<li><strong>Revis\u00e3o de c\u00f3digo.<\/strong> Os revisores podem visualizar o gr\u00e1fico de depend\u00eancias completo, em n\u00edvel de coluna, de uma altera\u00e7\u00e3o antes de aprov\u00e1-la, em vez de descobrirem o impacto ap\u00f3s a implementa\u00e7\u00e3o.<\/li>\n<li><strong>Auditorias de migra\u00e7\u00e3o.<\/strong> Ao migrar cargas de trabalho para o Spark \u2014 geralmente do Hive \u2014 voc\u00ea precisa do grafo de depend\u00eancias do <em>inteiro<\/em> Base de c\u00f3digo, incluindo tarefas que s\u00e3o executadas apenas no final do m\u00eas. A an\u00e1lise est\u00e1tica l\u00ea tudo de uma s\u00f3 vez.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>Ouvintes de tempo de execu\u00e7\u00e3o (OpenLineage)<\/th><th>An\u00e1lise est\u00e1tica (SQLFlow)<\/th><\/tr><\/thead><tbody>\n<tr><td>Linhagem capturada<\/td><td>Por execu\u00e7\u00e3o de tarefa, conforme ela \u00e9 realizada<\/td><td>A partir do texto SQL, antes de qualquer coisa ser executada.<\/td><\/tr>\n<tr><td>Requer<\/td><td>Listener configurado na sess\u00e3o Spark; os jobs devem ser executados.<\/td><td>Os arquivos SQL, al\u00e9m dos metadados de esquema opcionais.<\/td><\/tr>\n<tr><td>Abrange c\u00f3digo n\u00e3o executado<\/td><td>N\u00e3o \u2014 sem corrida, sem evento<\/td><td>Sim \u2014 PRs, pend\u00eancias, tarefas raramente executadas<\/td><\/tr>\n<tr><td>Metadados de execu\u00e7\u00e3o (tempo, vers\u00f5es)<\/td><td>Sim<\/td><td>N\u00e3o \u2014 apenas em n\u00edvel de c\u00f3digo<\/td><\/tr>\n<tr><td>Uso t\u00edpico<\/td><td>Observabilidade operacional de dutos em funcionamento<\/td><td>An\u00e1lise de impacto, revis\u00e3o de c\u00f3digo, auditorias de migra\u00e7\u00e3o, documenta\u00e7\u00e3o de conformidade<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p>Essas duas vis\u00f5es s\u00e3o complementares, n\u00e3o concorrentes. A linhagem de tempo de execu\u00e7\u00e3o informa o que aconteceu; a linhagem est\u00e1tica informa o que o c\u00f3digo faz. Os adaptadores de exporta\u00e7\u00e3o do SQLFlow para DataHub, Microsoft Purview e OpenMetadata permitem que voc\u00ea insira a linhagem derivada estaticamente no mesmo cat\u00e1logo onde seus eventos de tempo de execu\u00e7\u00e3o s\u00e3o armazenados, de modo que as duas vis\u00f5es fiquem lado a lado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo: uma cadeia de visualiza\u00e7\u00e3o tempor\u00e1ria em um CTAS<\/h2>\n\n\n\n<p>O padr\u00e3o que frustra as ferramentas de linhagem ing\u00eanuas no Spark SQL \u00e9 a cadeia de visualiza\u00e7\u00f5es tempor\u00e1rias. Notebooks e jobs rotineiramente preparam a l\u00f3gica atrav\u00e9s de <code>CRIAR OU SUBSTITUIR VISUALIZA\u00c7\u00c3O TEMPOR\u00c1RIA<\/code> passos antes de um final <code>CRIAR TABELA ... COMO SELECIONAR<\/code>Aqui est\u00e1 um exemplo compacto, por\u00e9m realista:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE OR REPLACE TEMP VIEW clean_events AS SELECT CAST(event_time AS TIMESTAMP) AS event_ts, user_id, lower(event_name) AS event_name, amount FROM raw.events WHERE event_date &gt;= date_sub(current_date(), 30); CREATE OR REPLACE TEMP VIEW user_daily AS SELECT user_id, to_date(event_ts) AS event_day, SUM(amount) AS daily_spend FROM clean_events WHERE event_name = &#039;purchase&#039; GROUP BY user_id, to_date(event_ts); CREATE TABLE analytics.user_spend_30d USING PARQUET AS SELECT u.user_id, u.segment, d.event_day, d.daily_spend FROM user_daily d JOIN dim.users u ON u.user_id = d.user_id;<\/code><\/pre>\n\n\n\n<p>Pergunte \u201conde fica <code>analytics.user_spend_30d.daily_spend<\/code> de onde v\u00eam?\u201d e a resposta honesta exige a resolu\u00e7\u00e3o de duas camadas de visualiza\u00e7\u00e3o: <code>gastos di\u00e1rios<\/code> \u00e9 <code>SOMA(eventos_limpos.quantidade)<\/code>, e <code>limpeza_eventos.quantidade<\/code> \u00e9 <code>quantidade de eventos brutos<\/code>O SQLFlow realiza exatamente essa resolu\u00e7\u00e3o e renderiza a cadeia completa \u2014 <code>quantidade de eventos brutos<\/code> atrav\u00e9s <code>eventos_limpos<\/code> e <code>usu\u00e1rio_di\u00e1rio<\/code> na mesa final, com o <code>SOMA<\/code> agrega\u00e7\u00e3o associada \u00e0 borda onde ocorre.<\/p>\n\n\n\n<p>Ele tamb\u00e9m captura o que a maioria das ferramentas simplesmente ignora: <strong>linhagem indireta<\/strong>As colunas <code>data_do_evento<\/code>, <code>nome_do_evento<\/code>e a chave de jun\u00e7\u00e3o <code>ID do usu\u00e1rio<\/code> nunca aparecer em <code>gastos di\u00e1rios<\/code>, no entanto, todos os tr\u00eas influenciam seu valor \u2014 alterar o filtro de 30 dias ou o <code>&#039;comprar&#039;<\/code> O predicado e todos os n\u00fameros na sa\u00edda mudam. O SQLFlow modela isso como um tipo de relacionamento distinto e altern\u00e1vel, para que voc\u00ea possa visualizar o fluxo de dados puro ou a superf\u00edcie de impacto completa. Para uma revis\u00e3o de altera\u00e7\u00e3o de esquema, a superf\u00edcie de impacto \u00e9 a visualiza\u00e7\u00e3o que voc\u00ea realmente deseja.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O Spark SQL constr\u00f3i e resolve o SQLFlow.<\/h2>\n\n\n\n<p>O SQLFlow inclui um analisador sint\u00e1tico espec\u00edfico para dialetos do Spark SQL \u2014 um entre 39 analisadores sint\u00e1ticos espec\u00edficos para cada dialeto, e n\u00e3o uma gram\u00e1tica ANSI gen\u00e9rica com palavras-chave do Spark adicionadas. Especificamente no Spark SQL, ele lida com as instru\u00e7\u00f5es que carregam linhagem:<\/p>\n\n\n\n<ul><li><strong><code>CRIAR TABELA ... COMO SELECIONAR<\/code> (CTAS)<\/strong> \u2014 o principal componente dos pipelines em lote do Spark; cada coluna de sa\u00edda \u00e9 rastreada at\u00e9 suas origens por meio da instru\u00e7\u00e3o SELECT completa.<\/li>\n<li><strong><code>INSERIR EM<\/code> e <code>INSERIR SOBRESCREVER<\/code><\/strong> \u2014 incluindo o mapeamento posicional de colunas entre a lista SELECT e o esquema da tabela de destino.<\/li>\n<li><strong><code>CRIAR OU SUBSTITUIR VISUALIZA\u00c7\u00c3O TEMPOR\u00c1RIA<\/code><\/strong> \u2014 As visualiza\u00e7\u00f5es tempor\u00e1rias s\u00e3o resolvidas e encadeadas, de modo que a linhagem flui atrav\u00e9s das camadas de prepara\u00e7\u00e3o em vez de parar nelas.<\/li>\n<li><strong>CTEs, subconsultas e <code>SELECIONE *<\/code><\/strong> \u2014 As refer\u00eancias de coluna s\u00e3o resolvidas por meio de express\u00f5es de tabela comuns e subconsultas aninhadas, e as express\u00f5es com asterisco s\u00e3o expandidas para colunas reais quando os metadados do esquema est\u00e3o dispon\u00edveis.<\/li>\n<li><strong>Fun\u00e7\u00f5es, convers\u00f5es e operadores de conjunto<\/strong> \u2014 o hist\u00f3rico de cada coluna de sa\u00edda registra as transforma\u00e7\u00f5es pelas quais ela passou, ent\u00e3o <code>gastos di\u00e1rios<\/code> N\u00e3o se trata apenas de &quot;quantidade&quot;, mas sim de &quot;a partir de&quot;. <code>quantia<\/code> via <code>SOMA<\/code>&#8220;.<\/li><\/ul>\n\n\n\n<p>Por baixo dos panos, trata-se do mecanismo General SQL Parser \u2014 um front-end comercial de compilador SQL desenvolvido desde meados dos anos 2000 e validado com aproximadamente 13.600 conjuntos de testes por dialeto. A qualidade da linhagem \u00e9 um problema de an\u00e1lise sint\u00e1tica antes de qualquer outra coisa, e esse corpus \u00e9 o que impede que a sintaxe do Spark em casos extremos produza, silenciosamente, arestas incorretas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Onde a linhagem de dados do Spark SQL se encaixa na sua arquitetura de dados.<\/h2>\n\n\n\n<p>O Spark raramente funciona sozinho. Suas tabelas geralmente ficam em um metastore do Hive, e uma parcela crescente das cargas de trabalho do Spark \u00e9 executada no Databricks. O SQLFlow trata esses ambientes como dialetos de primeira classe, analisados separadamente:<\/p>\n\n\n\n<ul><li>Migrando trabalhos do Hive para o Spark? Analise o HQL legado com o <a href=\"https:\/\/www.gudusoft.com\/pt\/linhagem-de-dados-da-colmeia\/\">analisador de linhagem de dados do Hive<\/a> e os trabalhos reescritos com o analisador Spark, e comparar os dois gr\u00e1ficos de depend\u00eancia para verificar se nada foi perdido na tradu\u00e7\u00e3o.<\/li>\n<li>Executando no Databricks? <a href=\"https:\/\/www.gudusoft.com\/pt\/linhagem-de-dados-databricks\/\">Analisador de linhagem de dados do Databricks<\/a> Abrange o dialeto SQL do Databricks, que divergiu do Spark SQL de c\u00f3digo aberto de maneiras que uma gram\u00e1tica \u00fanica e compartilhada n\u00e3o consegue lidar adequadamente.<\/li>\n<li>Propriedade mista? O SQLFlow analisa todos os 39 dialetos suportados em um \u00fanico reposit\u00f3rio de linhagem, de modo que um trabalho Spark que l\u00ea uma tabela produzida por uma tarefa Snowflake aparece como um gr\u00e1fico cont\u00ednuo. Veja o <a href=\"https:\/\/www.gudusoft.com\/pt\/ferramenta-de-linhagem-de-dados-sql\/\">Vis\u00e3o geral da ferramenta de linhagem de dados SQL<\/a> Para ter uma vis\u00e3o completa.<\/li><\/ul>\n\n\n\n<p>As op\u00e7\u00f5es de entrada s\u00e3o flex\u00edveis: cole SQL, carregue arquivos, obtenha metadados via JDBC ou importe um manifesto dbt para projetos dbt-on-Spark. A sa\u00edda \u00e9 um diagrama interativo e explor\u00e1vel, al\u00e9m de exporta\u00e7\u00f5es em JSON, CSV e PNG e uma API REST para automa\u00e7\u00e3o \u2014 por exemplo, analisar as altera\u00e7\u00f5es de SQL em uma solicita\u00e7\u00e3o pull como uma etapa de CI.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implanta\u00e7\u00e3o e escala<\/h2>\n\n\n\n<p>O SQLFlow Cloud possui um plano gratuito para uso interativo; a vers\u00e3o premium custa \u00a349,99\/m\u00eas. Equipes cujos comandos SQL n\u00e3o podem sair da rede executam o comando. <a href=\"https:\/\/www.gudusoft.com\/pt\/sqlflow-on-premise-versao\/\">SQLFlow no local<\/a> \u2014 Docker ou Kubernetes, compat\u00edvel com ambientes isolados da internet (air-gap), $500\/m\u00eas ou $4.800 (pagamento \u00fanico) por tipo de banco de dados selecionado. De qualquer forma, o SQLFlow realiza apenas an\u00e1lise est\u00e1tica do c\u00f3digo SQL: ele nunca l\u00ea as linhas das suas tabelas. Implanta\u00e7\u00f5es corporativas realizam varreduras em lote de conjuntos de dados com mais de 100 bancos de dados e mais de um milh\u00e3o de colunas, com varreduras incrementais e um reposit\u00f3rio de linhagem persistente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Perguntas frequentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Preciso de um cluster Spark em execu\u00e7\u00e3o para obter a linhagem?<\/h3>\n\n\n<p>N\u00e3o. O SQLFlow analisa o texto do Spark SQL estaticamente. Voc\u00ea pode analisar um script que nunca foi executado em lugar nenhum \u2014 uma solicita\u00e7\u00e3o de pull request, uma entrega de fornecedor, um backlog de migra\u00e7\u00e3o \u2014 e obter a mesma linhagem em n\u00edvel de coluna que obteria do c\u00f3digo de produ\u00e7\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Em que isso difere da integra\u00e7\u00e3o do OpenLineage com o Spark?<\/h3>\n\n\n<p>O OpenLineage captura a linhagem em tempo de execu\u00e7\u00e3o por meio de um listener na sess\u00e3o do Spark \u2014 excelente para observar o que os jobs em execu\u00e7\u00e3o realmente fizeram. O SQLFlow deriva a linhagem do pr\u00f3prio c\u00f3digo SQL, portanto, tamb\u00e9m abrange o c\u00f3digo que n\u00e3o foi executado, oferece suporte \u00e0 revis\u00e3o pr\u00e9-merge e auditorias de migra\u00e7\u00e3o e n\u00e3o requer acesso ao cluster. Os dois s\u00e3o complementares; o SQLFlow pode exportar para o DataHub, Purview ou OpenMetadata juntamente com a linhagem em tempo de execu\u00e7\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O SQLFlow consegue rastrear a linhagem atrav\u00e9s de visualiza\u00e7\u00f5es tempor\u00e1rias?<\/h3>\n\n\n<p>Sim. Correntes de <code>CRIAR OU SUBSTITUIR VISUALIZA\u00c7\u00c3O TEMPOR\u00c1RIA<\/code> As instru\u00e7\u00f5es s\u00e3o resolvidas de ponta a ponta, portanto, uma coluna em um CTAS final percorre todas as visualiza\u00e7\u00f5es de prepara\u00e7\u00e3o at\u00e9 a tabela de origem f\u00edsica, com as fun\u00e7\u00f5es e agrega\u00e7\u00f5es aplicadas em cada etapa.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O Databricks SQL \u00e9 o mesmo que o Spark SQL neste caso?<\/h3>\n\n\n<p>N\u00e3o \u2014 o SQLFlow os analisa com analisadores de dialeto separados. O SQL do Databricks tem suas pr\u00f3prias extens\u00f5es de sintaxe, portanto, usa sua pr\u00f3pria gram\u00e1tica. Se voc\u00ea estiver executando no Databricks, use o dialeto do Databricks; para Spark de c\u00f3digo aberto, EMR ou clusters autogerenciados, use o dialeto do Spark SQL.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O SQLFlow l\u00ea meus dados?<\/h3>\n\n\n<p>N\u00e3o. Ele analisa o c\u00f3digo SQL e, opcionalmente, os metadados do esquema (defini\u00e7\u00f5es de tabelas e colunas). Os dados das linhas nunca s\u00e3o acessados. Com a vers\u00e3o On-Premise, at\u00e9 mesmo o texto SQL permanece dentro da sua rede.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qual o custo do Spark SQL Lineage com SQLFlow?<\/h3>\n\n\n<p>O SQLFlow Cloud \u00e9 gratuito a partir do in\u00edcio; a vers\u00e3o premium custa \u00a349,99\/m\u00eas. A vers\u00e3o On-Premise custa \u00a3500\/m\u00eas ou \u00a34.800 (pagamento \u00fanico) por tipo de banco de dados selecionado, instal\u00e1vel em dois servidores. Consulte <a href=\"https:\/\/www.gudusoft.com\/pt\/precos\/\">pre\u00e7os<\/a> Para mais detalhes.<\/p>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-constrained\" style=\"background-color:#60d5f6;padding-top:32px;padding-bottom:32px\"><div class=\"wp-block-group__inner-container\">\n\n<h2 class=\"wp-block-heading\">Rastreie seu Spark SQL agora<\/h2>\n\n\n<p>Cole um script Spark SQL no visualizador gratuito e acompanhe qualquer coluna da origem ao destino \u2014 ou fale conosco sobre a possibilidade de digitalizar todo o seu ambiente.<\/p>\n\n\n<div class=\"wp-block-buttons is-layout-flex\">\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=spark-sql-data-lineage\" target=\"_blank\" rel=\"noreferrer noopener\">Experimente o SQLFlow gratuitamente<\/a><\/div>\n<\/div>\n\n\n<div class=\"wp-block-buttons is-layout-flex\">\n<div class=\"wp-block-button\"><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\": \"SoftwareApplication\",\n            \"name\": \"Gudu SQLFlow\",\n            \"applicationCategory\": \"DeveloperApplication\",\n            \"applicationSubCategory\": \"SQL Data Lineage Tool\",\n            \"operatingSystem\": \"Web, Linux, Windows, macOS\",\n            \"url\": \"https:\\\/\\\/www.gudusoft.com\\\/spark-sql-data-lineage\\\/\",\n            \"description\": \"Automated Spark SQL data lineage from static parsing: column-level lineage through CTAS, INSERT INTO\\\/OVERWRITE, and temp view chains, with no cluster or job run required.\",\n            \"featureList\": \"Spark SQL dialect parser, column-level lineage, temp view resolution, CTAS and INSERT OVERWRITE analysis, indirect\\\/impact lineage, dbt support, REST API, DataHub\\\/Purview\\\/OpenMetadata export\",\n            \"softwareVersion\": \"8.2.3\",\n            \"offers\": [\n                {\n                    \"@type\": \"Offer\",\n                    \"name\": \"SQLFlow Cloud Free\",\n                    \"price\": \"0\",\n                    \"priceCurrency\": \"USD\"\n                },\n                {\n                    \"@type\": \"Offer\",\n                    \"name\": \"SQLFlow Cloud Premium\",\n                    \"price\": \"49.99\",\n                    \"priceCurrency\": \"USD\",\n                    \"priceSpecification\": {\n                        \"@type\": \"UnitPriceSpecification\",\n                        \"price\": \"49.99\",\n                        \"priceCurrency\": \"USD\",\n                        \"billingIncrement\": 1,\n                        \"unitText\": \"MONTH\"\n                    }\n                },\n                {\n                    \"@type\": \"Offer\",\n                    \"name\": \"SQLFlow On-Premise\",\n                    \"price\": \"4800\",\n                    \"priceCurrency\": \"USD\"\n                }\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\": \"Do I need a running Spark cluster to get lineage?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"No. SQLFlow parses the Spark SQL text statically. You can analyze a script that has never executed anywhere and get the same column-level lineage you would get from production code.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"How is this different from OpenLineage's Spark integration?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"OpenLineage captures lineage at run time via a listener on the Spark session, which is excellent for observing what live jobs actually did. SQLFlow derives lineage from the SQL code itself, so it also covers code that hasn't run, supports pre-merge review and migration audits, and needs no cluster access. The two are complementary.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Can SQLFlow trace lineage through temp views?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"Yes. Chains of CREATE OR REPLACE TEMP VIEW statements are resolved end to end, so a column in a final CTAS traces back through every staging view to the physical source table, with the functions and aggregations applied at each step.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Is Databricks SQL the same as Spark SQL here?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"No. SQLFlow parses them with separate dialect parsers. Databricks SQL has its own syntax extensions, so it gets its own grammar. Use the Databricks dialect on Databricks and the Spark SQL dialect for open-source Spark, EMR, or self-managed clusters.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Does SQLFlow read my data?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"No. It analyzes SQL code and, optionally, schema metadata such as table and column definitions. Row data is never accessed. With the On-Premise edition, even the SQL text stays inside your network.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"What does Spark SQL lineage with SQLFlow cost?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"SQLFlow Cloud starts free; premium is $49.99\\\/month. SQLFlow On-Premise is $500\\\/month or $4,800 one-time per selected database type, installable on two servers.\"\n                    }\n                }\n            ]\n        }\n    ]\n}<\/script>","protected":false},"excerpt":{"rendered":"<p>Spark SQL data lineage is the column-level map of how data moves through your Spark SQL code: which source columns feed every table written by a CREATE TABLE &#8230; AS SELECT or INSERT OVERWRITE, and through which temp views, joins, functions, and filters along the way. Gudu SQLFlow builds that map by statically parsing your Spark SQL with a dedicated Spark dialect parser \u2014 no cluster to instrument, no listener to attach, and no job run required. Paste the SQL, get the lineage diagram. Try it now: paste any Spark SQL script into the free online SQL lineage visualizer, select\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\/6761"}],"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=6761"}],"version-history":[{"count":0,"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/pages\/6761\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/media?parent=6761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}