{"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\/fr\/exemples-de-lignees-de-donnees\/","title":{"rendered":"Exemples de tra\u00e7abilit\u00e9 des donn\u00e9es\u00a0: 6 sc\u00e9narios r\u00e9els avec SQL et diagrammes"},"content":{"rendered":"<p>UN <strong>exemple de lign\u00e9e de donn\u00e9es<\/strong> Pour un exemple concret de requ\u00eate SQL, cela montre quelles tables et colonnes sources alimentent quelles colonnes de sortie, et quelles transformations les donn\u00e9es subissent. Les six exemples d\u00e9taill\u00e9s ci-dessous couvrent les situations que rencontrent r\u00e9ellement les ing\u00e9nieurs de donn\u00e9es\u00a0: une requ\u00eate SQL simple <code>INSERTION-S\u00c9LECTION<\/code>Chaque exemple pr\u00e9sente une transformation multi-CTE, une cha\u00eene de vues, une proc\u00e9dure stock\u00e9e avec SQL dynamique, une cha\u00eene de mod\u00e8les dbt et un flux ETL inter-bases de donn\u00e9es. Il fournit ensuite le code SQL correspondant, puis d\u00e9crit pr\u00e9cis\u00e9ment le graphe de tra\u00e7abilit\u00e9 associ\u00e9.<\/p>\n\n\n\n<div class=\"gd-stats\"><div class=\"gd-stat\"><b>6<\/b><span>Des exemples concrets, chacun contenant du SQL r\u00e9el.<\/span><\/div><div class=\"gd-stat\"><b>39<\/b><span>dialectes SQL, chacun un analyseur syntaxique d\u00e9di\u00e9<\/span><\/div><div class=\"gd-stat\"><b>Niveau de colonne<\/b><span>granularit\u00e9, et pas seulement au niveau des tables<\/span><\/div><div class=\"gd-stat\"><b>Direct + indirect<\/b><span>bords, tous deux suivis<\/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>Chaque exemple de cette page est reproductible\u00a0:<\/strong> collez le code SQL dans le <a href=\"https:\/\/sqlflow.gudusoft.com\/?utm_source=gudusoft&amp;utm_medium=website&amp;utm_campaign=data-lineage-examples\" target=\"_blank\" rel=\"noreferrer noopener\">Visualiseur de lignage SQLFlow gratuit<\/a> et vous obtenez le diagramme interactif d\u00e9crit ci-dessous.<\/p>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Comment lire ces exemples<\/h2>\n\n\n\n<p><strong class=\"gd-lead-in\">Chaque graphe de lignage contient deux types d&#039;ar\u00eates.<\/strong> UN <strong>direct<\/strong> Un \u00ab edge \u00bb signifie que les donn\u00e9es circulent physiquement d&#039;une colonne source vers une colonne cible, \u00e9ventuellement par le biais d&#039;une fonction ou d&#039;une agr\u00e9gation. <strong>indirect<\/strong> bord signifie qu&#039;une colonne fa\u00e7onne le r\u00e9sultat sans y entrer : colonnes utilis\u00e9es dans <code>O\u00d9<\/code>, <code>REJOINDRE<\/code>, et <code>GROUPER PAR<\/code> clauses. N\u00e9gliger les liens indirects est une erreur fr\u00e9quente dans l&#039;analyse d&#039;impact, car la suppression d&#039;une colonne de filtre invalide un rapport tout autant que la suppression d&#039;une colonne s\u00e9lectionn\u00e9e. Si ces termes vous sont nouveaux, commencez par <a href=\"https:\/\/www.gudusoft.com\/fr\/quest-ce-que-la-lignee-de-donnees\/\">Qu&#039;est-ce que la tra\u00e7abilit\u00e9 des donn\u00e9es ?<\/a> et <a href=\"https:\/\/www.gudusoft.com\/fr\/lignee-de-donnees-au-niveau-des-colonnes\/\">Comment fonctionne la lign\u00e9e au niveau des colonnes<\/a>, puis revenez.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple 1\u00a0: un exemple simple de tra\u00e7abilit\u00e9 des donn\u00e9es INSERT-SELECT<\/h2>\n\n\n\n<p>Le point de d\u00e9part de toute discussion sur la lign\u00e9e\u00a0: une d\u00e9claration r\u00e9pertoriant les donn\u00e9es agr\u00e9g\u00e9es dans un tableau r\u00e9capitulatif.<\/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>Le graphique de lignage comporte trois tableaux (<code>ordres<\/code>, <code>clients<\/code>, <code>r\u00e9sum\u00e9 des ventes<\/code>) et ces bords au niveau des colonnes\u00a0:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Colonne cible<\/th><th>Colonne source<\/th><th>Type de bord<\/th><th>Via<\/th><\/tr><\/thead><tbody>\n<tr><td><code>r\u00e9sum\u00e9_des_ventes.r\u00e9gion<\/code><\/td><td><code>clients.r\u00e9gion<\/code><\/td><td>Direct<\/td><td>copie simple<\/td><\/tr>\n<tr><td><code>r\u00e9sum\u00e9_des_ventes.montant_total<\/code><\/td><td><code>commandes.montant<\/code><\/td><td>Direct<\/td><td><code>SOMME()<\/code><\/td><\/tr>\n<tr><td><code>r\u00e9sum\u00e9_des_ventes.*<\/code><\/td><td><code>statut des commandes<\/code><\/td><td>Indirect<\/td><td><code>O\u00d9<\/code> filtre<\/td><\/tr>\n<tr><td><code>r\u00e9sum\u00e9_des_ventes.*<\/code><\/td><td><code>commandes.identifiant_client<\/code>, <code>clients.id<\/code><\/td><td>Indirect<\/td><td><code>REJOINDRE<\/code> condition<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p>Notez ce que le graphique vous indique d\u00e9j\u00e0 et qu&#039;une vue au niveau du tableau ne permettrait pas de savoir\u00a0: <code>clients.email<\/code> et toutes les autres colonnes non touch\u00e9es ne jouent aucun r\u00f4le ici, et <code>statut des commandes<\/code> M\u00eame si cela n&#039;appara\u00eet jamais dans le r\u00e9sultat, c&#039;est important. De nombreux outils de tra\u00e7abilit\u00e9 ignorent compl\u00e8tement cette derni\u00e8re \u00e9tape\u00a0; SQLFlow mod\u00e9lise la tra\u00e7abilit\u00e9 directe et indirecte comme des types de relations distincts et activables.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple 2\u00a0: transformation multi-CTE<\/h2>\n\n\n\n<p>CTE sont le point de d\u00e9part des diagrammes de lignage dessin\u00e9s \u00e0 la main, car chaque CTE repr\u00e9sente une relation temporaire que le graphe doit traverser sans perdre la trace des sources originales.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>AVEC 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>Le graphique de lign\u00e9e s&#039;affiche <code>tous les jours<\/code> et <code>class\u00e9<\/code> comme n\u0153uds interm\u00e9diaires, le chemin complet de la colonne int\u00e9ressante se lit donc comme suit\u00a0: <code>commandes.montant<\/code> \u2192 <code>SOMME()<\/code> \u2192 <code>total quotidien.jour<\/code> \u2192 <code>class\u00e9.jour_total<\/code> \u2192 <code>meilleur_jour_revenu<\/code>La fonction de fen\u00eatre cr\u00e9e une cha\u00eene plus subtile\u00a0: <code>rn<\/code> est calcul\u00e9 \u00e0 partir de <code>identifiant_client<\/code> (partition) et <code>total_jour<\/code> (commande), puis <code>O\u00d9 rn = 1<\/code> fait <code>rn<\/code> une entr\u00e9e indirecte pour chaque colonne de sortie. <code>commandes.montant<\/code> influences <code>meilleur_jour_revenu<\/code> Deux fois\u00a0: directement par la somme, et indirectement par le classement qui d\u00e9termine quelle ligne est conserv\u00e9e. Un r\u00e9solveur qui effectue uniquement une correspondance de motifs sur les noms de colonnes ne peut pas voir ce second chemin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple 3 : une cha\u00eene de vues<\/h2>\n\n\n\n<p>Les vues s&#039;empilent. Dans un entrep\u00f4t de donn\u00e9es mature, un rapport se trouve souvent \u00e0 trois ou quatre d\u00e9finitions de vues des tables physiques, et la question \u00ab d&#039;o\u00f9 vient r\u00e9ellement ce chiffre ? \u00bb n\u00e9cessite de parcourir toute la cha\u00eene.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CR\u00c9ER UNE VUE v_active_customers COMME S\u00c9LECTIONNER id, nom, email DE customers WHERE status = &#039;active&#039;; CR\u00c9ER UNE VUE v_customer_revenue COMME S\u00c9LECTIONNER a.id, a.name, SUM(o.amount) COMME revenu DE v_active_customers a JOIN orders o SUR o.customer_id = a.id GROUPER PAR a.id, a.name;<\/code><\/pre>\n\n\n\n<p>Le graphique montre <code>v_revenu_client.revenu<\/code> en suivant la limite de la vue jusqu&#039;\u00e0 <code>commandes.montant<\/code>, avec <code>statut des clients<\/code> attach\u00e9e comme une ar\u00eate indirecte h\u00e9rit\u00e9e du filtre de la premi\u00e8re vue. Elle r\u00e9v\u00e8le \u00e9galement quelque chose d&#039;utile dans l&#039;autre sens\u00a0: <code>v_clients_actifs.email<\/code> est s\u00e9lectionn\u00e9e par la premi\u00e8re vue mais n&#039;est utilis\u00e9e par aucune autre vue en aval. Les colonnes mortes comme celle-ci sont pr\u00e9cis\u00e9ment celles que vous devez identifier avant un nettoyage ou une migration, car elles sont invisibles au niveau de la table. Lorsque les d\u00e9finitions de vues utilisent <code>S\u00c9LECTIONNER *<\/code>SQLFlow \u00e9tend l&#039;\u00e9toile par rapport au sch\u00e9ma afin que chaque colonne h\u00e9rit\u00e9e soit toujours r\u00e9solue vers sa source physique.<\/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\">Exemple 4\u00a0: proc\u00e9dure stock\u00e9e avec SQL dynamique<\/h2>\n\n\n\n<p>Voici un exemple qui distingue les outils de tra\u00e7abilit\u00e9, car le nom de la table cible n&#039;appara\u00eet m\u00eame pas litt\u00e9ralement dans le code. Voici une proc\u00e9dure SQL Server qui cr\u00e9e un instantan\u00e9 mensuel \u00e0 l&#039;aide d&#039;une table temporaire et d&#039;une structure assembl\u00e9e dynamiquement. <code>INS\u00c9RER<\/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>Le graphe de lignage correct franchit les deux obstacles\u00a0: <code>commandes.montant<\/code> \u2192 <code>SOMME()<\/code> \u2192 <code>#mensuel.total_mois<\/code> \u2192 <code>instantan\u00e9_mensuel.total_du_mois<\/code>, avec <code>commandes.date_de_commande<\/code> comme un bord indirect \u00e0 travers le <code>O\u00d9<\/code> clause et la <code>@mois<\/code> Le param\u00e8tre est suivi comme entr\u00e9e de ce filtre. Pour y parvenir, il faut un v\u00e9ritable analyseur proc\u00e9dural T-SQL (et non un s\u00e9parateur d&#039;instructions), le suivi des tables temporaires entre les instructions et la r\u00e9solution de la cha\u00eene SQL transmise \u00e0 <code>sp_executesql<\/code>SQLFlow dispose d&#039;analyseurs syntaxiques d\u00e9di\u00e9s au T-SQL de SQL Server et au PL\/SQL d&#039;Oracle, r\u00e9sout le SQL dynamique au sein des proc\u00e9dures et g\u00e9n\u00e8re un graphe d&#039;appels montrant quelles proc\u00e9dures en appellent d&#039;autres, permettant ainsi de visualiser la tra\u00e7abilit\u00e9 des proc\u00e9dures. Le SQL dynamique repr\u00e9sente le principal point faible des outils de tra\u00e7abilit\u00e9\u00a0; lors de l&#039;\u00e9valuation d&#039;un outil, il est essentiel de le tester en priorit\u00e9 avec ce type d&#039;analyse.<\/p>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple 5\u00a0: cha\u00eene de mod\u00e8les dbt<\/h2>\n\n\n\n<p>dbt vous offre une tra\u00e7abilit\u00e9 au niveau du mod\u00e8le pr\u00eate \u00e0 l&#039;emploi via <code>ref()<\/code>Mais la question int\u00e9ressante se pose au niveau des colonnes\u00a0: quel champ source alimente quelle colonne du magasin, et par quels renommages interm\u00e9diaires\u00a0?<\/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>Importez le manifeste dbt du projet dans SQLFlow et le graphe r\u00e9sout les r\u00e9f\u00e9rences mod\u00e9lis\u00e9es en une cha\u00eene de colonnes concr\u00e8te\u00a0: <code>montant.de.commandes.brutes<\/code> \u2192 <code>stg_orders.montant<\/code> \u2192 <code>SOMME()<\/code> \u2192 <code>fct_revenu_client.revenu_vie<\/code>, avec le nouveau nom <code>identifiant<\/code> \u2192 <code>id_de_commande<\/code> pr\u00e9serv\u00e9 dans le houblon de mise en sc\u00e8ne et <code>statut<\/code> Ce flux est indirect et provient du filtre du magasin. Le manifeste reliant les mod\u00e8les aux objets de l&#039;entrep\u00f4t qu&#039;ils cr\u00e9ent, le m\u00eame graphe assure la coh\u00e9rence entre la tra\u00e7abilit\u00e9 g\u00e9r\u00e9e par dbt et tous les autres \u00e9l\u00e9ments externes \u00e0 dbt qui interagissent avec ces tables.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple 6\u00a0: ETL inter-bases de donn\u00e9es<\/h2>\n\n\n\n<p>Les moteurs de traitement des donn\u00e9es immobili\u00e8res sont omnipr\u00e9sents. Voici un flux typique\u00a0: une base de donn\u00e9es SQL Server op\u00e9rationnelle est extraite vers un stockage cloud, charg\u00e9e dans l\u2019environnement de test Snowflake, puis transform\u00e9e en un sch\u00e9ma analytique. Le processus de chargement et de transformation se pr\u00e9sente comme suit\u00a0:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Snowflake COPIE DANS staging.orders_raw DE @s3_extract\/orders\/; INS\u00c9RER DANS analytics.fct_orders (order_id, customer_id, amount_usd) S\u00c9LECTIONNER r.order_id, r.customer_id, r.amount * fx.rate DE staging.orders_raw r JOIN staging.fx_rates fx SUR fx.currency = r.currency;<\/code><\/pre>\n\n\n\n<p>Du c\u00f4t\u00e9 de Snowflake, le graphique montre <code>montant_USD<\/code> en tant que colonne calcul\u00e9e avec deux parents directs, <code>commandes_brutes.montant<\/code> et <code>taux_de_change.taux<\/code>, reli\u00e9s par l&#039;expression arithm\u00e9tique, plus <code>devise<\/code> Il s&#039;agit d&#039;une ar\u00eate indirecte issue de la condition de jointure. Pour couvrir l&#039;int\u00e9gralit\u00e9 du pipeline, SQLFlow est aliment\u00e9 de part et d&#039;autre dans leurs dialectes respectifs\u00a0: la logique d&#039;extraction T-SQL est analys\u00e9e par l&#039;analyseur SQL Server et les scripts Snowflake par l&#039;analyseur Snowflake, parmi 39 analyseurs sp\u00e9cifiques \u00e0 chaque dialecte. Dans les d\u00e9ploiements en entreprise, les r\u00e9sultats sont stock\u00e9s dans un r\u00e9f\u00e9rentiel de lignage persistant qui analyse par lots des environnements de plus de 100 bases de donn\u00e9es et plus d&#039;un million de colonnes. Ainsi, la vue d&#039;ensemble compl\u00e8te du pipeline SQL Server vers Snowflake est repr\u00e9sent\u00e9e dans un seul graphique et peut \u00eatre export\u00e9e vers DataHub, Microsoft Purview ou OpenMetadata.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu&#039;ont en commun ces six exemples ?<\/h2>\n\n\n\n<p>Chaque graphique ci-dessus a \u00e9t\u00e9 enti\u00e8rement d\u00e9riv\u00e9 du texte SQL et des m\u00e9tadonn\u00e9es de sch\u00e9ma. C&#039;est la m\u00e9thode de base. <a href=\"https:\/\/www.gudusoft.com\/fr\/outil-de-lignee-de-donnees-sql\/\">Tra\u00e7abilit\u00e9 des donn\u00e9es bas\u00e9e sur SQL<\/a>Comme la logique de transformation r\u00e9side d\u00e9j\u00e0 dans SQL, l&#039;analyse statique de ce SQL reconstruit la lign\u00e9e sans agent, sans acc\u00e8s au journal des requ\u00eates et sans jamais lire une seule ligne de vos donn\u00e9es. Les diff\u00e9rences entre les exemples r\u00e9sident uniquement dans la complexit\u00e9 de l&#039;analyse syntaxique, \u00e0 partir d&#039;une seule requ\u00eate. <code>INSERTION-S\u00c9LECTION<\/code> pour utiliser du SQL dynamique \u00e0 l&#039;int\u00e9rieur d&#039;une proc\u00e9dure.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Exemple<\/th><th>Ce que cela exerce<\/th><th>Partie difficile<\/th><\/tr><\/thead><tbody>\n<tr><td>1. INSERTION-S\u00c9LECTION<\/td><td>bords directs vs indirects<\/td><td>Mod\u00e9lisation <code>O\u00d9<\/code>\/<code>REJOINDRE<\/code> colonnes comme lign\u00e9e<\/td><\/tr>\n<tr><td>2. Multi-CTE<\/td><td>Relations interm\u00e9diaires<\/td><td>Entr\u00e9es de la fonction de fen\u00eatre\u00a0; chemin de filtrage sur le rang<\/td><\/tr>\n<tr><td>3. Voir la cha\u00eene<\/td><td>D\u00e9finitions imbriqu\u00e9es<\/td><td>Expansion stellaire ; d\u00e9couverte de colonnes mortes<\/td><\/tr>\n<tr><td>4. Proc\u00e9dure stock\u00e9e<\/td><td>Code de proc\u00e9dure<\/td><td>Tables temporaires et r\u00e9solution SQL dynamique<\/td><\/tr>\n<tr><td>5. Cha\u00eene DBT<\/td><td>SQL \u00e0 mod\u00e8les<\/td><td>R\u00e9solution <code>ref()<\/code>\/<code>source()<\/code> aux objets r\u00e9els<\/td><\/tr>\n<tr><td>6. ETL inter-bases de donn\u00e9es<\/td><td>Plusieurs dialectes<\/td><td>Fusion des graphiques par moteur dans un seul r\u00e9f\u00e9rentiel<\/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\">Consultez la lign\u00e9e de votre propre SQL<\/h2>\n\n\n<p>Collez n&#039;importe quelle requ\u00eate, proc\u00e9dure ou script et obtenez le graphique au niveau des colonnes en quelques secondes.<\/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\">Essayez SQLFlow gratuitement<\/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\/fr\/outil-de-lignee-de-donnees-sql\/\">Consultez l&#039;outil de lign\u00e9e<\/a><\/div>\n<\/div>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Foire aux questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Qu&#039;est-ce qu&#039;un diagramme de tra\u00e7abilit\u00e9 des donn\u00e9es\u00a0?<\/h3>\n\n\n<p>Un diagramme de lignage des donn\u00e9es est un graphe orient\u00e9 dont les n\u0153uds repr\u00e9sentent des tables, des vues ou des colonnes, et les ar\u00eates illustrent le flux de donn\u00e9es entre ces \u00e9l\u00e9ments via des transformations SQL. Les diagrammes au niveau des colonnes, comme ceux d\u00e9crits sur cette page, tracent une ar\u00eate par relation entre une colonne source et une colonne cible, annot\u00e9e avec la fonction ou la clause qui l&#039;a cr\u00e9\u00e9e.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Puis-je reproduire ces exemples moi-m\u00eame\u00a0?<\/h3>\n\n\n<p>Oui. Collez l&#039;un des extraits SQL ci-dessus dans le <a href=\"https:\/\/sqlflow.gudusoft.com\/?utm_source=gudusoft&amp;utm_medium=website&amp;utm_campaign=data-lineage-examples\">Visualiseur SQLFlow gratuit<\/a>Choisissez le dialecte correspondant, et le diagramme interactif s&#039;affiche en quelques secondes. L&#039;\u00e9dition cloud propose une version gratuite.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quelle est la diff\u00e9rence entre la lign\u00e9e directe et la lign\u00e9e indirecte\u00a0?<\/h3>\n\n\n<p>La lign\u00e9e directe signifie que les donn\u00e9es circulent d&#039;une colonne source vers une colonne cible, par exemple. <code>SOMME(commandes.montant)<\/code> alimentation <code>montant total<\/code>La filiation indirecte signifie qu&#039;une colonne influence le r\u00e9sultat sans y appara\u00eetre explicitement, comme par exemple une <code>O\u00d9<\/code> filtre ou <code>REJOINDRE<\/code> Point cl\u00e9. SQLFlow suit les deux comme des types de flux distincts et activables\u00a0; la plupart des outils ne capturent que le flux direct.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Est-il possible d&#039;extraire la lign\u00e9e des proc\u00e9dures stock\u00e9es et du SQL dynamique\u00a0?<\/h3>\n\n\n<p>Oui, mais il lui faut un analyseur syntaxique proc\u00e9dural, et non un simple analyseur de requ\u00eates. SQLFlow dispose d&#039;analyseurs d\u00e9di\u00e9s pour Oracle PL\/SQL et SQL Server T-SQL, assure le suivi de la lign\u00e9e \u00e0 travers les param\u00e8tres et les tables temporaires, r\u00e9sout les cha\u00eenes SQL construites au sein des proc\u00e9dures et dessine le graphe d&#039;appels de proc\u00e9dure \u00e0 proc\u00e9dure.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Les outils open source g\u00e8rent-ils ces exemples\u00a0?<\/h3>\n\n\n<p>En partie. Les biblioth\u00e8ques comme <code>SQL Lineage<\/code> et <code>sqlglot<\/code> Ces outils sont vraiment performants pour analyser les requ\u00eates individuelles et g\u00e8rent bien les exemples 1 et 2. Avant de valider vos modifications, il est conseill\u00e9 de tester les exemples 4 \u00e0 6\u00a0: code proc\u00e9dural avec SQL dynamique, lign\u00e9e indirecte en tant que type d&#039;ar\u00eate distinct et int\u00e9gration d&#039;un ensemble multidialectique dans un graphe interactif. Testez votre proc\u00e9dure stock\u00e9e la plus complexe avec n&#039;importe quel outil que vous \u00e9valuez et comparez les r\u00e9sultats.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Avec quels dialectes SQL ces exemples fonctionnent-ils\u00a0?<\/h3>\n\n\n<p>SQLFlow int\u00e8gre 39 analyseurs syntaxiques sp\u00e9cifiques \u00e0 chaque dialecte, notamment Snowflake, BigQuery, Redshift, Databricks, Oracle, SQL Server, PostgreSQL, MySQL, Teradata, Hive, Spark SQL et Trino. Les exemples ci-dessus utilisent la syntaxe SQL g\u00e9n\u00e9rique, T-SQL, SQL avec mod\u00e8les dbt et Snowflake\u00a0; chaque syntaxe est analys\u00e9e par sa propre grammaire plut\u00f4t que par une grammaire ANSI g\u00e9n\u00e9rique.<\/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\">Transformez votre propre SQL en un diagramme de lignage<\/h2>\n\n\n<p>Collez une requ\u00eate, une proc\u00e9dure ou un script complet dans le visualiseur gratuit et obtenez le graphique au niveau des colonnes en quelques secondes. Pour les environnements comportant de nombreuses bases de donn\u00e9es, contactez-nous concernant le r\u00e9f\u00e9rentiel d&#039;entreprise.<\/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\">Essayez SQLFlow gratuitement<\/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\/fr\/contact\/\">Demander une d\u00e9monstration pour entreprises<\/a><\/div>\n<\/div>\n\n<\/div><\/div>\n\n\n\n<script type=\"application\/ld+json\">{\n    \"@context\": \"https:\\\/\\\/schema.org\",\n    \"@graph\": [\n        {\n            \"@type\": \"TechArticle\",\n            \"headline\": \"Data Lineage Examples: 6 Real Scenarios with SQL and Diagrams\",\n            \"description\": \"Six worked data lineage examples with real SQL: INSERT-SELECT, multi-CTE transforms, view chains, stored procedures with dynamic SQL, dbt model chains, and cross-database ETL, each with the column-level lineage graph explained.\",\n            \"author\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Gudu Software\",\n                \"url\": \"https:\\\/\\\/www.gudusoft.com\\\/\"\n            },\n            \"publisher\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Gudu Software\",\n                \"url\": \"https:\\\/\\\/www.gudusoft.com\\\/\"\n            }\n        },\n        {\n            \"@type\": \"FAQPage\",\n            \"mainEntity\": [\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"What is a data lineage diagram?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"A data lineage diagram is a directed graph in which nodes are tables, views, or columns and edges show how data flows between them through SQL transformations. Column-level diagrams draw one edge per source-column-to-target-column relationship, annotated with the function or clause that created it.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Can I reproduce these examples myself?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"Yes. Paste any of the SQL snippets into the free SQLFlow visualizer at sqlflow.gudusoft.com, pick the matching dialect, and the interactive diagram appears in seconds. The cloud edition has a free tier.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"What is the difference between direct and indirect lineage?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"Direct lineage means data flows from a source column into a target column, for example SUM(orders.amount) feeding total_amount. Indirect lineage means a column influences the result without appearing in it, such as a WHERE filter or JOIN key. SQLFlow tracks both as separate, toggleable edge types.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Can lineage be extracted from stored procedures and dynamic SQL?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"Yes, but it needs a procedural parser. SQLFlow has dedicated parsers for Oracle PL\\\/SQL and SQL Server T-SQL, traces lineage through parameters and temp tables, resolves dynamic SQL built inside procedures, and draws the procedure-to-procedure call graph.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Do open-source tools handle these examples?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"Partially. Libraries like sqllineage and sqlglot parse individual queries well and handle simple INSERT-SELECT and CTE cases. The examples worth testing before you commit involve procedural code with dynamic SQL, indirect lineage as a separate edge type, and stitching a multi-dialect estate into one interactive graph.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Which SQL dialects do these examples work with?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"SQLFlow ships 39 dialect-specific parsers, including Snowflake, BigQuery, Redshift, Databricks, Oracle, SQL Server, PostgreSQL, MySQL, Teradata, Hive, Spark SQL, and Trino. Each dialect is parsed by its own grammar rather than a generic ANSI one.\"\n                    }\n                }\n            ]\n        }\n    ]\n}<\/script>","protected":false},"excerpt":{"rendered":"<p>A data lineage example shows, for a concrete piece of SQL, which source tables and columns feed which output columns, and through which transformations the data passes along the way. The six worked examples below cover the situations data engineers actually hit: a plain INSERT-SELECT, a multi-CTE transform, a chain of views, a stored procedure with dynamic SQL, a dbt model chain, and a cross-database ETL flow. Each example gives the SQL, then describes exactly what the lineage graph looks like for it. 6worked examples, each with real SQL 39SQL dialects, each a dedicated parser Column-levelgranularity, not just table-level Direct\u2026<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":5}},"_links":{"self":[{"href":"https:\/\/www.gudusoft.com\/fr\/wp-json\/wp\/v2\/pages\/6748"}],"collection":[{"href":"https:\/\/www.gudusoft.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gudusoft.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gudusoft.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gudusoft.com\/fr\/wp-json\/wp\/v2\/comments?post=6748"}],"version-history":[{"count":1,"href":"https:\/\/www.gudusoft.com\/fr\/wp-json\/wp\/v2\/pages\/6748\/revisions"}],"predecessor-version":[{"id":6823,"href":"https:\/\/www.gudusoft.com\/fr\/wp-json\/wp\/v2\/pages\/6748\/revisions\/6823"}],"wp:attachment":[{"href":"https:\/\/www.gudusoft.com\/fr\/wp-json\/wp\/v2\/media?parent=6748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}