<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>DataStage | </title>
    <link>http://localhost:1313/tags/datastage/</link>
      <atom:link href="http://localhost:1313/tags/datastage/index.xml" rel="self" type="application/rss+xml" />
    <description>DataStage</description>
    <generator>HugoBlox Kit (https://hugoblox.com)</generator><language>fr-FR</language><lastBuildDate>Thu, 02 Jul 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>http://localhost:1313/media/logo.svg</url>
      <title>DataStage</title>
      <link>http://localhost:1313/tags/datastage/</link>
    </image>
    
    <item>
      <title>Migration ETL - de l&#39;ETL legacy vers un ETL SQL ouvert - {oa.tbx}</title>
      <link>http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/</link>
      <pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate>
      <guid>http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/</guid>
      <description>&lt;p&gt;Une fois les traitements ETL convertis en SQL par &lt;strong style=&#34;color:#C00000;&#34;&gt;{openAudit}&lt;/strong&gt;, ils peuvent être exécutés dans le conteneur &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa.tbx}&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong style=&#34;color:#C00000;&#34;&gt;{oa.tbx}&lt;/strong&gt; fournit un environnement d&amp;rsquo;exécution pour des traitements SQL, Python ou Java, pilotés par des référentiels de configuration et d&amp;rsquo;orchestration.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; les traitements migrés deviennent des instructions SQL exécutables indépendamment de la plateforme ETL d&amp;rsquo;origine.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;principes&#34;&gt;Principes&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;encapsulation du SQL se fait dans des conteneurs ouverts, en mode ETL.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Des conteneurs :&lt;/strong&gt; les transformations s&amp;rsquo;exécutent dans un conteneur externe, &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa.tbx}&lt;/strong&gt;, détaché de la base de données cible. Les conteneurs temporaires servent de zones de stockage intermédiaires où les données sont chargées avant transformation. Les jobs sont testés pour vérifier leur fonctionnement, et possiblement les données, pour garantir leur intégrité.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Orchestration avec Airflow :&lt;/strong&gt; Airflow pilote l&amp;rsquo;exécution des conteneurs, étape par étape. Chaque transformation, au sein d&amp;rsquo;un conteneur, est définie comme un job.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;















&lt;figure  &gt;
  &lt;div class=&#34;flex justify-center	&#34;&gt;
    &lt;div class=&#34;w-full&#34; &gt;
          &lt;img alt=&#34;img-big&#34; 
               srcset=&#34;http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa_tbx_airflow_scheduling_hu_3d51582657fd7652.webp 320w, http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa_tbx_airflow_scheduling_hu_e491566fb88257d1.webp 480w, http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa_tbx_airflow_scheduling_hu_94523c4431e46e11.webp 760w&#34;
               sizes=&#34;(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px&#34;
               src=&#34;http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa_tbx_airflow_scheduling_hu_3d51582657fd7652.webp&#34;
               width=&#34;760&#34;
               height=&#34;456&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Le scheduling d&amp;rsquo;un ETL migré vers Airflow reprend automatiquement l&amp;rsquo;ensemble des instructions et de l&amp;rsquo;ordonnancement d&amp;rsquo;origine.&lt;/p&gt;
&lt;h2 id=&#34;chaîne-dexécution&#34;&gt;Chaîne d&amp;rsquo;exécution&lt;/h2&gt;
&lt;p&gt;Les jobs ETL sont convertis en SQL par &lt;strong style=&#34;color:#C00000;&#34;&gt;{openAudit}&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Les traitements produits sont intégrés dans un référentiel de configuration et un référentiel de pilotage utilisés par &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa.tbx}&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Les workflows sont ensuite orchestrés par des outils tels qu&amp;rsquo;Airflow ou Dagster.&lt;/p&gt;
&lt;h2 id=&#34;conteneur-dexécution&#34;&gt;Conteneur d&amp;rsquo;exécution&lt;/h2&gt;
&lt;p&gt;&lt;strong style=&#34;color:#C00000;&#34;&gt;{oa.tbx}&lt;/strong&gt; exécute les traitements décrits dans les workflows.&lt;/p&gt;
&lt;p&gt;Les dataflows peuvent combiner :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SQL ;&lt;/li&gt;
&lt;li&gt;Python ;&lt;/li&gt;
&lt;li&gt;Java ;&lt;/li&gt;
&lt;li&gt;autres.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le moteur peut également s&amp;rsquo;appuyer sur des bases embarquées telles que DuckDB pour certains traitements intermédiaires.&lt;/p&gt;
&lt;h2 id=&#34;sources-et-cibles&#34;&gt;Sources et cibles&lt;/h2&gt;
&lt;p&gt;Les données d&amp;rsquo;entrée peuvent provenir de n&amp;rsquo;importe quelle technologie accessible en SQL ou JDBC.&lt;/p&gt;
&lt;p&gt;Les résultats peuvent être chargés vers tout système cible compatible avec les mécanismes d&amp;rsquo;écriture standards.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;architecture reste indépendante des technologies source et cible.&lt;/p&gt;
&lt;h2 id=&#34;orchestration&#34;&gt;Orchestration&lt;/h2&gt;
&lt;p&gt;L&amp;rsquo;orchestration reste séparée des traitements.&lt;/p&gt;
&lt;p&gt;Les dépendances, paramètres d&amp;rsquo;exécution, planifications et déclenchements sont gérés par la couche workflow.&lt;/p&gt;
&lt;p&gt;Les traitements métier restent contenus dans les scripts SQL et les dataflows exécutés par &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa.tbx}&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;bénéfices&#34;&gt;Bénéfices&lt;/h2&gt;
&lt;p&gt;&lt;strong style=&#34;color:#C00000;&#34;&gt;{oa.tbx}&lt;/strong&gt; exécute des pipelines SQL ouverts, orchestrés par Airflow et indépendants des runtimes propriétaires des plateformes Cloud.&lt;/p&gt;
&lt;p&gt;















&lt;figure  &gt;
  &lt;div class=&#34;flex justify-center	&#34;&gt;
    &lt;div class=&#34;w-full&#34; &gt;
          &lt;img alt=&#34;img-big&#34; 
               srcset=&#34;http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa_tbx_benefices_hu_5564756e59bc4d9d.webp 320w, http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa_tbx_benefices_hu_bd62de57ae1ea1a3.webp 480w, http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa_tbx_benefices_hu_1190f45aaad4e051.webp 760w&#34;
               sizes=&#34;(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px&#34;
               src=&#34;http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa_tbx_benefices_hu_5564756e59bc4d9d.webp&#34;
               width=&#34;760&#34;
               height=&#34;343&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Sur l&amp;rsquo;ensemble des jobs migrés — des volumes allant de quelques milliers à plus de 50 millions de lignes — les temps d&amp;rsquo;exécution se comptent souvent en quelques secondes seulement, avec un statut OK quasi systématique.&lt;/p&gt;
&lt;p&gt;















&lt;figure  &gt;
  &lt;div class=&#34;flex justify-center	&#34;&gt;
    &lt;div class=&#34;w-full&#34; &gt;
          &lt;img alt=&#34;img-big&#34; 
               srcset=&#34;http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa_tbx_stats_execution_hu_34d4fedcd8cecdf1.webp 320w, http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa_tbx_stats_execution_hu_3fb20d1c6eee6385.webp 480w, http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa_tbx_stats_execution_hu_497d09f9b8ba11e5.webp 760w&#34;
               sizes=&#34;(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px&#34;
               src=&#34;http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa_tbx_stats_execution_hu_34d4fedcd8cecdf1.webp&#34;
               width=&#34;760&#34;
               height=&#34;372&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id=&#34;gouvernance-et-data-lineage&#34;&gt;Gouvernance et data lineage&lt;/h2&gt;
&lt;p&gt;Une fois les traitements ETL convertis en SQL, &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa.tbx}&lt;/strong&gt; conserve la trace complète entre la logique d&amp;rsquo;origine et le SQL exécuté. Ce data lineage est exposé à deux niveaux de lecture, adaptés à des besoins différents.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; une vue synthétique pour la gouvernance, un détail exhaustif pour la maintenance.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Vue high level du pipeline :&lt;/strong&gt; seules les tables source et cible sont visibles ; les stages ETL intermédiaires sont regroupés en un bloc SQL unique. Une vue lisible, même sur des pipelines complexes.&lt;/p&gt;
&lt;p&gt;















&lt;figure  &gt;
  &lt;div class=&#34;flex justify-center	&#34;&gt;
    &lt;div class=&#34;w-full&#34; &gt;
          &lt;img alt=&#34;img-big&#34; 
               srcset=&#34;http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa-tbx-lineage-high-level_hu_d24e651ccc9c22da.webp 320w, http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa-tbx-lineage-high-level_hu_224214e77cdcf373.webp 480w, http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa-tbx-lineage-high-level_hu_8b96fa8e67a1d56c.webp 760w&#34;
               sizes=&#34;(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px&#34;
               src=&#34;http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa-tbx-lineage-high-level_hu_d24e651ccc9c22da.webp&#34;
               width=&#34;760&#34;
               height=&#34;351&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Détail au clic sur une transformation :&lt;/strong&gt; au clic sur un stage (par exemple un Transformer), son équivalent SQL généré s&amp;rsquo;affiche, avec ses inputs/outputs et ses métadonnées d&amp;rsquo;origine (type, stage ID). Le mapping est immédiat entre la logique ETL d&amp;rsquo;origine et le SQL exécuté.&lt;/p&gt;
&lt;p&gt;















&lt;figure  &gt;
  &lt;div class=&#34;flex justify-center	&#34;&gt;
    &lt;div class=&#34;w-full&#34; &gt;
          &lt;img alt=&#34;img-big&#34; 
               srcset=&#34;http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa-tbx-lineage-detail-sql_hu_d42fe9268d15acff.webp 320w, http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa-tbx-lineage-detail-sql_hu_f03a4ff2d16cc351.webp 480w, http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa-tbx-lineage-detail-sql_hu_ee1a91f7e8d48e8f.webp 760w&#34;
               sizes=&#34;(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px&#34;
               src=&#34;http://localhost:1313/ressources/middlewares/migration-etl-vers-oa-tbx/oa-tbx-lineage-detail-sql_hu_d42fe9268d15acff.webp&#34;
               width=&#34;760&#34;
               height=&#34;357&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Résultat :&lt;/strong&gt; une gouvernance complète du pipeline migré, de la vue d&amp;rsquo;ensemble jusqu&amp;rsquo;au SQL exécuté, quelle que soit la plateforme ETL d&amp;rsquo;origine.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;sql-comme-format-pivot&#34;&gt;SQL comme format pivot&lt;/h2&gt;
&lt;p&gt;Le SQL produit par &lt;strong style=&#34;color:#C00000;&#34;&gt;{openAudit}&lt;/strong&gt; devient le support principal des transformations.&lt;/p&gt;
&lt;p&gt;Les règles métier, jointures, agrégations et calculs sont exprimés dans un format ouvert, versionnable et indépendant des outils ETL historiques.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Résultat :&lt;/strong&gt; une chaîne ETL/ELT basée sur SQL, orchestrée par workflows et exécutée dans un environnement ouvert.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;script&gt;
(function () {
  // Masque la date &#34;Last updated on&#34; et le bloc Auteur sur les pages
  // Ressources : ce ne sont pas des articles de blog (pas de date/signature).
  function hide() {
    document.querySelectorAll(&#34;time.mt-12.mb-8&#34;).forEach(function (el) {
      el.style.display = &#34;none&#34;;
    });
    document.querySelectorAll(&#34;div.flex.pt-12.pb-4&#34;).forEach(function (el) {
      if (el.querySelector(&#39;img[src*=&#34;/media/authors/&#34;]&#39;)) {
        el.style.display = &#34;none&#34;;
      }
    });
    // Filet de sécurité supplémentaire : masque aussi la ligne de partage
    // social et tout conteneur lié à la fiche auteur, par correspondance
    // sémantique plutôt que par nom de classe (plus robuste aux mises à jour
    // du thème).
    var shareHrefPatterns = [
      &#34;twitter.com/intent&#34;, &#34;x.com/intent&#34;, &#34;facebook.com/sharer&#34;,
      &#34;linkedin.com/sharing&#34;, &#34;wa.me/&#34;, &#34;api.whatsapp.com&#34;, &#34;mailto:?&#34;
    ];
    document.querySelectorAll(&#34;a[href]&#34;).forEach(function (a) {
      var href = a.getAttribute(&#34;href&#34;) || &#34;&#34;;
      if (shareHrefPatterns.some(function (p) { return href.indexOf(p) !== -1; })) {
        a.style.display = &#34;none&#34;;
      }
    });
    document.querySelectorAll(&#39;a[href=&#34;http://localhost:1313/authors/me/&#34;]&#39;).forEach(function (a) {
      var el = a.closest(&#34;div.flex&#34;) || a.parentElement;
      if (el) el.style.display = &#34;none&#34;;
    });
  }
  document.addEventListener(&#34;DOMContentLoaded&#34;, hide);
})();
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>Migration ETL - connecteurs ETL legacy pour migration SQL</title>
      <link>http://localhost:1313/ressources/migration-etl/migration-etl-connecteurs-legacy/</link>
      <pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate>
      <guid>http://localhost:1313/ressources/migration-etl/migration-etl-connecteurs-legacy/</guid>
      <description>&lt;p&gt;Les plateformes ETL reposent sur des connecteurs, des composants de transformation, des mécanismes de paramétrage et des stratégies d&amp;rsquo;exécution propres à chaque éditeur.&lt;/p&gt;
&lt;p&gt;&lt;strong style=&#34;color:#C00000;&#34;&gt;{openAudit}&lt;/strong&gt; analyse ces composants, reconstruit leur comportement puis génère une représentation SQL indépendante de la technologie source.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; la conversion repose sur l&amp;rsquo;analyse des composants ETL et non sur une simple traduction syntaxique.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;analyse-des-composants&#34;&gt;Analyse des composants&lt;/h2&gt;
&lt;p&gt;Les référentiels techniques sont analysés pour identifier les connecteurs, les transformations, les paramètres, les dépendances et les mécanismes d&amp;rsquo;exécution.&lt;/p&gt;
&lt;p&gt;Les composants sont convertis vers un modèle intermédiaire commun avant génération SQL.&lt;/p&gt;
&lt;p&gt;Cette approche est identique quelle que soit la technologie source.&lt;/p&gt;
&lt;h2 id=&#34;connecteurs&#34;&gt;Connecteurs&lt;/h2&gt;
&lt;p&gt;Les connecteurs de lecture et d&amp;rsquo;écriture sont analysés pour reconstruire les flux entre les systèmes.&lt;/p&gt;
&lt;p&gt;Les paramètres de connexion, les requêtes, les formats de données et les mappings sont intégrés dans le modèle de migration.&lt;/p&gt;
&lt;p&gt;Les flux peuvent provenir de bases relationnelles, de fichiers, d&amp;rsquo;APIs ou de plateformes Cloud.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Usage typique :&lt;/strong&gt; reconstruction des échanges entre Oracle, SQL Server, PostgreSQL, fichiers plats ou stockages Cloud.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;transformations&#34;&gt;Transformations&lt;/h2&gt;
&lt;p&gt;Les composants de transformation sont convertis en instructions SQL.&lt;/p&gt;
&lt;p&gt;Filtres, jointures, agrégations, lookups, mappings, conversions de types, calculs de colonnes et expressions conditionnelles sont reconstruits dans le modèle SQL cible.&lt;/p&gt;
&lt;p&gt;















&lt;figure  &gt;
  &lt;div class=&#34;flex justify-center	&#34;&gt;
    &lt;div class=&#34;w-full&#34; &gt;
          &lt;img alt=&#34;img-big&#34; 
               srcset=&#34;http://localhost:1313/ressources/migration-etl/migration-etl-connecteurs-legacy/ETL_vers_SQL_hu_fced570183f618b.webp 320w, http://localhost:1313/ressources/migration-etl/migration-etl-connecteurs-legacy/ETL_vers_SQL_hu_dd98b23a236d010.webp 480w, http://localhost:1313/ressources/migration-etl/migration-etl-connecteurs-legacy/ETL_vers_SQL_hu_51d9bda1300879c3.webp 760w&#34;
               sizes=&#34;(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px&#34;
               src=&#34;http://localhost:1313/ressources/migration-etl/migration-etl-connecteurs-legacy/ETL_vers_SQL_hu_fced570183f618b.webp&#34;
               width=&#34;760&#34;
               height=&#34;324&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; chaque transformation devient une opération SQL explicite.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;paramétrage&#34;&gt;Paramétrage&lt;/h2&gt;
&lt;p&gt;Les variables d&amp;rsquo;environnement, paramètres de jobs, bibliothèques partagées et composants réutilisables sont analysés pendant la conversion.&lt;/p&gt;
&lt;p&gt;Les dépendances entre traitements et les mécanismes de paramétrage sont conservés dans le modèle généré.&lt;/p&gt;
&lt;h2 id=&#34;technologies-supportées&#34;&gt;Technologies supportées&lt;/h2&gt;
&lt;p&gt;Les moteurs de migration couvrent notamment IBM DataStage, Talend, SAP BODS, SSIS, ODI, Informatica PowerCenter, Stambia, Semarchy xDI et Ab Initio.&lt;/p&gt;
&lt;p&gt;La méthodologie reste identique : analyse des composants, reconstruction des flux puis génération SQL.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Résultat :&lt;/strong&gt; une approche homogène appliquée à des technologies ETL différentes.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;sql-comme-format-pivot&#34;&gt;SQL comme format pivot&lt;/h2&gt;
&lt;p&gt;Une fois les composants reconstruits, les traitements sont convertis vers un modèle SQL indépendant de la plateforme source.&lt;/p&gt;
&lt;p&gt;Le SQL généré peut ensuite être adapté à Snowflake, BigQuery, Databricks SQL, Redshift, PostgreSQL, SQL Server ou tout autre moteur compatible.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; le SQL devient le format commun de représentation des traitements.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;script&gt;
(function () {
  // Masque la date &#34;Last updated on&#34; et le bloc Auteur sur les pages
  // Ressources : ce ne sont pas des articles de blog (pas de date/signature).
  function hide() {
    document.querySelectorAll(&#34;time.mt-12.mb-8&#34;).forEach(function (el) {
      el.style.display = &#34;none&#34;;
    });
    document.querySelectorAll(&#34;div.flex.pt-12.pb-4&#34;).forEach(function (el) {
      if (el.querySelector(&#39;img[src*=&#34;/media/authors/&#34;]&#39;)) {
        el.style.display = &#34;none&#34;;
      }
    });
    // Filet de sécurité supplémentaire : masque aussi la ligne de partage
    // social et tout conteneur lié à la fiche auteur, par correspondance
    // sémantique plutôt que par nom de classe (plus robuste aux mises à jour
    // du thème).
    var shareHrefPatterns = [
      &#34;twitter.com/intent&#34;, &#34;x.com/intent&#34;, &#34;facebook.com/sharer&#34;,
      &#34;linkedin.com/sharing&#34;, &#34;wa.me/&#34;, &#34;api.whatsapp.com&#34;, &#34;mailto:?&#34;
    ];
    document.querySelectorAll(&#34;a[href]&#34;).forEach(function (a) {
      var href = a.getAttribute(&#34;href&#34;) || &#34;&#34;;
      if (shareHrefPatterns.some(function (p) { return href.indexOf(p) !== -1; })) {
        a.style.display = &#34;none&#34;;
      }
    });
    document.querySelectorAll(&#39;a[href=&#34;http://localhost:1313/authors/me/&#34;]&#39;).forEach(function (a) {
      var el = a.closest(&#34;div.flex&#34;) || a.parentElement;
      if (el) el.style.display = &#34;none&#34;;
    });
  }
  document.addEventListener(&#34;DOMContentLoaded&#34;, hide);
})();
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>Migration ETL - de l&#39;ETL legacy vers dbt</title>
      <link>http://localhost:1313/ressources/migration-etl/migration-etl-vers-dbt/</link>
      <pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate>
      <guid>http://localhost:1313/ressources/migration-etl/migration-etl-vers-dbt/</guid>
      <description>&lt;p&gt;La migration vers dbt consiste à transformer des traitements ETL propriétaires en modèles SQL exécutés directement dans le moteur de données cible.&lt;/p&gt;
&lt;p&gt;















&lt;figure  &gt;
  &lt;div class=&#34;flex justify-center	&#34;&gt;
    &lt;div class=&#34;w-full&#34; &gt;
          &lt;img alt=&#34;img-big&#34; 
               srcset=&#34;http://localhost:1313/ressources/migration-etl/migration-etl-vers-dbt/etl_technologies_hu_570947d1352b81ab.webp 320w, http://localhost:1313/ressources/migration-etl/migration-etl-vers-dbt/etl_technologies_hu_cbc88a0f326e8926.webp 480w, http://localhost:1313/ressources/migration-etl/migration-etl-vers-dbt/etl_technologies_hu_194d6a576d2fd3eb.webp 760w&#34;
               sizes=&#34;(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px&#34;
               src=&#34;http://localhost:1313/ressources/migration-etl/migration-etl-vers-dbt/etl_technologies_hu_570947d1352b81ab.webp&#34;
               width=&#34;760&#34;
               height=&#34;197&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Avant toute conversion, &lt;strong style=&#34;color:#C00000;&#34;&gt;{openAudit}&lt;/strong&gt; analyse les flux, les dépendances et les usages afin d&amp;rsquo;identifier le périmètre réellement utile.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; la migration commence par une phase de rationalisation du patrimoine existant.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;analyse-des-flux&#34;&gt;Analyse des flux&lt;/h2&gt;
&lt;p&gt;Les traitements ETL sont analysés pour reconstruire les dépendances, les transformations et les usages.&lt;/p&gt;
&lt;p&gt;Le data lineage est utilisé pour identifier les flux actifs, les branches mortes et les composants non consommés.&lt;/p&gt;
&lt;p&gt;Cette phase permet de réduire le volume de traitements à migrer.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Résultat :&lt;/strong&gt; un périmètre de migration recentré sur les traitements réellement utilisés.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;conversion-vers-sql&#34;&gt;Conversion vers SQL&lt;/h2&gt;
&lt;p&gt;Les jobs ETL sont décomposés en opérations élémentaires : filtres, jointures, agrégations, lookups, calculs métier et transformations.&lt;/p&gt;
&lt;p&gt;Ces composants sont convertis en SQL documenté et indépendant de la technologie source.&lt;/p&gt;
&lt;p&gt;Le SQL devient la représentation pivot des traitements.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; la logique métier est reconstruite en SQL avant génération du projet dbt.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;génération-des-modèles-dbt&#34;&gt;Génération des modèles dbt&lt;/h2&gt;
&lt;p&gt;Les traitements SQL sont organisés sous forme de modèles dbt.&lt;/p&gt;
&lt;p&gt;Les dépendances entre modèles sont générées automatiquement à partir des flux identifiés pendant l&amp;rsquo;analyse.&lt;/p&gt;
&lt;p&gt;La structure du projet, les références entre modèles et la documentation peuvent être produites automatiquement.&lt;/p&gt;
&lt;h2 id=&#34;validation-progressive&#34;&gt;Validation progressive&lt;/h2&gt;
&lt;p&gt;La migration est réalisée par lots.&lt;/p&gt;
&lt;p&gt;Les modèles générés sont validés puis intégrés progressivement dans l&amp;rsquo;environnement cible.&lt;/p&gt;
&lt;p&gt;Les écarts peuvent être contrôlés traitement par traitement pendant la phase de transition.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Usage typique :&lt;/strong&gt; migration progressive de plusieurs centaines de jobs ETL vers dbt.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;architecture-cible&#34;&gt;Architecture cible&lt;/h2&gt;
&lt;p&gt;Les traitements deviennent des modèles SQL versionnables et maintenables.&lt;/p&gt;
&lt;p&gt;Les dépendances sont explicites, les transformations sont visibles et les traitements peuvent être exécutés directement par Snowflake, BigQuery, Databricks SQL, Redshift, PostgreSQL ou tout autre moteur compatible.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; les traitements ne dépendent plus de la plateforme ETL historique mais d&amp;rsquo;un projet dbt basé sur du SQL ouvert.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;script&gt;
(function () {
  // Masque la date &#34;Last updated on&#34; et le bloc Auteur sur les pages
  // Ressources : ce ne sont pas des articles de blog (pas de date/signature).
  function hide() {
    document.querySelectorAll(&#34;time.mt-12.mb-8&#34;).forEach(function (el) {
      el.style.display = &#34;none&#34;;
    });
    document.querySelectorAll(&#34;div.flex.pt-12.pb-4&#34;).forEach(function (el) {
      if (el.querySelector(&#39;img[src*=&#34;/media/authors/&#34;]&#39;)) {
        el.style.display = &#34;none&#34;;
      }
    });
    // Filet de sécurité supplémentaire : masque aussi la ligne de partage
    // social et tout conteneur lié à la fiche auteur, par correspondance
    // sémantique plutôt que par nom de classe (plus robuste aux mises à jour
    // du thème).
    var shareHrefPatterns = [
      &#34;twitter.com/intent&#34;, &#34;x.com/intent&#34;, &#34;facebook.com/sharer&#34;,
      &#34;linkedin.com/sharing&#34;, &#34;wa.me/&#34;, &#34;api.whatsapp.com&#34;, &#34;mailto:?&#34;
    ];
    document.querySelectorAll(&#34;a[href]&#34;).forEach(function (a) {
      var href = a.getAttribute(&#34;href&#34;) || &#34;&#34;;
      if (shareHrefPatterns.some(function (p) { return href.indexOf(p) !== -1; })) {
        a.style.display = &#34;none&#34;;
      }
    });
    document.querySelectorAll(&#39;a[href=&#34;http://localhost:1313/authors/me/&#34;]&#39;).forEach(function (a) {
      var el = a.closest(&#34;div.flex&#34;) || a.parentElement;
      if (el) el.style.display = &#34;none&#34;;
    });
  }
  document.addEventListener(&#34;DOMContentLoaded&#34;, hide);
})();
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>Migration ETL - de l&#39;ETL legacy vers le SQL</title>
      <link>http://localhost:1313/ressources/migration-etl/migration-etl-vers-le-sql/</link>
      <pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate>
      <guid>http://localhost:1313/ressources/migration-etl/migration-etl-vers-le-sql/</guid>
      <description>&lt;p&gt;Les plateformes ETL historiques implémentent principalement des filtres, jointures, agrégations, mappings et transformations qui peuvent être exprimés en SQL.&lt;/p&gt;
&lt;p&gt;&lt;strong style=&#34;color:#C00000;&#34;&gt;{openAudit}&lt;/strong&gt; analyse les jobs ETL, reconstruit les flux et génère un équivalent SQL indépendant de la technologie source.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; les traitements sont reconstruits sous forme de SQL documenté et versionnable.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;analyse-des-traitements&#34;&gt;Analyse des traitements&lt;/h2&gt;
&lt;p&gt;Les référentiels ETL sont analysés pour reconstruire les sources, les cibles, les transformations, les paramètres et les dépendances entre traitements.&lt;/p&gt;
&lt;p&gt;Les métadonnées collectées permettent de reconstituer le fonctionnement réel des flux.&lt;/p&gt;
&lt;p&gt;Les composants inutilisés ou non consommés peuvent être identifiés avant migration.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Résultat :&lt;/strong&gt; un périmètre de migration réduit aux traitements réellement utilisés.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;reconstruction-des-flux&#34;&gt;Reconstruction des flux&lt;/h2&gt;
&lt;p&gt;Les chaînes de traitement sont reconstruites à partir des jobs ETL.&lt;/p&gt;
&lt;p&gt;Les dépendances entre traitements, les flux intermédiaires, les variables et les paramètres sont intégrés dans le modèle cible.&lt;/p&gt;
&lt;p&gt;Cette cartographie constitue le point d&amp;rsquo;entrée de la conversion.&lt;/p&gt;
&lt;h2 id=&#34;rationalisation&#34;&gt;Rationalisation&lt;/h2&gt;
&lt;p&gt;Le croisement du data lineage (jusqu&amp;rsquo;au champ) avec les usages réellement observés permet d&amp;rsquo;identifier les données effectivement consommées et d&amp;rsquo;écarter celles qui ne le sont pas.&lt;/p&gt;
&lt;p&gt;Chaque job est également analysé pour en évaluer la complexité : nombre d&amp;rsquo;étapes, profondeur des sous-traitements, types de transformations et dépendances externes. Ces métriques sont agrégées en un score de complexité, utilisé pour prioriser et planifier la migration.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Résultat :&lt;/strong&gt; un périmètre de migration réduit aux traitements réellement utilisés, priorisé selon leur complexité réelle.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;génération-sql&#34;&gt;Génération SQL&lt;/h2&gt;
&lt;p&gt;Les transformations détectées sont converties en SQL.&lt;/p&gt;
&lt;p&gt;Filtres, jointures, agrégations, lookups, mappings et calculs sont traduits en instructions SQL successives, à plat.&lt;/p&gt;
&lt;p&gt;Le SQL produit conserve le découpage logique des traitements d&amp;rsquo;origine.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; chaque étape du traitement reste identifiable dans le SQL généré.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;exemple--jobs-ibm-datastage&#34;&gt;Exemple : jobs IBM DataStage&lt;/h2&gt;
&lt;p&gt;Sur un patrimoine DataStage, chaque type de stage est traduit selon sa logique propre :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Runtime Column Propagation (RCP)&lt;/strong&gt; : la liste des colonnes n&amp;rsquo;est pas figée dans le job ; elle est générée dynamiquement dans le SQL, pilotée par les variables passées au job.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connecteurs Oracle&lt;/strong&gt; (lecture / écriture) : SELECT, UPDATE, MERGE ou INSERT générés à partir des options du stage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Change Capture (CDC)&lt;/strong&gt; : comparaison Before/After sur clés primaires, détection des lignes nouvelles, modifiées et supprimées.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transformer CDC&lt;/strong&gt; : routage conditionnel vers un flux dédié selon le code de changement détecté.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shared Container&lt;/strong&gt; : bloc logique factorisé, rendu comme un bloc SQL standardisé et réutilisé dans plusieurs jobs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Column Generator&lt;/strong&gt; : colonnes calculées traduites en expressions SQL typées.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modify&lt;/strong&gt; : conversions de types traduites en CAST SQL (ex. string vers timestamp).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Funnel&lt;/strong&gt; : fusion de plusieurs flux via UNION SQL, avec homogénéisation du schéma de sortie.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;















&lt;figure  &gt;
  &lt;div class=&#34;flex justify-center	&#34;&gt;
    &lt;div class=&#34;w-full&#34; &gt;
          &lt;img alt=&#34;img-big&#34; 
               srcset=&#34;http://localhost:1313/ressources/migration-etl/migration-etl-vers-le-sql/datastage_screenshot_exemple_hu_1816a65e5026b334.webp 320w, http://localhost:1313/ressources/migration-etl/migration-etl-vers-le-sql/datastage_screenshot_exemple_hu_a51a8ad6f4ff8541.webp 480w, http://localhost:1313/ressources/migration-etl/migration-etl-vers-le-sql/datastage_screenshot_exemple_hu_c0539ef9bc40bb3e.webp 760w&#34;
               sizes=&#34;(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px&#34;
               src=&#34;http://localhost:1313/ressources/migration-etl/migration-etl-vers-le-sql/datastage_screenshot_exemple_hu_1816a65e5026b334.webp&#34;
               width=&#34;760&#34;
               height=&#34;320&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Résultat observé :&lt;/strong&gt; sur un patrimoine de plusieurs centaines de jobs DataStage, plus de 95 % des traductions SQL aboutissent dès la première exécution.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;adaptation-aux-plateformes-cibles&#34;&gt;Adaptation aux plateformes cibles&lt;/h2&gt;
&lt;p&gt;Le SQL généré peut être adapté aux dialectes des plateformes cibles.&lt;/p&gt;
&lt;p&gt;Les fonctions, types de données et mécanismes spécifiques sont pris en compte lors de la génération.&lt;/p&gt;
&lt;p&gt;Les mêmes traitements peuvent être produits pour Snowflake, BigQuery, Databricks SQL, Redshift, PostgreSQL, SQL Server ou d&amp;rsquo;autres moteurs compatibles SQL.&lt;/p&gt;
&lt;h2 id=&#34;orchestration&#34;&gt;Orchestration&lt;/h2&gt;
&lt;p&gt;Les dépendances et l&amp;rsquo;ordonnancement des traitements sont conservés.&lt;/p&gt;
&lt;p&gt;Les traitements générés peuvent être intégrés dans les outils d&amp;rsquo;orchestration déjà présents dans le Système d&amp;rsquo;Information.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Usage typique :&lt;/strong&gt; intégration dans Airflow, Control-M ou tout autre ordonnanceur existant.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;sql-comme-format-pivot&#34;&gt;SQL comme format pivot&lt;/h2&gt;
&lt;p&gt;Le SQL devient la représentation commune des traitements.&lt;/p&gt;
&lt;p&gt;Les transformations ne dépendent plus des composants propriétaires de la plateforme ETL d&amp;rsquo;origine.&lt;/p&gt;
&lt;p&gt;Les traitements peuvent être versionnés, relus, testés et déployés indépendamment de la technologie source.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; la logique de transformation reste maîtrisée par l&amp;rsquo;entreprise et ne dépend plus d&amp;rsquo;un moteur ETL spécifique.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;script&gt;
(function () {
  // Masque la date &#34;Last updated on&#34; et le bloc Auteur sur les pages
  // Ressources : ce ne sont pas des articles de blog (pas de date/signature).
  function hide() {
    document.querySelectorAll(&#34;time.mt-12.mb-8&#34;).forEach(function (el) {
      el.style.display = &#34;none&#34;;
    });
    document.querySelectorAll(&#34;div.flex.pt-12.pb-4&#34;).forEach(function (el) {
      if (el.querySelector(&#39;img[src*=&#34;/media/authors/&#34;]&#39;)) {
        el.style.display = &#34;none&#34;;
      }
    });
    // Filet de sécurité supplémentaire : masque aussi la ligne de partage
    // social et tout conteneur lié à la fiche auteur, par correspondance
    // sémantique plutôt que par nom de classe (plus robuste aux mises à jour
    // du thème).
    var shareHrefPatterns = [
      &#34;twitter.com/intent&#34;, &#34;x.com/intent&#34;, &#34;facebook.com/sharer&#34;,
      &#34;linkedin.com/sharing&#34;, &#34;wa.me/&#34;, &#34;api.whatsapp.com&#34;, &#34;mailto:?&#34;
    ];
    document.querySelectorAll(&#34;a[href]&#34;).forEach(function (a) {
      var href = a.getAttribute(&#34;href&#34;) || &#34;&#34;;
      if (shareHrefPatterns.some(function (p) { return href.indexOf(p) !== -1; })) {
        a.style.display = &#34;none&#34;;
      }
    });
    document.querySelectorAll(&#39;a[href=&#34;http://localhost:1313/authors/me/&#34;]&#39;).forEach(function (a) {
      var el = a.closest(&#34;div.flex&#34;) || a.parentElement;
      if (el) el.style.display = &#34;none&#34;;
    });
  }
  document.addEventListener(&#34;DOMContentLoaded&#34;, hide);
})();
&lt;/script&gt;
</description>
    </item>
    
  </channel>
</rss>
