{"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\/es\/linaje-de-datos-de-spark-sql\/","title":{"rendered":"Linaje de datos de Spark SQL: Linaje de columnas para canalizaciones de Spark"},"content":{"rendered":"<p><strong>Linaje de datos de Spark SQL<\/strong> es el mapa a nivel de columna de c\u00f3mo se mueven los datos a trav\u00e9s de su c\u00f3digo Spark SQL: qu\u00e9 columnas de origen alimentan cada tabla escrita por un <code>CREAR TABLA ... COMO SELECCIONAR<\/code> o <code>INSERTAR SOBREESCRIBIR<\/code>y a trav\u00e9s de la cual se realizan vistas temporales, uniones, funciones y filtros en el proceso. <strong>Flujo de SQL de Gudu<\/strong> Crea ese mapa analizando est\u00e1ticamente tu Spark SQL con un analizador de dialecto Spark dedicado; no se requiere instrumentar el cl\u00faster, conectar ning\u00fan listener ni ejecutar ning\u00fan trabajo. Pega el SQL y obt\u00e9n el diagrama de linaje.<\/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>Pru\u00e9balo ahora:<\/strong> pegue cualquier script Spark SQL en el <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 linaje SQL en l\u00ednea gratuito<\/a>Seleccione el dialecto de Spark y rastree cualquier columna aguas arriba o aguas abajo. La edici\u00f3n en la nube tiene un nivel gratuito.<\/p>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Oyentes en tiempo de ejecuci\u00f3n frente a an\u00e1lisis est\u00e1tico: dos maneras de obtener el linaje de Spark<\/h2>\n\n\n\n<p>En el mundo de Spark existen dos enfoques fundamentalmente diferentes para el linaje, y la mayor\u00eda de los equipos acaban necesitando ambos.<\/p>\n\n\n\n<p><strong>Linaje en tiempo de ejecuci\u00f3n<\/strong> El enfoque adoptado por OpenLineage y su integraci\u00f3n con Spark adjunta un oyente a la sesi\u00f3n de Spark y emite eventos de linaje a medida que se ejecuta cada trabajo. Cumple su funci\u00f3n a la perfecci\u00f3n: registra qu\u00e9 se ejecut\u00f3, cu\u00e1ndo y con qu\u00e9 conjuntos de datos, con metadatos a nivel de ejecuci\u00f3n que el an\u00e1lisis est\u00e1tico no puede conocer. Si su pregunta es &quot;\u00bfqu\u00e9 afect\u00f3 realmente la canalizaci\u00f3n de anoche?&quot;, el linaje en tiempo de ejecuci\u00f3n responde a esa pregunta.<\/p>\n\n\n\n<p><strong>Linaje est\u00e1tico<\/strong> \u2014 El enfoque de SQLFlow \u2014 analiza el texto SQL en s\u00ed y deduce el linaje del c\u00f3digo, como lo har\u00eda un compilador. Esto cubre todo lo que la captura en tiempo de ejecuci\u00f3n no puede hacer estructuralmente:<\/p>\n\n\n\n<ul><li><strong>SQL que a\u00fan no has ejecutado.<\/strong> Una nueva canalizaci\u00f3n en una solicitud de extracci\u00f3n, un script heredado de otro equipo, una lista de tareas pendientes programadas trimestralmente: ninguna de estas acciones genera eventos en tiempo de ejecuci\u00f3n hasta que se ejecutan, posiblemente contra datos de producci\u00f3n.<\/li>\n<li><strong>Revisi\u00f3n de c\u00f3digo.<\/strong> Los revisores pueden ver el gr\u00e1fico completo de dependencias a nivel de columna de un cambio antes de aprobarlo, en lugar de descubrir el impacto despu\u00e9s de la implementaci\u00f3n.<\/li>\n<li><strong>Auditor\u00edas de migraci\u00f3n.<\/strong> Cuando trasladas cargas de trabajo a Spark, normalmente desde Hive, necesitas el gr\u00e1fico de dependencias de la <em>completo<\/em> c\u00f3digo fuente, incluyendo tareas que solo se ejecutan a fin de mes. El an\u00e1lisis est\u00e1tico lo lee todo en una sola pasada.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>Oyentes en tiempo de ejecuci\u00f3n (OpenLineage)<\/th><th>An\u00e1lisis est\u00e1tico (SQLFlow)<\/th><\/tr><\/thead><tbody>\n<tr><td>Linaje capturado<\/td><td>Por cada ejecuci\u00f3n del trabajo, a medida que se ejecuta<\/td><td>Desde el texto SQL, antes de que se ejecute nada<\/td><\/tr>\n<tr><td>Requiere<\/td><td>Listener configurado en la sesi\u00f3n de Spark; los trabajos deben ejecutarse<\/td><td>Los archivos SQL, m\u00e1s metadatos de esquema opcionales.<\/td><\/tr>\n<tr><td>Cubre el c\u00f3digo no ejecutado<\/td><td>No, sin carrera no hay evento.<\/td><td>S\u00ed, solicitudes de extracci\u00f3n, tareas pendientes, trabajos que se ejecutan con poca frecuencia.<\/td><\/tr>\n<tr><td>Metadatos de ejecuci\u00f3n (tiempos, versiones)<\/td><td>S\u00ed<\/td><td>No, solo a nivel de c\u00f3digo.<\/td><\/tr>\n<tr><td>Uso t\u00edpico<\/td><td>Observabilidad operativa de oleoductos en funcionamiento<\/td><td>An\u00e1lisis de impacto, revisi\u00f3n de c\u00f3digo, auditor\u00edas de migraci\u00f3n, documentaci\u00f3n de cumplimiento<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p>Son complementarias, no contradictorias. El linaje en tiempo de ejecuci\u00f3n indica qu\u00e9 sucedi\u00f3; el linaje est\u00e1tico indica qu\u00e9 hace el c\u00f3digo. Los adaptadores de exportaci\u00f3n de SQLFlow para DataHub, Microsoft Purview y OpenMetadata permiten ubicar el linaje derivado est\u00e1ticamente en el mismo cat\u00e1logo donde se almacenan los eventos en tiempo de ejecuci\u00f3n, de modo que ambas vistas coexisten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo: una cadena de vistas temporales en un CTAS<\/h2>\n\n\n\n<p>El patr\u00f3n que frustra las herramientas de linaje ingenuas en Spark SQL es la cadena de vistas temporales. Los notebooks y los trabajos rutinariamente preparan la l\u00f3gica a trav\u00e9s de <code>CREAR O REEMPLAZAR VISTA TEMPORAL<\/code> pasos antes de un final <code>CREAR TABLA ... COMO SELECCIONAR<\/code>Aqu\u00ed tienes un ejemplo conciso pero 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>Pregunta &quot;\u00bfd\u00f3nde est\u00e1? <code>an\u00e1lisis.gasto_del_usuario_30d.gasto_diario<\/code> \u00bfDe d\u00f3nde vienen?\u201d y la respuesta honesta requiere resolver dos capas de visi\u00f3n: <code>gasto_diario<\/code> es <code>SUMA(clean_events.amount)<\/code>, y <code>clean_events.amount<\/code> es <code>cantidad.de.eventos.en bruto<\/code>SQLFlow realiza exactamente esa resoluci\u00f3n y renderiza la cadena completa. <code>cantidad.de.eventos.en bruto<\/code> a trav\u00e9s de <code>eventos limpios<\/code> y <code>usuario_diario<\/code> en la mesa final, con el <code>SUMA<\/code> agregaci\u00f3n adherida al borde donde ocurre.<\/p>\n\n\n\n<p>Tambi\u00e9n capta lo que la mayor\u00eda de las herramientas omiten por completo: <strong>linaje indirecto<\/strong>Las columnas <code>fecha_del_evento<\/code>, <code>nombre_del_evento<\/code>y la clave de uni\u00f3n <code>ID de usuario<\/code> nunca aparecen en <code>gasto_diario<\/code>, sin embargo, los tres dan forma a su valor: cambiar el filtro de 30 d\u00edas o el <code>&#039;compra&#039;<\/code> El predicado y cada n\u00famero en la salida cambian. SQLFlow los modela como un tipo de relaci\u00f3n distinto y conmutable, lo que permite visualizar el flujo de datos puro o la superficie de impacto completa. Para una revisi\u00f3n de cambios de esquema, la superficie de impacto es la vista que realmente se necesita.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Construcciones de Spark SQL que SQLFlow resuelve<\/h2>\n\n\n\n<p>SQLFlow incluye un analizador de dialecto de Spark SQL, uno de los 39 analizadores espec\u00edficos de dialecto, no una gram\u00e1tica ANSI gen\u00e9rica con palabras clave de Spark a\u00f1adidas. En Spark SQL espec\u00edficamente, maneja las sentencias que contienen linaje:<\/p>\n\n\n\n<ul><li><strong><code>CREAR TABLA ... COMO SELECCIONAR<\/code> (CTAS)<\/strong> \u2014 el componente fundamental de las canalizaciones por lotes de Spark; cada columna de salida se rastrea hasta sus or\u00edgenes a trav\u00e9s de la consulta SELECT completa.<\/li>\n<li><strong><code>INSERTAR EN<\/code> y <code>INSERTAR SOBREESCRIBIR<\/code><\/strong> \u2014 incluyendo la asignaci\u00f3n de columnas posicionales entre la lista SELECT y el esquema de la tabla de destino.<\/li>\n<li><strong><code>CREAR O REEMPLAZAR VISTA TEMPORAL<\/code><\/strong> \u2014 Las vistas temporales se resuelven y encadenan, por lo que el linaje fluye a trav\u00e9s de las capas de preparaci\u00f3n en lugar de detenerse en ellas.<\/li>\n<li><strong>CTEs, subconsultas y <code>SELECCIONAR *<\/code><\/strong> \u2014 Las referencias a columnas se resuelven mediante expresiones de tabla comunes y subconsultas anidadas, y las expresiones con asterisco se expanden a columnas reales cuando se dispone de metadatos del esquema.<\/li>\n<li><strong>Funciones, conversiones y operadores de conjuntos<\/strong> \u2014 el linaje de cada columna de salida registra las transformaciones por las que pas\u00f3, por lo que <code>gasto_diario<\/code> no es solo \u201cde la cantidad\u201d sino \u201cde <code>cantidad<\/code> a trav\u00e9s de <code>SUMA<\/code>&#8220;.<\/li><\/ul>\n\n\n\n<p>En el fondo, se trata del motor General SQL Parser, un compilador SQL comercial desarrollado desde mediados de la d\u00e9cada de 2000 y validado con aproximadamente 13 600 conjuntos de pruebas por dialecto. La calidad del linaje es, ante todo, un problema de an\u00e1lisis sint\u00e1ctico, y ese corpus es lo que evita que la sintaxis de Spark en casos l\u00edmite genere errores de forma silenciosa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00f3nde encaja el linaje de datos de Spark SQL en su pila<\/h2>\n\n\n\n<p>Spark rara vez funciona de forma aislada. Sus tablas suelen estar en un metastore de Hive, y una proporci\u00f3n cada vez mayor de cargas de trabajo de Spark se ejecuta en Databricks. SQLFlow las trata como dialectos de primera clase, analizados por separado:<\/p>\n\n\n\n<ul><li>\u00bfMigrando trabajos de Hive a Spark? Analice el HQL heredado con el <a href=\"https:\/\/www.gudusoft.com\/es\/linaje-de-datos-de-la-colmena\/\">Analizador de linaje de datos de Hive<\/a> y los trabajos reescritos con el analizador Spark, y comparar los dos gr\u00e1ficos de dependencia para verificar que no se haya omitido nada en la traducci\u00f3n.<\/li>\n<li>\u00bfFuncionando con Databricks? <a href=\"https:\/\/www.gudusoft.com\/es\/linaje-de-datos-de-databricks\/\">Analizador de linaje de datos de Databricks<\/a> Cubre el dialecto SQL de Databricks, que se ha diferenciado del Spark SQL de c\u00f3digo abierto de maneras que una \u00fanica gram\u00e1tica compartida no maneja correctamente.<\/li>\n<li>\u00bfEstado mixto? SQLFlow analiza los 39 dialectos compatibles en un repositorio de linaje, por lo que un trabajo de Spark que lee una tabla producida por una tarea de Snowflake aparece como un gr\u00e1fico continuo. Consulte la <a href=\"https:\/\/www.gudusoft.com\/es\/herramienta-de-linaje-de-datos-sql\/\">Descripci\u00f3n general de la herramienta de linaje de datos SQL<\/a> para obtener la imagen completa.<\/li><\/ul>\n\n\n\n<p>Las opciones de entrada son flexibles: pegar c\u00f3digo SQL, cargar archivos, obtener metadatos mediante JDBC o importar un manifiesto dbt para proyectos dbt-on-Spark. La salida es un diagrama interactivo con posibilidad de exploraci\u00f3n en profundidad, adem\u00e1s de exportaciones en formato JSON, CSV y PNG, y una API REST para la automatizaci\u00f3n; por ejemplo, analizar el c\u00f3digo SQL modificado en una solicitud de extracci\u00f3n como paso de integraci\u00f3n continua.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Despliegue y escalabilidad<\/h2>\n\n\n\n<p>SQLFlow Cloud tiene un nivel gratuito para uso interactivo; el premium cuesta $49.99\/mes. Los equipos cuyo SQL no puede salir de la red ejecutan <a href=\"https:\/\/www.gudusoft.com\/es\/version-local-de-sqlflow\/\">SQLFlow local<\/a> Docker o Kubernetes, compatible con entornos aislados, $500\/mes o $4,800 pago \u00fanico por tipo de base de datos seleccionado. En ambos casos, SQLFlow realiza an\u00e1lisis est\u00e1tico \u00fanicamente del c\u00f3digo SQL: nunca lee las filas de las tablas. Las implementaciones empresariales escanean por lotes conjuntos de m\u00e1s de 100 bases de datos y m\u00e1s de un mill\u00f3n de columnas con escaneos incrementales y un repositorio de linaje persistente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preguntas frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfNecesito un cl\u00faster de Spark en funcionamiento para obtener el linaje?<\/h3>\n\n\n<p>No. SQLFlow analiza el texto de Spark SQL de forma est\u00e1tica. Puedes analizar un script que nunca se ha ejecutado en ning\u00fan lugar (una solicitud de extracci\u00f3n, una entrega de un proveedor, una lista de tareas pendientes de migraci\u00f3n) y obtener el mismo linaje a nivel de columna que obtendr\u00edas del c\u00f3digo de producci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfEn qu\u00e9 se diferencia esto de la integraci\u00f3n de Spark de OpenLineage?<\/h3>\n\n\n<p>OpenLineage captura el linaje en tiempo de ejecuci\u00f3n mediante un oyente en la sesi\u00f3n de Spark, lo que resulta excelente para observar qu\u00e9 hicieron realmente los trabajos en ejecuci\u00f3n. SQLFlow deriva el linaje del propio c\u00f3digo SQL, por lo que tambi\u00e9n abarca el c\u00f3digo que no se ha ejecutado, admite la revisi\u00f3n previa a la fusi\u00f3n y las auditor\u00edas de migraci\u00f3n, y no requiere acceso al cl\u00faster. Ambas herramientas son complementarias; SQLFlow puede exportar a DataHub, Purview u OpenMetadata junto con el linaje en tiempo de ejecuci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuede SQLFlow rastrear el linaje a trav\u00e9s de vistas temporales?<\/h3>\n\n\n<p>S\u00ed. Cadenas de <code>CREAR O REEMPLAZAR VISTA TEMPORAL<\/code> Las sentencias se resuelven de principio a fin, por lo que una columna en un CTAS final traza un recorrido a trav\u00e9s de cada vista intermedia hasta la tabla de origen f\u00edsica, con las funciones y agregaciones aplicadas en cada paso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfDatabricks SQL es lo mismo que Spark SQL en este caso?<\/h3>\n\n\n<p>No, SQLFlow los analiza con analizadores de dialecto independientes. Databricks SQL tiene sus propias extensiones de sintaxis, por lo que utiliza su propia gram\u00e1tica. Si ejecuta en Databricks, use el dialecto de Databricks; para cl\u00fasteres de c\u00f3digo abierto como Spark, EMR o autogestionados, use el dialecto de Spark SQL.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfSQLFlow lee mis datos?<\/h3>\n\n\n<p>No. Analiza el c\u00f3digo SQL y, opcionalmente, los metadatos del esquema (definiciones de tablas y columnas). Nunca se accede a los datos de las filas. Con la instalaci\u00f3n local, incluso el texto SQL permanece dentro de su red.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCu\u00e1nto cuesta la integraci\u00f3n de Spark SQL con SQLFlow?<\/h3>\n\n\n<p>SQLFlow Cloud comienza gratis; la versi\u00f3n premium cuesta $49.99\/mes. La versi\u00f3n local cuesta $500\/mes o $4,800 por \u00fanica vez por tipo de base de datos seleccionado, instalable en dos servidores. Ver <a href=\"https:\/\/www.gudusoft.com\/es\/precios\/\">precios<\/a> Para m\u00e1s detalles.<\/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\">Rastrea tu Spark SQL ahora<\/h2>\n\n\n<p>Pegue un script de Spark SQL en el visualizador gratuito y siga cualquier columna desde el origen hasta el destino, o cont\u00e1ctenos para que analicemos toda su infraestructura de datos.<\/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\">Prueba SQLFlow gratis<\/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\/es\/contacto\/\">Solicite una demostraci\u00f3n para empresas.<\/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\/es\/wp-json\/wp\/v2\/pages\/6761"}],"collection":[{"href":"https:\/\/www.gudusoft.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gudusoft.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gudusoft.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gudusoft.com\/es\/wp-json\/wp\/v2\/comments?post=6761"}],"version-history":[{"count":0,"href":"https:\/\/www.gudusoft.com\/es\/wp-json\/wp\/v2\/pages\/6761\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gudusoft.com\/es\/wp-json\/wp\/v2\/media?parent=6761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}