{"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\/de\/datenherkunftsbeispiele\/","title":{"rendered":"Beispiele zur Datenherkunft: 6 reale Szenarien mit SQL und Diagrammen"},"content":{"rendered":"<p>A <strong>Beispiel f\u00fcr Datenherkunft<\/strong> Es zeigt anhand eines konkreten SQL-Abschnitts, welche Quelltabellen und -spalten welche Ausgabespalten speisen und welche Transformationen die Daten dabei durchlaufen. Die sechs unten aufgef\u00fchrten Beispiele decken Situationen ab, denen Dateningenieure tats\u00e4chlich begegnen: ein einfacher <code>INSERT-SELECT<\/code>Es handelt sich um eine Multi-CTE-Transformation, eine Kette von Sichten, eine gespeicherte Prozedur mit dynamischem SQL, eine dbt-Modellkette und einen datenbank\u00fcbergreifenden ETL-Workflow. Jedes Beispiel enth\u00e4lt das SQL und beschreibt anschlie\u00dfend detailliert den zugeh\u00f6rigen Datenherkunftsgraphen.<\/p>\n\n\n\n<div class=\"gd-stats\"><div class=\"gd-stat\"><b>6<\/b><span>Durchgerechnete Beispiele, jeweils mit echtem SQL<\/span><\/div><div class=\"gd-stat\"><b>39<\/b><span>SQL-Dialekte, jeweils ein eigener Parser<\/span><\/div><div class=\"gd-stat\"><b>Spaltenebene<\/b><span>Granularit\u00e4t, nicht nur Tabellenebene<\/span><\/div><div class=\"gd-stat\"><b>Direkt + indirekt<\/b><span>Kanten, beide verfolgt<\/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>Alle Beispiele auf dieser Seite sind reproduzierbar:<\/strong> F\u00fcgen Sie den SQL-Code in die folgende Datei ein: <a href=\"https:\/\/sqlflow.gudusoft.com\/?utm_source=gudusoft&amp;utm_medium=website&amp;utm_campaign=data-lineage-examples\" target=\"_blank\" rel=\"noreferrer noopener\">kostenloser SQLFlow-Lineage-Visualisierer<\/a> und Sie erhalten das unten beschriebene interaktive Diagramm.<\/p>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Wie man diese Beispiele liest<\/h2>\n\n\n\n<p><strong class=\"gd-lead-in\">Jeder Abstammungsgraph enth\u00e4lt zwei Arten von Kanten.<\/strong> A <strong>direkt<\/strong> Edge bedeutet, dass Daten physisch von einer Quellspalte in eine Zielspalte flie\u00dfen, m\u00f6glicherweise \u00fcber eine Funktion oder Aggregation. <strong>indirekt<\/strong> Kante bedeutet, dass eine Spalte das Ergebnis formt, ohne darin zu landen: Spalten, die verwendet werden in <code>WO<\/code>, <code>VERBINDEN<\/code>, Und <code>GRUPPE NACH<\/code> Klauseln. Das \u00dcbersehen indirekter Auswirkungen ist der Grund, warum Wirkungsanalysen fehlschlagen, denn das Entfernen einer Filterspalte f\u00fchrt genauso sicher zu einem fehlerhaften Bericht wie das Entfernen einer ausgew\u00e4hlten Spalte. Falls Ihnen diese Begriffe neu sind, beginnen Sie mit <a href=\"https:\/\/www.gudusoft.com\/de\/was-ist-data-lineage\/\">Was ist Datenherkunft?<\/a> Und <a href=\"https:\/\/www.gudusoft.com\/de\/datenherkunft-auf-spaltenebene\/\">wie die Herkunftsanalyse auf Spaltenebene funktioniert<\/a>Dann komm zur\u00fcck.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel 1: ein einfaches Beispiel zur Datenherkunft bei einer INSERT-SELECT-Anweisung<\/h2>\n\n\n\n<p>Ausgangspunkt jeder Abstammungsdiskussion: eine Anweisung, die aggregierte Daten in eine \u00dcbersichtstabelle schreibt.<\/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>Der Stammbaum besteht aus drei Tabellen (<code>Bestellungen<\/code>, <code>Kunden<\/code>, <code>Verkaufs\u00fcbersicht<\/code>und diese Kanten auf Spaltenebene:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Zielspalte<\/th><th>Quelle Spalte<\/th><th>Kantentyp<\/th><th>\u00dcber<\/th><\/tr><\/thead><tbody>\n<tr><td><code>Vertriebs\u00fcbersicht Region<\/code><\/td><td><code>Kundenregion<\/code><\/td><td>Direkt<\/td><td>einfache Kopie<\/td><\/tr>\n<tr><td><code>Gesamtbetrag der Verk\u00e4ufe<\/code><\/td><td><code>Bestellungen.Betrag<\/code><\/td><td>Direkt<\/td><td><code>SUMME()<\/code><\/td><\/tr>\n<tr><td><code>Verkaufs\u00fcbersicht.*<\/code><\/td><td><code>Bestellungen.Status<\/code><\/td><td>Indirekt<\/td><td><code>WO<\/code> Filter<\/td><\/tr>\n<tr><td><code>Verkaufs\u00fcbersicht.*<\/code><\/td><td><code>orders.customer_id<\/code>, <code>Kunden-ID<\/code><\/td><td>Indirekt<\/td><td><code>VERBINDEN<\/code> Zustand<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p>Beachten Sie, was Ihnen das Diagramm bereits zeigt, was eine Tabellenansicht nicht zeigen w\u00fcrde: <code>Kunden-E-Mail<\/code> und alle anderen unber\u00fchrten Spalten spielen hier keine Rolle, <code>Bestellungen.Status<\/code> Es ist relevant, auch wenn es nie in der Ausgabe erscheint. Viele Lineage-Tools \u00fcberspringen diesen letzten Schritt vollst\u00e4ndig; SQLFlow modelliert direkte und indirekte Lineage als separate, umschaltbare Beziehungstypen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel 2: Multi-CTE-Transformation<\/h2>\n\n\n\n<p>Bei CTEs (Common Table Expressions) beginnt die Geschichte der handgezeichneten Stammbaumdiagramme, denn jede CTE ist eine tempor\u00e4re Relation, die der Graph durchlaufen muss, ohne die urspr\u00fcnglichen Quellen aus den Augen zu verlieren.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>WITH daily AS ( SELECT order_date, customer_id, SUM(amount) AS day_total FROM orders GROUP BY order_date, customer_id ), ranked 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 ranked WHERE rn = 1;<\/code><\/pre>\n\n\n\n<p>Der Stammbaum wird dargestellt <code>t\u00e4glich<\/code> Und <code>Rangliste<\/code> als Zwischenknoten, sodass der vollst\u00e4ndige Pfad der relevanten Spalte lautet: <code>Bestellungen.Betrag<\/code> \u2192 <code>SUMME()<\/code> \u2192 <code>t\u00e4glich.Tagesgesamt<\/code> \u2192 <code>Rangliste.Tagesgesamt<\/code> \u2192 <code>bester Tagesumsatz<\/code>Die Fensterfunktion erzeugt eine subtilere Kette: <code>rn<\/code> wird berechnet aus <code>Kunden-ID<\/code> (Partition) und <code>Tagesgesamt<\/code> (Reihenfolge), und dann <code>WHERE rn = 1<\/code> macht <code>rn<\/code> ein indirekter Input f\u00fcr jede Ausgabespalte. <code>Bestellungen.Betrag<\/code> Einfl\u00fcsse <code>bester Tagesumsatz<\/code> Zweimal: direkt \u00fcber die Summe und indirekt \u00fcber die Rangfolge, die entscheidet, welche Zeile erhalten bleibt. Ein Resolver, der nur Spaltennamen nach Mustern abgleicht, kann diesen zweiten Pfad nicht erkennen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel 3: eine Kette von Ansichten<\/h2>\n\n\n\n<p>Ansichten stapeln sich. In einem ausgereiften Data Warehouse befindet sich ein Bericht oft drei oder vier Ansichtsdefinitionen von den physischen Tabellen entfernt, und die Frage \u201eWoher kommt diese Zahl eigentlich?\u201c erfordert das Durchlaufen der gesamten Kette.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE VIEW v_active_customers AS SELECT id, name, email FROM customers WHERE status = &#039;active&#039;; CREATE 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>Die Grafik zeigt <code>v_customer_revenue.revenue<\/code> durch die Sichtgrenze zur\u00fcckverfolgen zu <code>Bestellungen.Betrag<\/code>, mit <code>Kundenstatus<\/code> Es ist als indirekte Kante angeh\u00e4ngt, die vom Filter der ersten Ansicht geerbt wurde. Es offenbart auch etwas N\u00fctzliches in der anderen Richtung: <code>v_active_customers.email<\/code> wird von der ersten Ansicht ausgew\u00e4hlt, aber von keiner nachfolgenden Ansicht verwendet. Solche toten Spalten sind genau das, was Sie vor einer Bereinigung oder Migration finden m\u00f6chten, und sie sind auf Tabellenebene unsichtbar. Wenn Ansichtsdefinitionen verwenden <code>W\u00c4HLEN *<\/code>SQLFlow erweitert den Stern anhand des Schemas, sodass jede geerbte Spalte weiterhin auf ihre physische Quelle aufgel\u00f6st wird.<\/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\">Beispiel 4: Gespeicherte Prozedur mit dynamischem SQL<\/h2>\n\n\n\n<p>Dieses Beispiel verdeutlicht die Unterschiede zwischen Lineage-Tools, da der Name der Zieltabelle im Code nicht einmal als Literaltext existiert. Hier ist eine SQL-Server-Prozedur, die mithilfe einer tempor\u00e4ren Tabelle und einer dynamisch zusammengestellten Tabelle einen monatlichen Snapshot erstellt. <code>EINF\u00dcGEN<\/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>Der korrekte Abstammungsgraph \u00fcberwindet beide Hindernisse: <code>Bestellungen.Betrag<\/code> \u2192 <code>SUMME()<\/code> \u2192 <code>#monthly.month_total<\/code> \u2192 <code>snapshot_monthly.month_total<\/code>, mit <code>orders.order_date<\/code> als indirekte Kante durch die <code>WO<\/code> Klausel und die <code>@Monat<\/code> Der Parameter wird als Eingabe f\u00fcr diesen Filter verfolgt. Um dies zu erreichen, ben\u00f6tigt man einen echten T-SQL-Prozedurparser (keinen Statement-Splitter), die Verfolgung tempor\u00e4rer Tabellen \u00fcber Anweisungen hinweg und die Aufl\u00f6sung der \u00fcbergebenen SQL-Zeichenkette. <code>sp_executesql<\/code>SQLFlow verf\u00fcgt \u00fcber spezielle Prozedurparser f\u00fcr SQL Server T-SQL und Oracle PL\/SQL, l\u00f6st dynamisches SQL innerhalb von Prozeduren auf und erstellt zus\u00e4tzlich einen Aufrufgraphen, der die Aufrufreihenfolge der einzelnen Prozeduren darstellt. Dadurch wird auch die Herkunft der Prozeduren sichtbar. Dynamisches SQL ist die h\u00e4ufigste Schwachstelle von Tools zur Herkunftsanalyse; testen Sie daher jedes Tool zun\u00e4chst anhand dieses Musters.<\/p>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel 5: dbt-Modellkette<\/h2>\n\n\n\n<p>dbt bietet Ihnen standardm\u00e4\u00dfig Modell-Lineage \u00fcber <code>ref()<\/code>Die interessante Frage ist jedoch die auf Spaltenebene: Welches Quellfeld speist welche Mart-Spalte, und zwar \u00fcber welche Staging-Umbenennungen?<\/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>Importieren Sie das dbt-Manifest des Projekts in SQLFlow, und der Graph l\u00f6st die Vorlagenreferenzen in eine konkrete Spaltenkette auf: <code>Rohbestellungen<\/code> \u2192 <code>stg_orders.amount<\/code> \u2192 <code>SUMME()<\/code> \u2192 <code>fct_customer_revenue.lifetime_revenue<\/code>, mit der Umbenennung <code>Ausweis<\/code> \u2192 <code>Bestellnummer<\/code> erhalten im Zwischenstopp und <code>Status<\/code> Die Daten werden als indirekte Kante vom Filter des Datenmarktes \u00fcbertragen. Da das Manifest Modelle mit den von ihnen erstellten Warehouse-Objekten verkn\u00fcpft, gleicht derselbe Graph die von dbt verwaltete Datenherkunft mit allen anderen Daten ab, die au\u00dferhalb von dbt auf diese Tabellen zugreifen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel 6: Datenbank\u00fcbergreifendes ETL<\/h2>\n\n\n\n<p>Immobilien-Engines sind eng miteinander verkn\u00fcpft. Ein typischer Ablauf: Eine operative SQL-Server-Datenbank wird in den Cloud-Speicher extrahiert, in Snowflake Staging geladen und anschlie\u00dfend in ein Analyseschema transformiert. Der Lade- und Transformationsprozess sieht folgenderma\u00dfen aus:<\/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>Auf der Snowflake-Seite zeigt das Diagramm Folgendes: <code>Betrag_USD<\/code> als berechnete Spalte mit zwei direkten \u00fcbergeordneten Spalten, <code>orders_raw.amount<\/code> Und <code>fx_rates.rate<\/code>, verbunden durch den arithmetischen Ausdruck, plus <code>W\u00e4hrung<\/code> Als indirekte Kante aus der Join-Bedingung. Um die gesamte Pipeline abzudecken, werden beide Seiten mit SQLFlow in ihren jeweiligen Dialekten gespeist: Die T-SQL-Extraktionslogik wird mit dem SQL-Server-Parser und die Snowflake-Skripte mit dem Snowflake-Parser analysiert \u2013 insgesamt stehen 39 dialektspezifische Parser zur Verf\u00fcgung. In Unternehmensumgebungen werden die Ergebnisse in einem persistenten Lineage-Repository gespeichert, das Datenbanken mit \u00fcber 100 Datenbanken und mehr als einer Million Spalten im Batch-Verfahren durchsucht. So wird die gesamte SQL-Server-zu-Snowflake-Pipeline in einem einzigen Graphen abgebildet und kann nach DataHub, Microsoft Purview oder OpenMetadata exportiert werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Was alle sechs Beispiele gemeinsam haben<\/h2>\n\n\n\n<p>Alle obigen Diagramme wurden ausschlie\u00dflich aus SQL-Text und Schema-Metadaten abgeleitet. Das ist die Kernmethode dahinter. <a href=\"https:\/\/www.gudusoft.com\/de\/sql-datenherkunftstool\/\">SQL-basierte Datenherkunft<\/a>Da die Transformationslogik bereits in SQL implementiert ist, rekonstruiert die statische Analyse dieses SQL-Codes die Datenherkunft ohne zus\u00e4tzliche Agenten, ohne Zugriff auf das Abfrageprotokoll und ohne jemals eine Zeile Ihrer Daten zu lesen. Die Unterschiede zwischen den Beispielen liegen lediglich im Aufwand der Analyse, ausgehend von einer einzigen Abfrage. <code>INSERT-SELECT<\/code> zu dynamischem SQL innerhalb einer Prozedur.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Beispiel<\/th><th>Was es trainiert<\/th><th>Schwieriger Teil<\/th><\/tr><\/thead><tbody>\n<tr><td>1. INSERT-SELECT<\/td><td>Direkte vs. indirekte Kanten<\/td><td>Modellieren <code>WO<\/code>\/<code>VERBINDEN<\/code> Spalten als Abstammung<\/td><\/tr>\n<tr><td>2. Multi-CTE<\/td><td>Zwischenbeziehungen<\/td><td>Eingaben f\u00fcr Fensterfunktionen; Pfad des Filters auf Rangebene<\/td><\/tr>\n<tr><td>3. Kette ansehen<\/td><td>Verschachtelte Definitionen<\/td><td>Sternenexpansion; Auffinden toter S\u00e4ulen<\/td><\/tr>\n<tr><td>4. Gespeicherte Prozedur<\/td><td>Verfahrensordnung<\/td><td>Tempor\u00e4re Tabellen und dynamische SQL-Aufl\u00f6sung<\/td><\/tr>\n<tr><td>5. DBT-Kette<\/td><td>SQL-Vorlage<\/td><td>L\u00f6sung <code>ref()<\/code>\/<code>Quelle()<\/code> zu realen Objekten<\/td><\/tr>\n<tr><td>6. Datenbank\u00fcbergreifendes ETL<\/td><td>Mehrere Dialekte<\/td><td>Zusammenf\u00fchren von Diagrammen pro Motor in einem Repository<\/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\">Siehe die Herkunft deiner eigenen SQL-Anweisungen<\/h2>\n\n\n<p>F\u00fcgen Sie eine beliebige Abfrage, Prozedur oder ein Skript ein und erhalten Sie innerhalb von Sekunden ein Diagramm auf Spaltenebene.<\/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\">Testen Sie SQLFlow kostenlos<\/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\/de\/sql-datenherkunftstool\/\">Siehe das Abstammungstool<\/a><\/div>\n<\/div>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">H\u00e4ufig gestellte Fragen<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Was ist ein Datenherkunftsdiagramm?<\/h3>\n\n\n<p>Ein Datenherkunftsdiagramm ist ein gerichteter Graph, dessen Knoten Tabellen, Sichten oder Spalten darstellen und dessen Kanten den Datenfluss zwischen ihnen durch SQL-Transformationen zeigen. Spaltendiagramme, wie die auf dieser Seite beschriebenen, zeichnen f\u00fcr jede Quellspalten-Zielspalten-Beziehung eine Kante, die mit der Funktion oder Klausel beschriftet ist, die diese Beziehung erzeugt hat.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kann ich diese Beispiele selbst nachstellen?<\/h3>\n\n\n<p>Ja. F\u00fcgen Sie einen der oben stehenden SQL-Codeausschnitte in die folgende Datei ein: <a href=\"https:\/\/sqlflow.gudusoft.com\/?utm_source=gudusoft&amp;utm_medium=website&amp;utm_campaign=data-lineage-examples\">kostenloser SQLFlow-Visualisierer<\/a>W\u00e4hlen Sie den passenden Dialekt aus, und das interaktive Diagramm erscheint in Sekundenschnelle. Die Cloud-Version bietet eine kostenlose Basisversion.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Worin besteht der Unterschied zwischen direkter und indirekter Abstammung?<\/h3>\n\n\n<p>Direkte Datenherkunft bedeutet, dass Daten von einer Quellspalte in eine Zielspalte flie\u00dfen, zum Beispiel <code>SUMME(orders.amount)<\/code> F\u00fctterung <code>Gesamtbetrag<\/code>Indirekte Abstammung bedeutet, dass eine Spalte das Ergebnis beeinflusst, ohne selbst darin aufzutreten, wie zum Beispiel eine <code>WO<\/code> Filter oder <code>VERBINDEN<\/code> Wichtig. SQLFlow verfolgt beides als separate, umschaltbare Kantentypen; die meisten Tools erfassen nur den direkten Datenfluss.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">L\u00e4sst sich die Herkunft aus gespeicherten Prozeduren und dynamischem SQL extrahieren?<\/h3>\n\n\n<p>Ja, aber es ben\u00f6tigt einen Prozedurparser, nicht nur einen Abfrageparser. SQLFlow verf\u00fcgt \u00fcber dedizierte Parser f\u00fcr Oracle PL\/SQL und SQL Server T-SQL, verfolgt die Befehlskette \u00fcber Parameter und tempor\u00e4re Tabellen, l\u00f6st SQL-Zeichenketten innerhalb von Prozeduren auf und erstellt den Aufrufgraphen zwischen den Prozeduren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">K\u00f6nnen Open-Source-Tools diese Beispiele verarbeiten?<\/h3>\n\n\n<p>Teilweise. Bibliotheken wie <code>sqllineage<\/code> Und <code>sqlglot<\/code> Sie sind wirklich gut darin, einzelne Abfragen zu analysieren, und sie bew\u00e4ltigen die Beispiele 1 und 2 problemlos. Die Beispiele 4 bis 6 sollten Sie vor dem Commit testen: prozeduraler Code mit dynamischem SQL, indirekte Herkunft als separater Kantentyp und das Zusammenf\u00fchren eines mehrsprachigen Gebiets zu einem interaktiven Graphen. F\u00fchren Sie Ihre komplexeste gespeicherte Prozedur mit einem beliebigen Tool Ihrer Wahl aus und vergleichen Sie die Ausgabe.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mit welchen SQL-Dialekten funktionieren diese Beispiele?<\/h3>\n\n\n<p>SQLFlow enth\u00e4lt 39 dialektspezifische Parser, darunter f\u00fcr Snowflake, BigQuery, Redshift, Databricks, Oracle, SQL Server, PostgreSQL, MySQL, Teradata, Hive, Spark SQL und Trino. Die obigen Beispiele verwenden generisches SQL, T-SQL, dbt-templatisiertes SQL und Snowflake-Syntax. Jede Syntax wird anhand ihrer eigenen Grammatik und nicht anhand einer generischen ANSI-Grammatik analysiert.<\/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\">Wandeln Sie Ihre eigenen SQL-Abfragen in ein Herkunftsdiagramm um.<\/h2>\n\n\n<p>F\u00fcgen Sie eine Abfrage, eine Prozedur oder ein komplettes Skript in den kostenlosen Visualisierer ein und erhalten Sie innerhalb von Sekunden ein Diagramm auf Spaltenebene. F\u00fcr gr\u00f6\u00dfere Datenbanklandschaften sprechen Sie uns bitte auf das Enterprise-Repository an.<\/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\">Testen Sie SQLFlow kostenlos<\/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\/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\": \"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>Ein Beispiel zur Datenherkunft zeigt anhand eines konkreten SQL-Abschnitts, welche Quelltabellen und -spalten welche Ausgabespalten speisen und welche Transformationen die Daten durchlaufen. Die sechs unten aufgef\u00fchrten Beispiele decken Situationen ab, denen Dateningenieure in der Praxis begegnen: ein einfacher INSERT-SELECT-Abschnitt, eine Multi-CTE-Transformation, eine Kette von Sichten, eine gespeicherte Prozedur mit dynamischem SQL, eine DBT-Modellkette und ein datenbank\u00fcbergreifender ETL-Prozess. Jedes Beispiel enth\u00e4lt den SQL-Abschnitt und beschreibt anschlie\u00dfend den zugeh\u00f6rigen Datenherkunftsgraphen. 6 Beispiele mit jeweils realem SQL, 39 SQL-Dialekte, jeweils mit eigenem Parser, Spaltenebene (nicht nur Tabellenebene), Direkt\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\/6748"}],"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=6748"}],"version-history":[{"count":1,"href":"https:\/\/www.gudusoft.com\/de\/wp-json\/wp\/v2\/pages\/6748\/revisions"}],"predecessor-version":[{"id":6823,"href":"https:\/\/www.gudusoft.com\/de\/wp-json\/wp\/v2\/pages\/6748\/revisions\/6823"}],"wp:attachment":[{"href":"https:\/\/www.gudusoft.com\/de\/wp-json\/wp\/v2\/media?parent=6748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}