Retour d’expérience sur … Datastage

Datastage fait partie de la suite WebSphere d’IBM ( maintenant Infosphere ), il fait partie des principaux ETL adoptés chez les grands comptes. Il possède son propre moteur de traitement ( Engine-based ), ainsi que son propre référentiel.

La version max que je connais est la 7.5.2

Un exemple de job :
Alimentation d'une table Oracle à partir d'une autre table Oracle en effectuant une jointure avec un fichier texte en référence
( Alimentation d’une table Oracle à partir d’une autre table Oracle en effectuant une jointure avec un fichier texte en référence )

Les + :

  • graphiquement attractif – de jolis dessins en 3d
  • on voit le cheminement/flux de la donnée ( sources/cibles, les différents traitements : tri, agrégation )
  • pas besoin de connaitre le SGBD ( fonctions sql, procédures )
  • les fichiers hash pour dédoublonner en ne gardant que le dernier enregistrement
  • les variables dans les transformer pour comparer avec les valeurs de la ligne précédente

Les – :

  • boîte noire – on ne sait pas trop comment il fonctionne
  • un nouveau langage à apprendre même s’il est estampillé basic …
  • les performances sont vite dégradées sur de grosses volumétries, car il fonctionne en mode curseur ( ligne par ligne )
  • analyse d’impact peu poussée
  • limites du basic

Le plus gros point faible pour moi concerne les performances. En effet on est vite amenés à tout coder en sql notamment pour les tris, les agrégations et les jointures. On se retrouve alors avec des jobs assez simples ( 3 stages : une source avec un sql complexe, un mapping et une cible )
Pour l’analyse d’impact, le lien avec les métadonnées est perdu lors du développement. Par exemple, on importe la structure d’une table T dans le référentiel, on crée un job et en source on prend la table T dont on importe la structure depuis le référentiel. Mais il n’y a pas de lien entre le job et la métadonnée dans le référentiel, si on change la structure de T dans les métadonnées il n’y a pas d’alerte sur le job qu’on a créé !!!
L’analyse d’impact se fait alors principalement par mot clé, ce qui pose problème avec des mots clés bateau qu’on retrouve partout !!!
Pour le basic, d’accord on est indépendant du SGBD mais on a un nouveau langage avec toutes ses subtilités.
Par exemple, pour extraire une chaine :
toto[4]  = les 4 derniers caractère du champ toto

pour avoir la date système au format DD/MM/YYYY HH24:MI:SS d’Oracle :
OCONV(Date(),"D-YMD[4,2,2]"):" ":Oconv(time(), "MTS")

D’autre part, certaines fonctions/opérateurs très pratiques ne sont pas écrites comme le NVL, BETWEEN, IN …
C’est dommage, car certains aspects du BASIC Datastage sont séduisants, comme l’utilisation indifférente des  » ou des ‘ pour définir une chaîne de caractères
( on peut écrire "toto", 'toto', "aujourd'hui" ou 'des "guillemets"' )

Pbs courants :

  • obligation de trier les colonnes dans un stage Aggregate … sinon plantage …
  • pbs de mémoire lorsqu’on utilise le stage de tri …
    –> on trie et on somme en sql :-(
  • le fichier hash dédoublonne sans prévenir …
    –> alertes non remontées
    Par exemple, on récupère les noms à partir d’un login, mais on a une évolution en source qui fait qu’on peut avoir différents noms pour 1 login
    En utilisant le fichier hash, on récupère un des noms … mais pas forcément le bon … et ce n’est pas remonté …
    En récupérant le nom via une requête, on aurait des doublons en entrée –> plantage
    Il faut donc toujours mettre une contrainte d’unicité en base sur les clés des fichiers hash pour éviter ce pb.
  • pas de remontée/warning des lignes non mises à jour
    ex : un job traite une volumétrie de 100 000 lignes, mais aucune ligne n’est mise à jour
    –> il n’y a aucune remontée, le job semble avoir maj les 100 000 lignes
  • pb ETL : il faut être vigilant qu’on fonctionne en mode curseur
    –> si on a un traitement qui met à jour les dossiers, et en entrée 10 fois le même dossier, on aura 10 mises à jour de la même ligne, sans remontée d’alerte !!!

Pbs énervants :

  • renommage colonne en amont –> il faut tout changer en aval :-(
  • les messages d’erreur laconiques ( pb des phantom … ), où on passe des heures à débuguer ligne par ligne pour trouver ce qui ne va vraiment pas !
    –> notamment sur les routines, quand on a du null en argument …

Quelques conseils :

  • résister à l’envie d’écrire un seul « gros » job qui fait tout ( même si c’est possible ). Il vaut mieux écrire des jobs « basiques », avec le minimum de stages – c’est plus simple à maintenir et à tester
  • éviter les stages tri et agrégat, ils amènenent souvent leurs lots d’erreurs incompréhensibles
  • les stages folder et rowsplitter donnent envie quand on a plusieurs fichiers à traiter, mais ils ne sont vraiement pas pratiques à débuguer – pensez à votre prochain, rester aux stages simples de fichier …

En conclusion :
Au début on trouve l’application géniale, c’est quand même plus sympa que les tristounets scripts sql lancés en batch… Et on déchante assez vite devant les performances et les problèmes rencontrés … Du coup on simplifie les jobs au maximum et on met tous les traitements dans les sql … en se demandant si on n’écrirait pas à la place des scripts sql qui seraient plus performants !!!

Pour moi Datastage fait partie des « anciennes » générations d’ETL qui n’ont pas vraiment su se renouveler.
La montée en version n’a pas apporté grand chose, à part un lifting graphique réussi.
La version 8 ne me semble pas plus innovatrice, IBM répondant au problème de performance avec du parralélisme … De plus l’offre devient plus floue, avec 2 versions de Datastage ( PX et Server ) dont celle correspondant à l’ancienne qui n’évolue plus !!!

Je lui préfère SunopsiS/ODI ou Talend pour les raisons que j’expliquerais plus tard dans un autre article ..

Une réflexion au sujet de « Retour d’expérience sur … Datastage »

  1. DataStage existe en 2 versions
    – Une version Server
    – Une version PX (depuis la V7 au moins)

    Vos remarques s’appliquent essentiellement à la version « Server »
    ex : »les performances sont vite dégradées sur de grosses volumétries, car il fonctionne en mode curseur ( ligne par ligne ) »

    – La version EE (ou PX) permet d’exploiter au maximum la puissance offerte par le serveur DataStage. Son (nouveau) mécanisme de « partitionnement » permet une occupation égale des CPU allouées à l’application, engendrant par conséquent, des performances optimales à toutes les étapes du traitement.

    – De nouveaux Stages permettent de ne plus avoir à utiliser du code Basic

    La version 8 repose sur une toute nouvelle architecture orienté service, avec des metadonnées sur lesquelles reposent tout les nouveaux outils (ou d ancien relooké ou mutualisé) de la Suite IIS

    En Clair la version « PX » et bien plus rapide que la version « Server »
    (et cela depuis la V7.x)

    @+

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>