vendredi 28 janvier 2011

Initiation Talend - 4° Partie : le composant tMap

Dans les articles précédents, nous avons vu comment :
Nous voilà enfin prêt à créer notre premier job.
Ce job va lire des données dans une table MySQL (table des produits), lier cette table à un fichier excel (fichier des fournisseurs) par une colonne commune à la table et au fichier (colonne fournisseur), puis extraire quelques données de ces 2 objets dans un fichier CSV. 

Faites clic-droit sur Job Designs puis Créer un job, puis saisissez le nom du job. 
Attention : pas d'espaces dans le nom du job
Une nouvelle fenêtre s'ouvre au milieu de l'espace de travail et la palette des composants présente la liste des composants disponibles.


Ouvrez l'arborescence Schémas des tables de votre connexion définie dans le 2° article.
Cliquez sur la table produit et faites la glisser dans la fenêtre du nouveau job.


Talend vous propose automatiquement une liste de composants correspondant à l'objet sélectionné. Dans notre cas, nous avons sélectionné une table d'une connexion MySQL, et Talend nous propose les composants MySQL :
  • tMysqlInput permet de lire des données à partir d'une une table ou d'une requête MySQL
  • tMysqlOutput permet d'écrire dans une table MySQL
  • ... ... 
Choisissez le composant tMysqlInput et cliquez sur OK


Comme notre connexion est liée à des variables de contexte, Talend nous propose d'ajouter ces variables au job. Elles nous seront utiles au moment de l'exécution. Cliquez sur le bouton Ajoute.
Le composant est placé dans la fenêtre du job et a pris le nom de la table.
Procédez de la même manière pour le fichier Excel : un composant tFileInputExcel est automatiquement inséré dans la fenêtre du job.

Il faut maintenant lier la table au fichier. Si les 2 objets étaient 2 tables d'une base de données, il suffirait de faire une jointure entre elles par une instruction SQL de type « join » (jointure). 
Grâce à Talend, nous allons pouvoir faire cela presque aussi facilement.
Dans la fenêtre Palette, cliquez sur l'onglet Transformation, choisissez le composant tMap et faites le glisser dans la fenêtre du job.
Il suffit de faire un simple clic sur le composant, de déplacer le pointeur vers l'espace de travail du job puis de cliquer à nouveau pour le déposer.


Nous avons donc 2 sources de données en entrée, que l'on va lier grâce au composant tMap.
Les liens dans Talend permettent de définir la logique d'exécution d'un job :
  • déroulement normal du job
  • déroulement en cas d'erreur
  • conditions d'exécution
  • … … 
Dans notre cas, les 2 composants en entrée vont être liés au composant tMap par un lien de type Principal.
Faites un clic-droit sur le composant tMysqlIput (produit) : le menu Ligne permet de choisir un type de lien : choisissez Principal puis cliquez sur le composant tMap.


Faites de même entre le composant tFileInputExcel (Fournisseur) et le composant tMap.


Prenez bien garde à le faire dans cet ordre car le premier lien va définir l'objet principal et le second l'objet sur lequel Talend va faire un « lookup », c'est-à-dire rechercher les valeurs correspondant à la clé (que nous allons définir à la prochaine étape).
Vous voyez un rectangle à fond gris encadrer les objets reliés entre eux : il permet de manipuler ensemble les 3 objets, et réduire ce cadre grâce à l'icône en haut à droite, ce qui est pratique lorsqu'on commence à avoir beaucoup de composants dans l'espace de travail.

Renommez les 2 liens row1 et row2 avec le nom des objets source (respectivement produit et fournisseur) : vous verrez que cela facilite la compréhension dans l'étape suivante.
Nos composants sont reliés, il va falloir maintenant définir la façon dont les objets produit et fournisseur sont liés.
Cliquez sur le composant tMap puis sur l'onglet Component en dessous de l'espace de travail.


Cliquez sur le bouton "…" à droite du libellé Editeur de Map : le fenêtre de « mapping » s'ouvre.
Vous pouvez également double-cliquer sur le composant tMap
La fenêtre de définition du mapping est composée de 3 parties :
  • à gauche : les objets source, 
  • à droite : l'objet cible
  • au milieu : une zone de définition de variables permettant de faire des calculs intermédiaires par exemple
Intéressons nous dans un premier temps à la partie de gauche qui va nous permettre de relier les 2 objets produit et fournisseur.
C'est la colonne fournisseur qui permet de faire le lien : cliquez donc sur la colonne fournisseur de l'objet produit puis glissez la vers la colonne fournisseur de l'objet fournisseur.
Cochez la case Inner join : si la valeur n'existe pas dans le fichier fournisseur, la ligne de la table produit ne sera pas retournée.


Il faut maintenant s'occuper du fichier cible : nous allons par exemple écrire les données dans un fichier CSV. 
Rappelez vous : dans l'article précédent, nous avons défini un modèle de fichier CSV. Nous allons maintenant nous en servir.
Dans les métadonnées, cliquez sur le fichier délimité produit_fournisseur et glissez le dans l'espace de travail.
Une fenêtre de choix du composant s'affiche : choisissez le composant tFileOutputDelimited.
Faites clic-droit sur le composant tMap, choisissez New Output puis cliquez sur le composant  tFileOutputDelimited
Talend vous demande de nommer ce lien : donnez lui le même nom que le fichier cible (produit_fournisseur).
Talend vous demande s'il faut récupérer le schéma du composant cible : cliquez sur Oui (moins on en fait mieux on se porte).
Voici ce que vous devez avoir dans la fenêtre de travail :


Vous remarquez une croix rouge à coté du composant produit_fournisseur : si vous amenez le pointeur de la souris sur l'icône, le message d'erreur est affiché dans une info-bulle : le paramètre (Nom de fichier) est vide alors que ce paramètre est requis.
En effet nous avons glissé un modèle de fichier CSV dans l'espace de travail mais ce modèle ne comportait pas de nom de fichier en sortie. C'est dans le composant  tFileOutputDelimited qu'il va falloir définir ce paramètre.
Cliquez sur le composant puis sur l'onglet Component s'il n'est pas déjà sélectionné, puis cliquez sur le bouton du champ Nom de fichier.
Si le composant est issu du référentiel, Talend vous propose de basculer en mode intégré, c'est-à-dire de récupérer dans le composant les propriétés définies dans le référentiel, notamment le schéma des colonnes du fichier.
Acceptez puis cliquez à nouveau sur le bouton et choisissez l'emplacement du fichier (nommez le fichier produit_fournisseur.csv).
Cliquez sur le bouton à droite du libellé Editer le schéma pour vérifier que le schéma est bien celui défini dans le référentiel : Talend vous affiche par défaut le mode consultation seule car le schéma est issu du référentiel.
Maintenant que le fichier cible est défini, il ne vous reste plus qu'à définir la manière d'alimenter ses colonnes.
Retournez sur le composant tMap et double cliquez dessus : la fenêtre de mapping s'affiche et le fichier produit_fournisseur s'affiche dans la partie de droite.
Encore une astuce pour les fainéants : le bouton Auto Map ! : il relie automatiquement (en fonction de leur nom) les colonnes des objets sources et celles de l'objet cible.
Prenez l'habitude de nommer de manière normalisée les colonnes dans vos schémas et vous pourrez user et abuser de cette fonctionnalité.


N'oubliez pas de valider par le bouton OK.

Ça y est, vous êtes enfin prêts à exécuter votre premier job Talend.
Grand moment de vérité !
Cliquez sur l'onglet Exécuter. Quelques options importantes :
  • Enregistrer le job avant d'exécuter : primordial en cas de gros bug !
  • Temps d'exécution : après plusieurs années d'utilisation de Talend, je suis toujours étonné par les performances affichées lors de l'exécution des jobs
  • Statistiques : vous permet de vérifier que le script se comporte normalement
Notez les variables de contexte sur la gauche : elles ont été créées lors de l'ajout de l'objet produit.
Vous pouvez éventuellement les modifier avant l'exécution.
Puis cliquez sur le bouton Exécuter :
Talend génère d'abord l'ensemble des sources java nécessaires puis les exécute.


Il vous reste maintenant à déployer ce job sous forme de programme java exécutable sur un serveur (ou sur votre PC).
Cette opération est très simple :
Faites un clic-droit sur le job que vous voulez déployer et choisissez l'option Exporter les scripts de Job.
Talend va créer un fichier zip contenant l'ensemble des fichiers permettant une exécution autonome du job.
Choisissez le chemin du fichier zip et laissez les autres options par défaut. Validez en cliquant sur le bouton Terminer.


Ouvrez une fenêtre de commande (cmd sous Windows, terminal sous Linux).
Allez dans le répertoire choisi pour le fichier zip.
Dézippez le fichier dans un répertoire.
Déplacez vous dans le répertoire , où se trouve le fichier _run.bat (pour Windows) ou _run.sh (pour Linux) et lancez cette commande.

Vérifiez que le fichier produit_fournisseur.csv a bien été créé et rempli avec les données attendues.
Veillez à ce que la variable d'environnement « path » contienne le chemin de l'interpréteur java (sous Windows : c:\Program Files\Java\jre6\bin, ou C:\Program Files (x86)\Java\jre6\bin sous Windows 7 64 bits)

Ainsi se termine cette série d'articles d'initiation.
Pour ceux qui ne connaissaient pas Talend, j'espère que cela leur a donné envie de s'y mettre.
Pour les autres, si j'ai du courage et du temps, je ferais une suite, qui traitera des multiples possibilités du composant tMap, de l'optimisation des écritures (composants "Bulk") et des composants dédiés au décisionnel (composants SCD).

N'hésitez pas à me contacter si vous avez des questions, des besoins particuliers : jmd@6it.fr