{"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\/fr\/lignee-de-donnees-spark-sql\/","title":{"rendered":"Tra\u00e7abilit\u00e9 des donn\u00e9es Spark SQL\u00a0: Tra\u00e7abilit\u00e9 des colonnes pour les pipelines Spark"},"content":{"rendered":"<p><strong>Tra\u00e7abilit\u00e9 des donn\u00e9es Spark SQL<\/strong> est la carte au niveau des colonnes de la fa\u00e7on dont les donn\u00e9es circulent dans votre code Spark SQL\u00a0: quelles colonnes sources alimentent chaque table \u00e9crite par un <code>CR\u00c9ER LA TABLE ... COMME S\u00c9LECTION<\/code> ou <code>INSERER \u00c9CRASER<\/code>et \u00e0 travers lesquels des vues temporaires, des jointures, des fonctions et des filtres sont utilis\u00e9s en cours de route. <strong>Gudu SQLFlow<\/strong> Ce module g\u00e9n\u00e8re cette carte en analysant statiquement votre requ\u00eate Spark SQL gr\u00e2ce \u00e0 un analyseur syntaxique d\u00e9di\u00e9 au dialecte Spark\u00a0; aucun cluster \u00e0 instrumenter, aucun \u00e9couteur \u00e0 connecter et aucune ex\u00e9cution de t\u00e2che n&#039;est n\u00e9cessaire. Collez le code SQL et obtenez le diagramme de lignage.<\/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>Essayez-le maintenant\u00a0:<\/strong> collez n&#039;importe quel script Spark SQL dans le <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\">Visualiseur de lign\u00e9es SQL en ligne gratuit<\/a>S\u00e9lectionnez le dialecte Spark et suivez n&#039;importe quelle colonne en amont ou en aval. L&#039;\u00e9dition Cloud propose une version gratuite.<\/p>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c9couteurs d&#039;ex\u00e9cution vs analyse statique\u00a0: deux fa\u00e7ons d&#039;obtenir la lign\u00e9e Spark<\/h2>\n\n\n\n<p>Dans l&#039;univers Spark, il existe deux approches fondamentalement diff\u00e9rentes en mati\u00e8re de lign\u00e9e, et la plupart des \u00e9quipes finissent par avoir besoin des deux.<\/p>\n\n\n\n<p><strong>Lign\u00e9e d&#039;ex\u00e9cution<\/strong> L&#039;approche adopt\u00e9e par OpenLineage et son int\u00e9gration Spark consiste \u00e0 connecter un \u00e9couteur \u00e0 la session Spark et \u00e0 \u00e9mettre des \u00e9v\u00e9nements de tra\u00e7abilit\u00e9 \u00e0 chaque ex\u00e9cution de t\u00e2che. Elle est particuli\u00e8rement performante\u00a0: elle enregistre les op\u00e9rations ex\u00e9cut\u00e9es, leur date et heure d&#039;ex\u00e9cution, ainsi que les jeux de donn\u00e9es concern\u00e9s, gr\u00e2ce \u00e0 des m\u00e9tadonn\u00e9es d&#039;ex\u00e9cution inaccessibles par l&#039;analyse statique. Si vous vous demandez \u00ab\u00a0quelles op\u00e9rations le pipeline d&#039;hier soir a-t-il effectu\u00e9es\u00a0?\u00a0\u00bb, la tra\u00e7abilit\u00e9 en temps r\u00e9el vous apporte la r\u00e9ponse.<\/p>\n\n\n\n<p><strong>lign\u00e9e statique<\/strong> L&#039;approche de SQLFlow consiste \u00e0 analyser le texte SQL lui-m\u00eame et \u00e0 en d\u00e9duire la lign\u00e9e \u00e0 partir du code, comme le ferait un compilateur. Cela permet de couvrir tout ce que la capture dynamique ne peut pas faire structurellement.<\/p>\n\n\n\n<ul><li><strong>Requ\u00eate SQL que vous n&#039;avez pas encore ex\u00e9cut\u00e9e.<\/strong> Un nouveau pipeline dans une demande d&#039;extraction, un script h\u00e9rit\u00e9 d&#039;une autre \u00e9quipe, une s\u00e9rie de t\u00e2ches planifi\u00e9es trimestriellement \u2014 aucun de ces \u00e9l\u00e9ments n&#039;\u00e9met d&#039;\u00e9v\u00e9nements d&#039;ex\u00e9cution avant leur ex\u00e9cution, \u00e9ventuellement sur des donn\u00e9es de production.<\/li>\n<li><strong>Revue de code.<\/strong> Les r\u00e9viseurs peuvent consulter le graphique complet des d\u00e9pendances au niveau des colonnes d&#039;une modification avant de l&#039;approuver, au lieu de d\u00e9couvrir son impact apr\u00e8s le d\u00e9ploiement.<\/li>\n<li><strong>Audits de migration.<\/strong> Lorsque vous migrez des charges de travail vers Spark (g\u00e9n\u00e9ralement depuis Hive), vous avez besoin du graphe de d\u00e9pendances de <em>entier<\/em> Le code source, y compris les t\u00e2ches qui ne s&#039;ex\u00e9cutent qu&#039;en fin de mois, est analys\u00e9 statiquement en une seule passe.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>\u00c9couteurs d&#039;ex\u00e9cution (OpenLineage)<\/th><th>Analyse statique (SQLFlow)<\/th><\/tr><\/thead><tbody>\n<tr><td>Lign\u00e9e captur\u00e9e<\/td><td>Pour chaque ex\u00e9cution de t\u00e2che, au fur et \u00e0 mesure de son ex\u00e9cution<\/td><td>\u00c0 partir du texte SQL, avant toute ex\u00e9cution<\/td><\/tr>\n<tr><td>N\u00e9cessite<\/td><td>\u00c9couteur configur\u00e9 sur la session Spark\u00a0; les t\u00e2ches doivent s&#039;ex\u00e9cuter<\/td><td>Les fichiers SQL, plus les m\u00e9tadonn\u00e9es de sch\u00e9ma facultatives<\/td><\/tr>\n<tr><td>Couvre le code non ex\u00e9cut\u00e9<\/td><td>Non \u2014 pas de course, pas d&#039;\u00e9v\u00e9nement<\/td><td>Oui \u2014 demandes de fusion, listes d&#039;attente, t\u00e2ches rarement ex\u00e9cut\u00e9es<\/td><\/tr>\n<tr><td>M\u00e9tadonn\u00e9es d&#039;ex\u00e9cution (dur\u00e9e, versions)<\/td><td>Oui<\/td><td>Non \u2014 uniquement au niveau du code<\/td><\/tr>\n<tr><td>Utilisation typique<\/td><td>Observabilit\u00e9 op\u00e9rationnelle des pipelines en production<\/td><td>Analyse d&#039;impact, revue de code, audits de migration, documentation de conformit\u00e9<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p>Ces deux types de donn\u00e9es sont compl\u00e9mentaires, et non concurrents. La tra\u00e7abilit\u00e9 d&#039;ex\u00e9cution d\u00e9crit le d\u00e9roulement des op\u00e9rations\u00a0; la tra\u00e7abilit\u00e9 statique d\u00e9crit le comportement du code. Les adaptateurs d&#039;exportation de SQLFlow pour DataHub, Microsoft Purview et OpenMetadata permettent d&#039;int\u00e9grer la tra\u00e7abilit\u00e9 statique dans le m\u00eame catalogue que les \u00e9v\u00e9nements d&#039;ex\u00e9cution, afin que les deux vues soient accessibles simultan\u00e9ment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple\u00a0: une cha\u00eene de vues temporaires dans un CTAS<\/h2>\n\n\n\n<p>Le mod\u00e8le qui met en \u00e9chec les outils de tra\u00e7abilit\u00e9 na\u00effs dans Spark SQL est la cha\u00eene de vues temporaires. Les notebooks et les t\u00e2ches ex\u00e9cutent r\u00e9guli\u00e8rement des \u00e9tapes logiques \u00e0 travers cette cha\u00eene. <code>CR\u00c9ER OU REMPLACER LA VUE TEMPORAIRE<\/code> \u00e9tapes avant une finale <code>CR\u00c9ER LA TABLE ... COMME S\u00c9LECTION<\/code>Voici un exemple concis mais r\u00e9aliste\u00a0:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CR\u00c9ER OU REMPLACER LA VUE TEMPORAIRE clean_events COMME 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); CR\u00c9ER OU REMPLACER LA VUE TEMPORAIRE user_daily COMME 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); CR\u00c9ER LA TABLE analytics.user_spend_30d USING PARQUET COMME 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>Demandez \u00ab o\u00f9 est-ce que <code>analytics.user_spend_30d.daily_spend<\/code> \u00ab D\u2019o\u00f9 viennent-ils ? \u00bb et la r\u00e9ponse honn\u00eate n\u00e9cessite de r\u00e9soudre deux couches de vue : <code>d\u00e9penses quotidiennes<\/code> est <code>SOMME(clean_events.amount)<\/code>, et <code>clean_events.amount<\/code> est <code>montant.\u00e9v\u00e9nements.brut<\/code>SQLFlow effectue pr\u00e9cis\u00e9ment cette r\u00e9solution et affiche la cha\u00eene compl\u00e8te. <code>montant.\u00e9v\u00e9nements.brut<\/code> \u00e0 travers <code>\u00e9v\u00e9nements de nettoyage<\/code> et <code>utilisateur_quotidien<\/code> dans la table finale, avec le <code>SOMME<\/code> agr\u00e9gation attach\u00e9e au bord o\u00f9 elle se produit.<\/p>\n\n\n\n<p>Il capture \u00e9galement ce que la plupart des outils laissent compl\u00e8tement de c\u00f4t\u00e9\u00a0: <strong>lign\u00e9e indirecte<\/strong>Les colonnes <code>date_\u00e9v\u00e9nement<\/code>, <code>nom_\u00e9v\u00e9nement<\/code>, et la cl\u00e9 de jointure <code>ID de l&#039;utilisateur<\/code> n&#039;apparaissent jamais dans <code>d\u00e9penses quotidiennes<\/code>, pourtant tous les trois d\u00e9terminent sa valeur \u2014 modifiez le filtre de 30 jours ou le <code>&#039;achat&#039;<\/code> Chaque pr\u00e9dicat et chaque valeur num\u00e9rique du r\u00e9sultat sont modifi\u00e9s. SQLFlow mod\u00e9lise ces modifications comme un type de relation distinct et activable, permettant ainsi de visualiser le flux de donn\u00e9es pur ou l&#039;ensemble de la surface d&#039;impact. Pour une analyse des modifications de sch\u00e9ma, c&#039;est la surface d&#039;impact qui est la vue la plus pertinente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Spark SQL construit SQLFlow r\u00e9sout<\/h2>\n\n\n\n<p>SQLFlow int\u00e8gre un analyseur syntaxique pour le dialecte Spark SQL \u2014 l&#039;un des 39 analyseurs sp\u00e9cifiques \u00e0 chaque dialecte, et non une grammaire ANSI g\u00e9n\u00e9rique \u00e0 laquelle on aurait ajout\u00e9 des mots-cl\u00e9s Spark. Pour Spark SQL en particulier, il g\u00e8re les instructions qui conservent la trace des requ\u00eates.<\/p>\n\n\n\n<ul><li><strong><code>CR\u00c9ER LA TABLE ... COMME S\u00c9LECTION<\/code> (CTAS)<\/strong> \u2014 l&#039;\u00e9l\u00e9ment essentiel des pipelines par lots Spark\u00a0; chaque colonne de sortie est retrac\u00e9e jusqu&#039;\u00e0 ses sources via l&#039;int\u00e9gralit\u00e9 de la requ\u00eate SELECT.<\/li>\n<li><strong><code>INS\u00c9RER DANS<\/code> et <code>INSERER \u00c9CRASER<\/code><\/strong> \u2014 y compris le mappage des colonnes positionnelles entre la liste SELECT et le sch\u00e9ma de la table cible.<\/li>\n<li><strong><code>CR\u00c9ER OU REMPLACER LA VUE TEMPORAIRE<\/code><\/strong> \u2014 Les vues temporaires sont r\u00e9solues et cha\u00een\u00e9es, de sorte que la lign\u00e9e circule \u00e0 travers les couches interm\u00e9diaires au lieu de s&#039;y arr\u00eater.<\/li>\n<li><strong>CTE, sous-requ\u00eates et <code>S\u00c9LECTIONNER *<\/code><\/strong> \u2014 Les r\u00e9f\u00e9rences de colonnes sont r\u00e9solues via des expressions de table communes et des sous-requ\u00eates imbriqu\u00e9es, et les expressions en forme d&#039;\u00e9toile sont d\u00e9velopp\u00e9es en colonnes r\u00e9elles lorsque les m\u00e9tadonn\u00e9es du sch\u00e9ma sont disponibles.<\/li>\n<li><strong>Fonctions, conversions de type et op\u00e9rateurs ensemblistes<\/strong> \u2014 l&#039;historique de chaque colonne de sortie indique les transformations qu&#039;elle a subies. <code>d\u00e9penses quotidiennes<\/code> ce n&#039;est pas seulement \u00ab\u00a0\u00e0 partir du montant\u00a0\u00bb mais \u00ab\u00a0\u00e0 partir de\u00a0\u00bb. <code>montant<\/code> via <code>SOMME<\/code>&#8220;.<\/li><\/ul>\n\n\n\n<p>Sous le capot, on trouve le moteur d&#039;analyse syntaxique SQL g\u00e9n\u00e9ral, une interface de compilation SQL commerciale d\u00e9velopp\u00e9e depuis le milieu des ann\u00e9es 2000 et valid\u00e9e \u00e0 l&#039;aide d&#039;environ 13\u00a0600 jeux de donn\u00e9es de test par dialecte. La qualit\u00e9 du lignage est avant tout un probl\u00e8me d&#039;analyse syntaxique, et c&#039;est ce corpus qui emp\u00eache les cas limites de syntaxe Spark de produire silencieusement des erreurs de syntaxe.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O\u00f9 la tra\u00e7abilit\u00e9 des donn\u00e9es Spark SQL s&#039;int\u00e8gre-t-elle dans votre architecture\u00a0?<\/h2>\n\n\n\n<p>Spark fonctionne rarement de mani\u00e8re isol\u00e9e. Ses tables r\u00e9sident g\u00e9n\u00e9ralement dans un m\u00e9tastore Hive, et une part croissante des charges de travail Spark s&#039;ex\u00e9cute sur Databricks. SQLFlow les traite comme des dialectes \u00e0 part enti\u00e8re, analys\u00e9s s\u00e9par\u00e9ment\u00a0:<\/p>\n\n\n\n<ul><li>Vous migrez des t\u00e2ches Hive vers Spark\u00a0? Analysez le code HQL existant avec\u2026 <a href=\"https:\/\/www.gudusoft.com\/fr\/lignee-des-donnees-de-la-ruche\/\">Analyseur de lignage des donn\u00e9es Hive<\/a> et les t\u00e2ches r\u00e9\u00e9crites avec l&#039;analyseur Spark, et comparez les deux graphes de d\u00e9pendance pour v\u00e9rifier qu&#039;aucun \u00e9l\u00e9ment n&#039;a \u00e9t\u00e9 omis lors de la traduction.<\/li>\n<li>Vous utilisez Databricks\u00a0? <a href=\"https:\/\/www.gudusoft.com\/fr\/lignee-des-donnees-databricks\/\">Analyseur de lignage de donn\u00e9es Databricks<\/a> couvre le dialecte SQL de Databricks, qui a diverg\u00e9 du langage open-source Spark SQL d&#039;une mani\u00e8re qu&#039;une grammaire partag\u00e9e unique ne g\u00e8re pas correctement.<\/li>\n<li>Environnement mixte\u00a0? SQLFlow analyse les 39 dialectes pris en charge dans un seul r\u00e9f\u00e9rentiel de lignage. Ainsi, une t\u00e2che Spark lisant une table produite par une t\u00e2che Snowflake appara\u00eet sous la forme d&#039;un graphe continu. Voir la <a href=\"https:\/\/www.gudusoft.com\/fr\/outil-de-lignee-de-donnees-sql\/\">Pr\u00e9sentation de l&#039;outil de tra\u00e7abilit\u00e9 des donn\u00e9es SQL<\/a> pour avoir une vue d&#039;ensemble.<\/li><\/ul>\n\n\n\n<p>Les entr\u00e9es sont flexibles\u00a0: coller du code SQL, importer des fichiers, r\u00e9cup\u00e9rer des m\u00e9tadonn\u00e9es via JDBC ou importer un manifeste dbt pour les projets dbt sur Spark. La sortie est un diagramme interactif et d\u00e9taill\u00e9, ainsi que des exportations aux formats JSON, CSV et PNG et une API REST pour l\u2019automatisation\u00a0\u2014 par exemple, l\u2019analyse du code SQL modifi\u00e9 lors d\u2019une requ\u00eate d\u2019extraction dans le cadre d\u2019une \u00e9tape d\u2019int\u00e9gration continue.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00e9ploiement et mise \u00e0 l&#039;\u00e9chelle<\/h2>\n\n\n\n<p>SQLFlow Cloud propose une version gratuite pour une utilisation interactive\u00a0; la version premium co\u00fbte 49,99\u00a0\u00a3\/mois. Les \u00e9quipes dont les requ\u00eates SQL ne peuvent pas quitter le r\u00e9seau peuvent utiliser cette option. <a href=\"https:\/\/www.gudusoft.com\/fr\/sqlflow-on-premise-version\/\">SQLFlow sur site<\/a> \u2014 Docker ou Kubernetes, compatible avec les environnements isol\u00e9s, $500\/mois ou $4\u00a0800 en une seule fois par type de base de donn\u00e9es s\u00e9lectionn\u00e9. Dans tous les cas, SQLFlow effectue une analyse statique du code SQL uniquement\u00a0: il ne lit jamais les lignes de vos tables. Les d\u00e9ploiements en entreprise permettent d\u2019effectuer des analyses par lots de plus de 100 bases de donn\u00e9es et de plus d\u2019un million de colonnes, avec des analyses incr\u00e9mentales et un r\u00e9f\u00e9rentiel de lignage persistant.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Foire aux questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Ai-je besoin d&#039;un cluster Spark en fonctionnement pour obtenir la lign\u00e9e\u00a0?<\/h3>\n\n\n<p>Non. SQLFlow analyse le texte Spark SQL de mani\u00e8re statique. Vous pouvez analyser un script qui n&#039;a jamais \u00e9t\u00e9 ex\u00e9cut\u00e9 (une demande d&#039;extraction, une livraison fournisseur, une migration en attente) et obtenir la m\u00eame tra\u00e7abilit\u00e9 au niveau des colonnes que pour du code en production.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">En quoi cela diff\u00e8re-t-il de l&#039;int\u00e9gration Spark d&#039;OpenLineage\u00a0?<\/h3>\n\n\n<p>OpenLineage capture la lign\u00e9e en temps r\u00e9el gr\u00e2ce \u00e0 un \u00e9couteur sur la session Spark, ce qui est id\u00e9al pour observer le d\u00e9roulement exact des t\u00e2ches en cours. SQLFlow, quant \u00e0 lui, extrait la lign\u00e9e directement du code SQL, couvrant ainsi \u00e9galement le code non ex\u00e9cut\u00e9. Il prend en charge les revues avant fusion et les audits de migration, et ne n\u00e9cessite aucun acc\u00e8s au cluster. Ces deux outils sont compl\u00e9mentaires\u00a0; SQLFlow peut exporter la lign\u00e9e vers DataHub, Purview ou OpenMetadata, en plus de la lign\u00e9e d&#039;ex\u00e9cution.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SQLFlow peut-il retracer la lign\u00e9e \u00e0 travers les vues temporaires\u00a0?<\/h3>\n\n\n<p>Oui. Cha\u00eenes de <code>CR\u00c9ER OU REMPLACER LA VUE TEMPORAIRE<\/code> Les instructions sont r\u00e9solues de bout en bout, de sorte qu&#039;une colonne dans un CTAS final remonte \u00e0 travers chaque vue interm\u00e9diaire jusqu&#039;\u00e0 la table source physique, les fonctions et les agr\u00e9gations \u00e9tant appliqu\u00e9es \u00e0 chaque \u00e9tape.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Databricks SQL est-il identique \u00e0 Spark SQL dans ce cas ?<\/h3>\n\n\n<p>Non \u2014 SQLFlow les analyse avec des analyseurs syntaxiques distincts. Databricks SQL poss\u00e8de ses propres extensions syntaxiques, et donc sa propre grammaire. Si vous utilisez Databricks, utilisez le dialecte Databricks\u00a0; pour Spark open source, EMR ou les clusters autog\u00e9r\u00e9s, utilisez le dialecte Spark SQL.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Est-ce que SQLFlow lit mes donn\u00e9es\u00a0?<\/h3>\n\n\n<p>Non. Il analyse le code SQL et, en option, les m\u00e9tadonn\u00e9es du sch\u00e9ma (d\u00e9finitions des tables et des colonnes). Les donn\u00e9es des lignes ne sont jamais consult\u00e9es. En mode sur site, m\u00eame le texte SQL reste au sein de votre r\u00e9seau.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quel est le co\u00fbt du tra\u00e7age Spark SQL avec SQLFlow\u00a0?<\/h3>\n\n\n<p>SQLFlow Cloud est gratuit au d\u00e9part\u00a0; la version Premium co\u00fbte 49,99\u00a0\u00a3\/mois. La version sur site co\u00fbte 500\u00a0\u00a3\/mois ou 4\u00a0800\u00a0\u00a3 (paiement unique) par type de base de donn\u00e9es s\u00e9lectionn\u00e9, installable sur deux serveurs. Voir <a href=\"https:\/\/www.gudusoft.com\/fr\/tarification\/\">tarification<\/a> pour plus de d\u00e9tails.<\/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\">Suivez votre ex\u00e9cution Spark SQL d\u00e8s maintenant<\/h2>\n\n\n<p>Collez un script Spark SQL dans le visualiseur gratuit et suivez n&#039;importe quelle colonne de la source \u00e0 la cible, ou contactez-nous pour analyser l&#039;ensemble de votre syst\u00e8me.<\/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\">Essayez SQLFlow gratuitement<\/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\/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\": \"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\/fr\/wp-json\/wp\/v2\/pages\/6761"}],"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=6761"}],"version-history":[{"count":0,"href":"https:\/\/www.gudusoft.com\/fr\/wp-json\/wp\/v2\/pages\/6761\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gudusoft.com\/fr\/wp-json\/wp\/v2\/media?parent=6761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}