{"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\/de\/spark-sql-data-lineage\/","title":{"rendered":"Spark SQL Datenherkunft: Spaltenherkunft f\u00fcr Spark Pipelines"},"content":{"rendered":"<p><strong>Spark SQL Datenherkunft<\/strong> ist die Spalten\u00fcbersicht, die zeigt, wie Daten durch Ihren Spark SQL-Code flie\u00dfen: welche Quellspalten jede Tabelle speisen, die von einem Spark SQL-Code geschrieben wird. <code>CREATE TABLE ... AS SELECT<\/code> oder <code>EINF\u00dcGEN \u00dcBERSCHREIBEN<\/code>und durch welche tempor\u00e4ren Ansichten, Verkn\u00fcpfungen, Funktionen und Filter auf dem Weg dorthin verwendet werden. <strong>Gudu SQLFlow<\/strong> Diese Zuordnung wird durch statisches Parsen Ihres Spark-SQL-Codes mit einem speziellen Spark-Dialektparser erstellt \u2013 kein Cluster muss instrumentiert, kein Listener angeh\u00e4ngt und kein Joblauf erforderlich. SQL-Code einf\u00fcgen, Herkunftsdiagramm erhalten.<\/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>Probieren Sie es jetzt aus:<\/strong> F\u00fcgen Sie ein beliebiges Spark SQL-Skript in die folgende Datei ein: <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\">kostenloser Online-SQL-Lineage-Visualisierer<\/a>W\u00e4hlen Sie den Spark-Dialekt aus und verfolgen Sie beliebige Spalten stromaufw\u00e4rts oder stromabw\u00e4rts. Die Cloud-Edition bietet ein kostenloses Kontingent.<\/p>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Laufzeit-Listener vs. statisches Parsing: Zwei Wege, um die Spark-Herkunft zu ermitteln<\/h2>\n\n\n\n<p>In der Spark-Welt gibt es zwei grundlegend verschiedene Ans\u00e4tze zur Abstammung, und die meisten Teams ben\u00f6tigen letztendlich beide.<\/p>\n\n\n\n<p><strong>Laufzeit-Abstammung<\/strong> Der von OpenLineage und seiner Spark-Integration verfolgte Ansatz f\u00fcgt der Spark-Session einen Listener hinzu und sendet bei jeder Jobausf\u00fchrung Lineage-Ereignisse. Er ist in dieser Hinsicht wirklich gut: Er protokolliert, was wann und auf welchen Datens\u00e4tzen tats\u00e4chlich ausgef\u00fchrt wurde \u2013 mit Metadaten auf Laufzeitebene, die eine statische Analyse nicht erfassen kann. Wenn Sie sich fragen: \u201eWelche Daten hat die Pipeline letzte Nacht verarbeitet?\u201c, liefert die Laufzeit-Lineage die Antwort.<\/p>\n\n\n\n<p><strong>Statische Abstammungslinie<\/strong> Der Ansatz von SQLFlow analysiert den SQL-Text selbst und leitet die Herkunft aus dem Code ab, \u00e4hnlich wie ein Compiler. Dadurch wird alles abgedeckt, was die Laufzeiterfassung strukturell nicht leisten kann:<\/p>\n\n\n\n<ul><li><strong>SQL-Anweisungen, die Sie noch nicht ausgef\u00fchrt haben.<\/strong> Eine neue Pipeline in einem Pull Request, ein von einem anderen Team \u00fcbernommenes Skript, ein R\u00fcckstand an viertelj\u00e4hrlich geplanten Jobs \u2013 keines dieser Elemente l\u00f6st Laufzeitereignisse aus, bis es ausgef\u00fchrt wird, m\u00f6glicherweise gegen Produktionsdaten.<\/li>\n<li><strong>Code-Review.<\/strong> Die Pr\u00fcfer k\u00f6nnen den vollst\u00e4ndigen Abh\u00e4ngigkeitsgraphen einer \u00c4nderung auf Spaltenebene einsehen, bevor sie diese genehmigen, anstatt die Auswirkungen erst nach der Bereitstellung zu entdecken.<\/li>\n<li><strong>Migrationspr\u00fcfungen.<\/strong> Wenn Sie Workloads auf Spark migrieren \u2013 \u00fcblicherweise von Hive \u2013, ben\u00f6tigen Sie den Abh\u00e4ngigkeitsgraphen von <em>gesamte<\/em> Die Codebasis umfasst auch Jobs, die nur am Monatsende ausgef\u00fchrt werden. Die statische Analyse liest sie in einem Durchgang komplett ein.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>Laufzeit-Listener (OpenLineage)<\/th><th>Statische Analyse (SQLFlow)<\/th><\/tr><\/thead><tbody>\n<tr><td>Abstammung erfasst<\/td><td>Pro Joblauf, w\u00e4hrend er ausgef\u00fchrt wird<\/td><td>Aus dem SQL-Text, bevor irgendetwas ausgef\u00fchrt wird<\/td><\/tr>\n<tr><td>Erfordert<\/td><td>Listener in der Spark-Sitzung konfiguriert; Jobs m\u00fcssen ausgef\u00fchrt werden<\/td><td>Die SQL-Dateien sowie optionale Schema-Metadaten<\/td><\/tr>\n<tr><td>Umfasst nicht ausgef\u00fchrten Code<\/td><td>Nein \u2013 kein Lauf, keine Veranstaltung<\/td><td>Ja \u2013 Pull Requests, Backlogs, selten ausgef\u00fchrte Jobs<\/td><\/tr>\n<tr><td>Laufzeitmetadaten (Zeitpunkt, Versionen)<\/td><td>Ja<\/td><td>Nein \u2013 nur auf Codeebene<\/td><\/tr>\n<tr><td>Typische Verwendung<\/td><td>Betriebliche Beobachtbarkeit von Live-Pipelines<\/td><td>Folgenabsch\u00e4tzung, Code-Review, Migrationspr\u00fcfungen, Compliance-Dokumentation<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p>Diese beiden Aspekte erg\u00e4nzen sich, anstatt miteinander zu konkurrieren. Die Laufzeit-Herkunftsanalyse zeigt Ihnen, was passiert ist; die statische Herkunftsanalyse zeigt Ihnen, was der Code bewirkt. Die Exportadapter von SQLFlow f\u00fcr DataHub, Microsoft Purview und OpenMetadata erm\u00f6glichen es Ihnen, die statisch abgeleitete Herkunftsanalyse im selben Katalog wie Ihre Laufzeitereignisse zu speichern, sodass die beiden Ansichten nebeneinander angezeigt werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel: Eine tempor\u00e4re Ansichtskette in ein CTAS<\/h2>\n\n\n\n<p>Das Muster, das einfache Lineage-Tools in Spark SQL \u00fcberfordert, ist die tempor\u00e4re View-Kette. Notebooks und Jobs f\u00fchren routinem\u00e4\u00dfig Logik-Staging durch <code>TEMPOR\u00c4RE ANSICHT ERSTELLEN ODER ERSETZEN<\/code> Schritte vor einem letzten <code>CREATE TABLE ... AS SELECT<\/code>Hier ein kurzes, aber realistisches Beispiel:<\/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>Fragen Sie: \u201eWoher kommt das?\u201c <code>analytics.user_spend_30d.daily_spend<\/code> \u201eWoher kommt das?\u201c und die ehrliche Antwort erfordert die Aufl\u00f6sung zweier Sichtebenen: <code>t\u00e4gliche Ausgaben<\/code> Ist <code>SUMME(clean_events.amount)<\/code>, Und <code>clean_events.amount<\/code> Ist <code>Rohereignisse.Menge<\/code>SQLFlow f\u00fchrt genau diese Aufl\u00f6sung durch und rendert die gesamte Kette. <code>Rohereignisse.Menge<\/code> durch <code>clean_events<\/code> Und <code>Benutzer_t\u00e4glich<\/code> in den Finaltisch, mit dem <code>SUMME<\/code> Die Aggregation ist an der Kante angeh\u00e4ngt, an der sie stattfindet.<\/p>\n\n\n\n<p>Es erfasst auch das, was die meisten Tools v\u00f6llig auslassen: <strong>indirekte Abstammung<\/strong>Die Spalten <code>Ereignisdatum<\/code>, <code>Ereignisname<\/code>und der Join-Schl\u00fcssel <code>Benutzer-ID<\/code> erscheinen nie in <code>t\u00e4gliche Ausgaben<\/code>Doch alle drei beeinflussen seinen Wert \u2013 \u00e4ndern Sie den 30-Tage-Filter oder den <code>&#039;kaufen&#039;<\/code> Pr\u00e4dikat und jede Zahl in der Ausgabe \u00e4ndert sich. SQLFlow modelliert dies als separaten, umschaltbaren Beziehungstyp, sodass Sie entweder den reinen Datenfluss oder die gesamte Auswirkungsfl\u00e4che anzeigen k\u00f6nnen. F\u00fcr eine \u00dcberpr\u00fcfung von Schema\u00e4nderungen ist die Auswirkungsfl\u00e4che die relevanteste Ansicht.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Spark SQL-Konstrukte, die SQLFlow aufl\u00f6st<\/h2>\n\n\n\n<p>SQLFlow liefert einen Spark-SQL-Dialektparser mit \u2013 einen von 39 dialektspezifischen Parsern, keine generische ANSI-Grammatik mit hinzugef\u00fcgten Spark-Schl\u00fcsselw\u00f6rtern. Speziell f\u00fcr Spark SQL verarbeitet er Anweisungen, die eine Herkunftsangabe enthalten:<\/p>\n\n\n\n<ul><li><strong><code>CREATE TABLE ... AS SELECT<\/code> (CTAS)<\/strong> \u2014 das Arbeitspferd der Spark-Batch-Pipelines; jede Ausgabespalte wird \u00fcber die vollst\u00e4ndige SELECT-Anweisung bis zu ihren Quellen zur\u00fcckverfolgt.<\/li>\n<li><strong><code>EINF\u00dcGEN IN<\/code> Und <code>EINF\u00dcGEN \u00dcBERSCHREIBEN<\/code><\/strong> \u2014 einschlie\u00dflich der Zuordnung der Spaltenpositionen zwischen der SELECT-Liste und dem Schema der Zieltabelle.<\/li>\n<li><strong><code>TEMPOR\u00c4RE ANSICHT ERSTELLEN ODER ERSETZEN<\/code><\/strong> \u2014 Tempor\u00e4re Ansichten werden aufgel\u00f6st und verkettet, sodass die Datenherkunft durch die Staging-Ebenen flie\u00dft, anstatt dort anzuhalten.<\/li>\n<li><strong>CTEs, Unterabfragen und <code>W\u00c4HLEN *<\/code><\/strong> \u2014 Spaltenreferenzen werden \u00fcber Common Table Expressions und verschachtelte Unterabfragen aufgel\u00f6st, und Sternausdr\u00fccke werden zu realen Spalten erweitert, wenn Schema-Metadaten verf\u00fcgbar sind.<\/li>\n<li><strong>Funktionen, Typumwandlungen und Mengenoperatoren<\/strong> \u2014 Die Herkunftsnachweise jeder Ausgabespalte dokumentieren, welche Transformationen sie durchlaufen hat, so <code>t\u00e4gliche Ausgaben<\/code> ist nicht nur \u201evon Betrag\u201c, sondern \u201evon <code>Menge<\/code> \u00fcber <code>SUMME<\/code>&#8220;.<\/li><\/ul>\n\n\n\n<p>Under the hood this is the General SQL Parser engine \u2014 a commercial SQL compiler front-end developed since the mid-2000s and validated against roughly 13,600 per-dialect test fixtures. Lineage quality is a parsing problem before it is anything else, and that corpus is what keeps edge-case Spark syntax from silently producing wrong edges.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wo die Datenherkunft von Spark SQL in Ihre Architektur passt<\/h2>\n\n\n\n<p>Spark existiert selten isoliert. Seine Tabellen befinden sich \u00fcblicherweise in einem Hive-Metastore, und ein zunehmender Anteil der Spark-Workloads l\u00e4uft auf Databricks. SQLFlow behandelt diese als erstklassige, separat geparste Dialekte:<\/p>\n\n\n\n<ul><li>Sie m\u00f6chten Hive-Jobs zu Spark migrieren? Analysieren Sie die bestehenden HQL-Abfragen mit dem <a href=\"https:\/\/www.gudusoft.com\/de\/hive-datenherkunft\/\">Hive-Datenherkunftsparser<\/a> und die neu geschriebenen Jobs mit dem Spark-Parser zu vergleichen und die beiden Abh\u00e4ngigkeitsgraphen zu vergleichen, um sicherzustellen, dass bei der \u00dcbersetzung nichts verloren gegangen ist.<\/li>\n<li>L\u00e4uft es auf Databricks? <a href=\"https:\/\/www.gudusoft.com\/de\/databricks-datenherkunft\/\">Databricks-Datenherkunftsparser<\/a> behandelt den Databricks SQL-Dialekt, der sich vom Open-Source Spark SQL in einer Weise unterscheidet, die mit einer einzigen gemeinsamen Grammatik nicht ad\u00e4quat erfasst wird.<\/li>\n<li>Gemischte Umgebungen? SQLFlow analysiert alle 39 unterst\u00fctzten Dialekte in einem einzigen Herkunftsverzeichnis, sodass ein Spark-Job, der eine von einem Snowflake-Task erzeugte Tabelle liest, als ein durchgehender Graph dargestellt wird. Siehe die <a href=\"https:\/\/www.gudusoft.com\/de\/sql-datenherkunftstool\/\">\u00dcberblick \u00fcber SQL-Datenherkunftstools<\/a> um das Gesamtbild zu erhalten.<\/li><\/ul>\n\n\n\n<p>Die Eingabem\u00f6glichkeiten sind flexibel: SQL-Code einf\u00fcgen, Dateien hochladen, Metadaten \u00fcber JDBC abrufen oder ein dbt-Manifest f\u00fcr dbt-on-Spark-Projekte importieren. Die Ausgabe besteht aus einem interaktiven, erweiterbaren Diagramm sowie Exporten in den Formaten JSON, CSV und PNG und einer REST-API zur Automatisierung \u2013 beispielsweise zur Analyse der SQL-\u00c4nderungen in einem Pull Request als CI-Schritt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bereitstellung und Skalierung<\/h2>\n\n\n\n<p>SQLFlow Cloud bietet eine kostenlose Version f\u00fcr die interaktive Nutzung; die Premium-Version kostet $49,99\/Monat. Teams, deren SQL-Datenbank das Netzwerk nicht verlassen darf, k\u00f6nnen dies nutzen. <a href=\"https:\/\/www.gudusoft.com\/de\/sqlflow-on-premise-version\/\">SQLFlow vor Ort<\/a> \u2014 Docker oder Kubernetes, Air-Gap-f\u00e4hig, 1.500 TP\/Monat oder einmalig 4.800 TP pro ausgew\u00e4hltem Datenbanktyp. SQLFlow f\u00fchrt in jedem Fall ausschlie\u00dflich eine statische Analyse des SQL-Codes durch: Es liest niemals die Zeilen Ihrer Tabellen. Enterprise-Implementierungen scannen Datenbanken mit \u00fcber 100 Datenbanken und mehr als einer Million Spalten im Batch-Verfahren mit inkrementellen Scans und einem persistenten Lineage-Repository.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">H\u00e4ufig gestellte Fragen<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Ben\u00f6tige ich einen laufenden Spark-Cluster, um die Herkunft der Daten zu ermitteln?<\/h3>\n\n\n<p>Nein. SQLFlow analysiert den Spark SQL-Text statisch. Sie k\u00f6nnen ein Skript analysieren, das noch nie irgendwo ausgef\u00fchrt wurde \u2013 beispielsweise einen Pull Request, eine Lieferantenlieferung oder einen Migrations-Backlog \u2013 und erhalten dieselbe Spaltenhistorie wie bei Produktionscode.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Worin unterscheidet sich dies von der Spark-Integration von OpenLineage?<\/h3>\n\n\n<p>OpenLineage erfasst die Codeherkunft zur Laufzeit \u00fcber einen Listener in der Spark-Session \u2013 ideal, um die tats\u00e4chliche Ausf\u00fchrung laufender Jobs zu beobachten. SQLFlow leitet die Codeherkunft direkt aus dem SQL-Code ab und erfasst somit auch nicht ausgef\u00fchrten Code. Es unterst\u00fctzt zudem die \u00dcberpr\u00fcfung vor dem Zusammenf\u00fchren und Migrationsaudits und ben\u00f6tigt keinen Clusterzugriff. Die beiden L\u00f6sungen erg\u00e4nzen sich: SQLFlow kann neben der Laufzeit-Codeherkunft auch Daten in DataHub, Purview oder OpenMetadata exportieren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kann SQLFlow die Herkunft von Prozessen \u00fcber tempor\u00e4re Sichten nachverfolgen?<\/h3>\n\n\n<p>Ja. Ketten von <code>TEMPOR\u00c4RE ANSICHT ERSTELLEN ODER ERSETZEN<\/code> Die Anweisungen werden von Anfang bis Ende aufgel\u00f6st, sodass eine Spalte in einem finalen CTAS \u00fcber jede Staging-Ansicht bis zur physischen Quelltabelle zur\u00fcckverfolgt werden kann, wobei die Funktionen und Aggregationen in jedem Schritt angewendet werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ist Databricks SQL hier dasselbe wie Spark SQL?<\/h3>\n\n\n<p>Nein \u2013 SQLFlow analysiert sie mit separaten Dialektparsern. Databricks SQL verf\u00fcgt \u00fcber eigene Syntaxerweiterungen und somit \u00fcber eine eigene Grammatik. Wenn Sie Databricks verwenden, nutzen Sie den Databricks-Dialekt; f\u00fcr Open-Source-Spark, EMR oder selbstverwaltete Cluster verwenden Sie den Spark-SQL-Dialekt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kann SQLFlow meine Daten lesen?<\/h3>\n\n\n<p>Nein. Es analysiert SQL-Code und optional Schema-Metadaten (Tabellen- und Spaltendefinitionen). Auf die Zeilendaten wird niemals zugegriffen. Bei einer On-Premise-L\u00f6sung verbleibt selbst der SQL-Text innerhalb Ihres Netzwerks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Welche Kosten entstehen durch die Spark SQL-Lineage mit SQLFlow?<\/h3>\n\n\n<p>SQLFlow Cloud ist kostenlos; die Premium-Version kostet $49,99\/Monat. Die On-Premise-Version kostet $500\/Monat oder einmalig $4.800 pro ausgew\u00e4hltem Datenbanktyp und kann auf zwei Servern installiert werden. Siehe <a href=\"https:\/\/www.gudusoft.com\/de\/preisgestaltung\/\">Preisgestaltung<\/a> f\u00fcr weitere Details.<\/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\">Verfolgen Sie jetzt Ihre Spark SQL-Abfragen<\/h2>\n\n\n<p>F\u00fcgen Sie ein Spark SQL-Skript in den kostenlosen Visualisierer ein und verfolgen Sie eine beliebige Spalte von der Quelle zum Ziel \u2013 oder sprechen Sie mit uns \u00fcber die Durchsuchung Ihres gesamten Bestands.<\/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\">Testen Sie SQLFlow kostenlos<\/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\/de\/kontakt\/\">Fordern Sie eine Enterprise-Demo an<\/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\/de\/wp-json\/wp\/v2\/pages\/6761"}],"collection":[{"href":"https:\/\/www.gudusoft.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gudusoft.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gudusoft.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gudusoft.com\/de\/wp-json\/wp\/v2\/comments?post=6761"}],"version-history":[{"count":0,"href":"https:\/\/www.gudusoft.com\/de\/wp-json\/wp\/v2\/pages\/6761\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gudusoft.com\/de\/wp-json\/wp\/v2\/media?parent=6761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}