lundi 3 décembre 2012

Création de job dynamique avec l'ETL Talend Open Studio

Ce tutoriel va nous présenter comment réaliser un job dynamique, en fait on va créer un simple job qui lancera une requête de type "select" sur une table d'une base de données Oracle, la particularité de cette requête c'est qu'elle contiendra une partie dynamique saisie par l'utilisateur final.



1. Introduction

L'article suivant nous présente comment créer pas à pas un job assez simple qui lancera une requête "select" sur une base de données Oracle, ensuite nous allons transformer ce job statique en un job dynamique dont la condition "where" changera selon les données entrées par l'utilisateur. Pour récupérer l'entrée de l'utilisateur on utilisera le composant "tMsgBox".



Avant de commencer je tiens à préciser qu'on n'abordera pas dans ce tutoriel le détail de création de job sous Talend vu que ça a été discuté dans le tutoriel précédent.

2. La source de données

La source de données a été créée par le script suivant :

CREATE TABLE CLIENT( CODE VARCHAR2(100 BYTE), NOM VARCHAR2(100 BYTE), PRENOM VARCHAR2(100 BYTE) ); 
INSERT INTO CLIENT VALUES ('cli001', 'ELHASSAK', 'MUSTAPHA');
INSERT INTO CLIENT VALUES ('cli002', 'Esbaiss', 'MOUAD');
INSERT INTO CLIENT VALUES ('cli003', 'zAkI', 'ANASS');

Finalement on se retrouve avec le résultat suivant :

image

Le job qu'on va créer exécutera la requête suivante sur notre table, il s'agit d'une sélection de toutes les colonnes de la table avec une condition sur la colonne "CODE", par exemple :

SELECT code, nom, prenom FROM CLIENT WHERE code LIKE 'cli001';

3. Job Talend Open Studio

La création du job TOS va se dérouler suivant les étapes :
  • création du job statique ;
  • transformation du job en un job dynamique.

3.1 Création du job statique

La création du job statique est assez rudimentaire. Après création d'un job, on glisse le schéma de notre table dans le designer, puis on choisit le composant "tOracleInput".

image
image

Après on va sur les propriétés du composant "tOracleInput" et on modifie la requête SQL qu'il utilise.

image

Ceci fait, on glisse un deuxième composant depuis la palette, cette fois-ci ce sera un composant "tLogRow" qui servira à afficher le résultat de la requête dans la fenêtre console. Ce composant est utilisé ici juste pour l'affichage. Après on lie ce dernier avec le "tOracleInput" avec un lien de type " main ".

image

Notre job est fin prêt à l'emploi. On lance l'exécution et voilà le résultat :

image

3.2 Transformation du job en un job dynamique

Maintenant on passe à la partie la plus intéressante, on voit bien que ce job en plus d'être simple, est aussi assez fermé, car il va toujours renvoyer le même résultat. Pour remédier à ce problème, on va le rendre dynamique.

Pour cela on doit changer la requête SQL et remplacer la valeur 'cli001' de la clause "where" par une entrée saisie par l'utilisateur final, cette entrée sera récupérée grâce au composant "tMsgBox".

Assez de blabla, passons maintenant à la pratique. On glisse un composant "tMsgBox" depuis la palette vers le designer de notre job.

image

On modifie les propriétés composant "tMsgBox" comme suivant :
  •  on met dans le champ titre "Saisie de code client" ;
  • on choisit le type de boutons "Question";
  • on saisit dans le champ question : "Veuillez saisir le code du client désiré :" ;
image 
  • finalement, on lie le composant "tMsgBox" au composant "tOracleInput" par un lien de type déclencheur "OnSubjobOk".
Notre job prend cette allure :

image 
Il ne nous reste plus qu'à modifier la requête SQL du "tOracleInput", mais comment récupérer la valeur saisie par l'utilisateur ? C'est très facile, on peut la récupérer grâce au bout de code suivant : 
"SELECT CODE, NOM, PRENOM FROM CLIENT WHERE CODE LIKE '" + ((String)globalMap.get("tMsgBox_1_RESULT")) + "'"  
En effet la valeur saisie par l'utilisateur final sera enregistrée par Talend automatiquement dans une variable globale propre à Talend qui porte le nom " GlobalMap" sous le nom de notre composant "tMsgBox" concaténé avec le mot "_RESULT" ,ici le nom du composant est "tMsgBox_1 " donc la variable utilisée pour le stockage sera "tMsgBox_1_RESULT", et comme la variable est de type "Object" alors il suffit de la caster vers un "String".
Voilà, le travail est terminé, on peut finalement tester notre job.
En le lançant, la fenêtre de saisie s'affiche, on tape une valeur puis on clique sur "Ok".
image 
On voit bien que le résultat retourné dépend de notre saisie.
image 

4. Conclusion
Voilà c'est tout, maintenant vous êtes capable de créer n'importe quel type de job dynamique avec Talend il suffit de suivre ce tuto Step by Step. Prochainement je vous parlerai de comment créer une routine avec l'ETL Talend Open Studio, vous allez voir c'est plus facile que ce que vous pensez, en plus c'est très très utile si vous voulez créer des traitements spécifiques pour vos jobs.

5 commentaires:

  1. Bonjour, j'ai beaucoup aimé vos tutoriaux :) Je voudrais vous demander comment on crée un job de mise à jour? Au fait je crée les jobs et chaque fois que j’insère une ligne ou plusieurs dans ma base opérationnelle je dois recréer une connexion.
    Comment créer un job de mise à jour? et merci d'avance.

    RépondreSupprimer
    Réponses
    1. Bonjour,

      En fait cela dépend de ce que tu veux dire par un job de mise à jour. Si ça veut dire que tu veux créer un job qui permettra d'insérer une ligne dans la base si cette ligne n'existe pas et la modifier si elle existe alors là il faut jouer sur les options de ton composant de sortie (par exemple ton tOracleOutput), tu mets dans les options d’insertion de ligne "Update or Insert". Sinon si tu veux parler de créer une nouvelle version de ton job alors là tu fais un clique droit sur ton job, tu cliques sur modifier les propriétés du job puis tu augmentes la version.

      J’espère que j'ai répondu à ta question. Sinon essai de la reposer d'une autre façon.

      Supprimer
  2. merci pour le tuto, je commence juste à m'autoformer et c'est génial de trouver ces petit bijoux !! Merci encore

    RépondreSupprimer
  3. I really appreciate information shared above. It’s of great help. If someone want to learn Online (Virtual) instructor lead live training in talend , kindly contact us http://www.maxmunus.com/contact
    MaxMunus Offer World Class Virtual Instructor led training on TECHNOLOGY. We have industry expert trainer. We provide Training Material and Software Support. MaxMunus has successfully conducted 100000+ trainings in India, USA, UK, Australlia, Switzerland, Qatar, Saudi Arabia, Bangladesh, Bahrain and UAE etc.
    For Demo Contact us.
    Sangita Mohanty
    MaxMunus
    E-mail: sangita@maxmunus.com
    Skype id: training_maxmunus
    Ph:(0) 9738075708 / 080 - 41103383
    http://www.maxmunus.com/


    RépondreSupprimer