Outil de conversion Datastage - Talend

Stéphane Dupont

Ayant eu l'occasion d'utiliser l'outil de conversion Datastage / Talend je propose ici une petite démo ainsi que les résultats de quelques scénarios significatifs dans le cadre d'une migration.
Commentez ?

- Titre : Outil de conversion Datastage - Talend

- Auteur : Stéphane Dupont

- Parution : 12 septembre 2012

- Licence : Copyright ® 2012 doc malkovich. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Quelques rappels

- III. La procédure de conversion

- IV. Scénarios de test

- IV-A. Test 1

- IV-B. Test 2

- IV-C. Test 3

- IV-D. Test 4

- V. Conclusion

- VI. Liens

- VII. Remerciements

I - Introduction

Datastage et Talend sont deux ETL reconnus sur le marché.

Le premier fait partie de la suite WebSphere d'IBM, le second est open source et apporte de nombreux avantages par rapport à Datastage dont les principaux sont (liste non exhaustive) :

- un faible coût (voire la gratuité) ;

- un large choix de connectivités, de composants ;

- le support d'une communauté très active.

Même si Datastage possède son propre moteur alors que Talend génère du code (java ou perl), ils partagent la même philosophie du traitement de la donnée en différentes étapes dans des stages ou des composants.

Un outil de conversion des jobs de Datastage vers Talend a été développé et mis à disposition de la communauté : ETL Converter.

Cette application prend en entrée des fichiers XML de jobs Datastage, les convertit et les intègre dans un projet Talend.

Cet article vous présente l'utilisation de cet outil et les problèmes que l'on peut rencontrer dans le cadre d'une migration. Il met aussi en évidence les différences entre les deux ETL, ce qui intéressera sans doute les personnes qui voudraient comparer les deux solutions.

Je vous propose de voir d'abord dans une première partie la procédure et l'utilisation de l'outil de conversion, puis dans une seconde partie quelques exemples significatifs, en soulignant les limites de la conversion et les solutions qu'on pourrait y apporter. Enfin je conclurai sur les résultats et les différences entre les deux ETL.

Les versions testées sont :

- Datastage 7.5.2 (version Server, non PX) ;

- Talend 3.1.

Les versions supportées ne sont pas connues, mais il s'avère que l'outil de conversion ne fonctionne pas avec la version 4 (et supérieure) de Talend. Il faut d'abord convertir en v3, puis migrer en version supérieure !!!

II - Quelques rappels

Avant d'aller plus loin, rappelons les principaux termes.

- ETL : outil spécialisé dans le traitement des données. Acronyme pour Extract Transform Loading : on extrait les données, on les transforme, on les charge en cible.

- Mapping : transformation des données. Il s'agit de donner les définitions des données cibles à partir des données source. Par exemple à partir d'une date d'anniversaire en source on pourra avoir en cible une date d'anniversaire (qui sera égale), l'année de naissance (en extrayant l'année) et l'âge (en calculant le nombre d'années entre la date de naissance et la date d'aujourd'hui).

- Job : traitement unitaire au sens Datastage ou Talend. Un job alimente une ou plusieurs cibles à partir d'une ou plusieurs sources en pouvant effectuer des transformations sur les données. Un job est composé d'éléments spécialisés (dans les connexions SGBD, transformations, tris, etc.) appelés Composants dans Talend et Stages dans Datastage.

- Workspace : espace de travail pour Talend, hérité d'Eclipse sur lequel il s'appuie.  Définition dans la FAQ Eclipse

Les composants Talend correspondent aux stages Datastage (à quelques exceptions près que l'on verra plus tard). Nous avons par exemple un stage Transformer dans Datastage qui correspond au composant tMap dans Talend.

Principales correspondances (liste non exhaustive)

Datastage

Talend

Commentaire

Projet

Projet

Ensemble de traitements d'alimentation, généralement regroupés suivant la même thématique fonctionnelle. Dans Talend les projets se retrouvent physiquement dans des répertoires à la racine du workspace.

Job

Job

Traitement unitaire, composé d'éléments. Un job alimente une ou plusieurs cibles d'une ou plusieurs sources en pouvant effectuer des transformations sur les données.

Stage

Composant

Élément spécialisé dans le traitement de la donnée.

Transformer

tMap

Élément pour le mapping et les transformations.

Sequential File

tFileInputDelimited, tFileInputPositional, tFileOutputDelimited…

Élément pour lire ou écrire un fichier.

ORAOCI9

tOracleInput, tOracleOutput

Élément pour lire des données à partir d'une base Oracle.
Élément pour écrire des données dans une table d'une base Oracle.

Aggregator

tAggregateRow

Élément pour agréger les données (somme, maximum, etc.).

Sort

tSortRow

Élément pour trier les données.

Certains d'entre vous remarqueront que nous avons dans certains cas deux composants Talend pour un stage Oracle. Cela sera expliqué par la suite, mais le nom des composants peut vous donner un indice .

III - La procédure de conversion

Les étapes de la conversion sont les suivantes :

1. Exporter dans Datastage Manager le job en XML ;

Dans le menu choisir Export/Datastage Components et cocher Export as XML document. Les options de l'onglet XML sont à laisser aux valeurs par défaut. Choisir un dossier et un nom de fichier d'export puis cliquer sur Export pour générer un fichier XML.

Nous pouvons exporter plusieurs jobs dans le même fichier XML, qui seront convertis par l'outil ETL Converter en une seule fois. Cependant dans l'exemple donné l'export ne concerne qu'un seul job.

2. Lancer l'outil de conversion ETL Converter ;

Exécuter le binaire .
Une fenêtre assez simpliste s'affiche :

3. Ouvrir le fichier XML (premier bouton de la barre d'outils ou déplacer le fichier XML de l'explorateur Windows sur le texte Drop here a Datastage export file…) ;

L'application affiche l'arborescence du job Datastage. En cliquant sur les éléments nous avons des informations complémentaires comme les structures source et cible.

4. Exporter le job (second bouton) ;

Une fenêtre s'affiche où il faut sélectionner le job et le projet Talend cible (fichier talend.project, ce fichier est à la racine du répertoire du projet dans le workspace Talend).
En cliquant sur OK,une barre de progression apparaît pour indiquer que le job est intégré dans le projet Talend.

5. Lancer Talend pour finaliser l'intégration du job dans le projet ;

Le job n'apparaît pas de suite sous Talend. Il faut d'abord :

1. Ouvrir le navigateur et rafraîchir le dossier process (bouton droit de la souris/actualiser sur ce dossier) ;

2. Rouvrir le référentiel et rafraîchir le dossier des Job Designs (bouton refresh).

6. Modifier le job converti.

Plusieurs manipulations sont nécessaires pour retrouver un job exécutable, comme :

1. définir et utiliser la connexion Oracle dans les composants BDD ;

2. remettre les liens correctement sur les composants en entrée/sortie ;

3. définir les séquencements avec des déclencheurs entre les sous-jobs ;

4. modifier les mappings (passer du langage basic Datastage au Java dans Talend).

IV - Scénarios de test

IV-A - Test 1

Le test consiste en la conversion d'un job Datastage simple : nous avons une base Oracle, une table source et une table cible et un transformer entre les deux qui effectue un mapping.

L'outil de conversion donne un job Talend similaire :

Problèmes rencontrés

- Il faut modifier la connexion BDD ; en effet le serveur hôte et le port ne sont pas renseignés après conversion.

C'est normal, sous Datastage les connexions Oracle utilisent le driver d'Oracle (OCI) et passent par les interfaces réseau propres au SGBD sans avoir besoin de connaître le nom et le port du serveur (alias ou TNS dans mon cas). Les jobs convertis utilisent par défaut les connexions JDBC qui nécessitent un paramétrage précis, sans alias. Il vaut d'ailleurs mieux utiliser une connexion « Référentiel », les modifications seront plus rapides à apporter par la suite sur les autres jobs convertis. On peut aussi changer le type de la connexion en Oracle OCI et ne pas avoir à renseigner l'hôte et le port comme sous Datastage.

- En source il faut que le « Custom-SQL » (SQL écrit à la main et non généré dynamiquement) soit correct, c'est celui-là qui est repris et non le SQL généré.

Une fois les modifications apportées le job est finalisé et marche correctement.

IV-B - Test 2

Ici on alimente une table et après on la réutilise pour alimenter une autre table. Nous avons donc un stage Oracle en entrée et en sortie.

Le job est converti en :

Problèmes rencontrés

- On retrouve les mêmes problèmes que précédemment, notamment la perte de connexion BDD.

- Le stage Oracle intermédiaire en entrée et en sortie a été converti en deux composants Oracle, dont un est isolé et sans lien.
En effet, sous Talend les composants Oracle ne sont qu'en entrée ou qu'en sortie, contrairement à Datastage où les stages acceptent les deux types de flux.
Il faut alors remettre les liens correctement et rajouter ce qu'on appelle dans Talend un lien de déclenchement entre les deux composants Oracle, voire mieux entre les deux parties du job (nommées sous-jobs). Ainsi la seconde partie ne démarrera que si tous les composants de la première partie ont terminé normalement. Le job tourne ensuite normalement.

IV-C - Test 3

On sépare un flux principal en deux flux différents (selon un critère défini dans le transformer) pour alimenter la même table Oracle. Sous Datastage un seul stage Oracle suffit. Cette stratégie est utilisée par exemple en mode d'alimentation Insert/Update : suivant un critère en source soit on crée un nouvel enregistrement soit on ne met à jour que certaines colonnes d'enregistrements existants.

Le job est converti en :

Problèmes rencontrés

- On retrouve les mêmes problèmes que précédemment, notamment la perte de connexion BDD.

- Le stage Oracle cible a été converti en deux composants homonymes avec deux liens entremêlés.
Il faut déplacer un de ces composants pour bien séparer visuellement les deux liens. Par contre il existe toujours un lien dont le schéma (la structure/les colonnes) ne correspond pas à celui du composant cible. Il faut le remettre à jour dans ce dernier avant de lancer le job.

Sur d'autres jobs la conversion ne donne pas les mêmes résultats. Parfois les liens ont le même composant cible et l'autre composant Oracle se retrouve isolé, sans lien.

IV-D - Test 4

Ici nous avons affaire à un grand classique de Datastage, un fichier hash.

Pour la petite histoire, il était préconisé par l'éditeur d'utiliser ce type de stage pour améliorer les performances lors de jointures (les lookup), l'outil gérant mal les jointures directes sur des fichiers ou des bases de données. Datastage va en fait générer des fichiers spéciaux « optimisés » en fonction des colonnes clés. Depuis les SGBD ont évolué et le discours de l'éditeur a changé, mais on retrouve ces fichiers dans la plupart des jobs développés sous les anciennes versions de Datastage.

Résultat de la conversion :

Le fichier hash est converti en composant tFile.

Problèmes rencontrés

- On a deux jointures (dites « lookup ») qui ont été générées, dont une qui ne pointe que sur un seul composant !
Il faut supprimer cette dernière, mais des fois cela occasionne des erreurs mémoire. De plus les colonnes de jointure de la lookup sont perdues, il faut les refaire. On réorganise les composants, avec un déclenchement entre les tFile représentant le fichier hash.

- Le stage Oracle cible a été converti en deux composants homonymes avec deux liens entremêlés.
Il faut déplacer un de ces composants pour bien séparer visuellement les deux liens. Par contre il existe toujours un lien dont le schéma ne correspond pas à celui du composant cible. Il faut le remettre à jour dans ce dernier avant de pouvoir lancer le job.

Il vaut mieux cependant simplifier en effectuant la jointure directement sur le fichier, puisque Talend accepte cette stratégie sans perte de performances.

Pour les puristes de Datastage, on devrait remplacer le fichier hash par le composant tHashOuput qui est censé faire la même chose. Cependant j'ai rencontré des problèmes en utilisant ce dernier, avec une belle erreur java.lang.NoClassDefFoundError.

Je n'ai pas trouvé de solution à ce problème ; de toute manière Talend ne préconise pas l'emploi de ces composants qui sont cachés par défaut.

V - Conclusion

L'outil convertit bien des jobs Datastage simples, mais il faut passer un certain temps à modifier les jobs. Il arrive aussi que dans certains cas la conversion se passe mal et que les jobs soient vérolés, rendant difficile leur correction sous Talend.

Cependant cet outil a le mérite d'exister, d'être distribué gratuitement et il permet de gagner un temps considérable en réécriture de jobs lors de migrations (on parle de 50%).

Attention il faut aussi prendre en compte :

- les fonctions/routines Datastage qui sont à traduire en java. Le langage est plus complexe, mais il a l'avantage d'être plus connu et il est facile de trouver de l'aide sur Internet (dans les forums de developpez ). De plus l'outil de conversion a un onglet « Search & Replace » pour automatiser les modifications ;

- sur des jobs plus complexes (surtout en nombre de stages) des jointures sont erronées, occasionnant des problèmes de mémoire qui obligent l'arrêt de Talend ;

- à l'heure où j'écris (ou finalise) ces lignes, Talend est en version 5, et l'outil de conversion ne marche qu'en version 3 ; ce qui implique des migrations de versions intermédiaires.

Et des fonctionnalités qui n'existent pas dans Talend comme :

- les BeforeSQL ou AfterSQL pour exécuter des requêtes SQL dans les stages Oracle, il faut à la place utiliser le composant tOracleRow  ;

- les insert/update personnalisés n'existent pas non plus. Dans Datastage on peut réécrire le sql d'un ordre insert ou update pour rajouter une clause, ce qui n'est pas possible dans Talend ;

- les stages spéciaux qui n'ont pas forcément de correspondance, comme le rowSplitter ;

- les BeforeJob et AfterJob n'existent pas. Ils sont généralement utilisés pour lancer des scripts sous Unix, pour supprimer des fichiers par exemple. Sous Talend il faudra utiliser les composants tPreJob et tPostJob .

Tous ces aspects sont à prendre en compte dans le cadre d'une migration Datastage-Talend qui sera d'autant plus coûteuse que l'existant utilise des éléments spécifiques de Datastage.

VI - Liens

http://sourceforge.net/projects/etlconverter/files/ : l'outil de conversion Datastage-Talend.

http://fr.talend.com : le site officiel de Talend.

http://www-01.ibm.com/software/data/infosphere/datastage/ : le site officiel de Datastage.

VII - Remerciements

Un grand merci à la fabuleuse équipe BI de developpez.com, à kalyparker, TomDuBouchon et fafabzh6 pour leur infinie patience et gentillesse, à haskouse pour les remarques avisées et à FirePrawn pour ses corrections pertinentes. Et une mention spéciale pour Chtulus qui j'espère ne m'en voudra pas trop pour le temps perdu à me relire .