fbpx

Utilisation avancée de Talend : code Java et traitement XML

Dans ce tutoriel, nos experts vous expliquent comment créer une routine personnalisée et l'utiliser dans un job Talend. Dans une seconde partie, vous découvrirez comment écrire et lire un fichier XML. Ce tutoriel vous montre des cas d'utilisation avancée de Talend Data Integration avec l'utilisation de code Java et le traitement XML. 




Création d'une routine personnalisée

 

Nos experts Talend vous d'abord vous expliquent comment écrire une routine et l’utiliser dans un Job.

Tout d'abord, créez un nouveau Job nommé « Routine ».

Dans votre référentiel, dépliez l’onglet Code, faites un clic droit sur Routines puis créez un nouveau dossier nommé « Custom ».


Création d'un nouveau dossier dans le référentiel Talend

Faites un clic droit sur votre nouveau dossier puis créez une routine.

Appelez-la « MaLibrairie ».


Création d'une routine dans le référentiel Talend

En plus d’écrire le code en Java, vous pouvez voir qu’il y a une syntaxe spécifique pour définir une fonction. Vous avez d’ailleurs un exemple helloExample.


Création d'une routine Talend : aperçu du code java

Dépliez le dossier system des Routines et ouvrez le fichier TalendDataGenerator.


Ouvrir le fichier TalendDataGenerator dans le dossier system des Routines Talend

Vous retrouvez ici les fonctions de génération de données que nous utilisons dans notre Job Generateur. Les autres fichiers correspondent aux autres librairies disponibles dans le studio et dont nous avons déjà utilisé quelques fonctions.

Copiez-collez la fonction getFirstName() depuis le fichier TalendDataGenerator vers votre fichier MaLibrairie. Attention, copiez-collez également les commentaires présents au-dessus de la fonction.


Copier coller la fonction getFirstName depuis le fichier TalendDataGenerator vers une librairie

Renommez-la en getPrenomMasculin et modifiez la liste pour ne laisser que quelques prénoms masculins.

Ajoutez-lui une description (comme pour la fonction helloExample) et changez sa catégorie en MaLibrairie.


Renommer une fonction Talend et modification des paramètres

Copiez-collez la fonction et renommez-la pour faire de même avec les prénoms féminins.


Copier coller une fonction dans le studio Talend

Ecrivez maintenant une fonction getPrenom prenant en paramètre un type char et appelant la bonne fonction selon le paramètre.


Ecriture d'une fonction getPrenom dans le stduio talend

Votre routine finale doit ressembler à ceci.


Aperçu de la routine finale créée sous Talend

Rendez-vous dans votre Job Routine.

Ajoutez un composant tJavaFlex. Ce composant nous permet d’écrire du code Java pour générer des données.


Ajout d'un composant tJavaFlex dans un job Routine sous Talend

Modifiez son schéma pour ajouter une colonne « sexe » de type Character.


Modification du schéma du composant tJavaFlex : ajout d'une colonne type character

Dans ses propriétés vous pouvez voir que l’écriture du code est divisée en 3 parties. Une première partie sert à initialiser nos variables et à démarrer la boucle, la seconde défini le traitement à appliquer pour chaque ligne, tandis que la dernière partie sert à fermer la boucle et éventuellement réaliser des opérations à la fin de celle-ci.

Ajoutez un tJavaRow à la suite du tJavaFlex et liez-le par un lien Main


Jointure d'une composant tJavaFlex avec un tJavaRow via un lien Main sous Talend

Nous allons générer des lignes de caractères pour faire appel à notre fonction getPrenom.

Pour cela, remplissez le code du tJavaFlex de cette manière :


Complétion du code du composant tJavaFlex sous Talend

A présent, ouvrez les propriétés de votre tJavaRow. Nous avons vu dans les exercices sur les webserviceset l'API Trello que ce composant peut traiter ligne par ligne les données reçues pour éventuellement effectuer un traitement.

Appliquez votre fonction getPrenom en prenant en paramètre le caractère reçu par le tJavaFlex.

Sachant que l’on veut renvoyer une donnée en sortie du tJavaRow (contrairement aux autres fois ou nous stockions juste la ligne dans le contexte), il faut commencer par modifier son schéma pour ajouter une colonne « prenom » de type String.


Modification du schéma du composant tJavaRow : ajout d'une colonne de type String

Ensuite, vous devez définir dans son code que la variable prenom en sortie doit recevoir le résultat de la fonction getPrenom.

Ecrivez donc : output_row.prenom = MaLibrairie.getPrenom(input_row.sexe);

Remarquez que votre fonction s’appelle en passant par votre librairie et il est donc possible d’utiliser l’auto-complétions pour la retrouver facilement.


Paramétrage du code du composant tJavaRow sous Talend

Enfin, ajoutez un tLogRow pour afficher vos lignes.


Utilisation du composant tLogRow pour afficher les lignes

Lancez votre Job. La console devrait alors vous afficher vos prénoms en fonction des sexes définis dans la liste de départ.

 

Traitement d'un fichier XML

 

Dans cette deuxième partie, nous allons voir comment écrire et lire un fichier XML. 

Créez un nouveau Job nommé « XML ».

Copiez-collez le contenu de votre Job EtatComplet dans ce job (voir la partie sur l'utilisation de jointures multiples dans le tutoriel dédié au composant tMap). Vous pouvez aussi le recréez complètement de façon à avoir vos 3 tables personne, personne_voiture et voiture liés par un tMap et ayant une sortie avec les informations sur les personnes avec leurs voitures.

N’oubliez pas d’ajouter votre contexte de connexion à votre Job.


Création d'un job avec 3 tables

Pour rappel, voici le contenu du tMap.


Aperçu du contenu du composant tMap

Supprimez votre tLogRow pour le remplacer par un tFileOutputXML.

Configurez l’emplacement de création du fichier sur votre poste et précisez que vous souhaitez 'personne' comme Marqueur de ligne.

Lancez votre Job et ouvrez le fichier généré.


Aperçu du fichier généré par l'exécution du job Talend

Nous retrouvons bien toutes nos lignes de la même façon que lors de l’affichage en console.

Désactivez votre sous-job de génération du fichier XML.

Pour lire un fichier XML, il existe le composant tFileInputXML : ajoutez-le à votre Job.

Dans ses propriétés, sélectionner le chemin jusqu’à votre fichier précédemment créé.

Modifiez son schéma pour ajouter une colonne nommée « document » de type Document.

Définissez '/' pour la Requête XPath boucle pour dire que nous prenons tout le document, puis définissez '.' dans le Mapping pour la colonne document.

Cochez également Obtenir les nœuds.


Paramètres du composant Talend tFileInputXML

Pour lire correctement le fichier XML, ajoutez à sa droite un tXMLMap et reliez-le par un Main.


Jointure d'un composant tFileInputXML et d'un tXMLMap par un flux main

Double cliquez sur ce composant pour l’ouvrir. Son fonctionnement est similaire au tMap.


Fonctionnement du composant Talend tXMLMap

Observez votre entrée. Pour récupérer les données vous devez faire correspondre le schéma à celui de votre document généré. Vous avez déjà le document général et le nœud root.

Ajoutez donc un sous-élément « personne » pour le faire correspondre à notre document.


Création d'un sous élément dans le composant tXMLMap

Ajoutez ensuite les sous-éléments id, nom, prenom, immat, marque et couleur dans personne.


Ajout de sous élément dans le composant tXMLMap

Nous avons tous nos champs.

Il reste à définir que l’élément répété dans le document est le nœud personne. Faites un clic droit sur personne et choisissez As loop element.


Aperçu des paramètres du sous-élément : as loop element

La boucle est ainsi définie sur le nœud personne.

Créez une nouvelle sortie et faites glisser toutes vos propriétés.


Glisser déposer les propriétés en sortie du sous-élément

Fermez le tXMLMap en cliquant sur OK et ajoutez un tLogRow pour visualiser les lignes.


Ajout d'un composant tLogRow dans un job Talend

Lancez votre Job et vérifiez dans la console que vos données sont bien lues.

Si nous avions voulu recréer un XML en sortie, il aurait suffi de redéfinir une colonne de type Document et de lui ajouter des éléments comme nous l’avons fait pour l’entrée.

Sachez également qu’il n’est pas possible nativement dans cette version du studio de créer des documents XML avec des boucles imbriquées (par exemple regrouper les voitures dans les personnes).


Sur le même sujet...


Orchestration des Jobs, gestion des erreurs et des logs

Dans ce tutoriel Talend, vous découvrirez comment orchestrer des jobs et sous-job, comment gérer les erreurs, les stats et les logs.

Découvrir

Flux d’itération et synchronisation d’événements sous Talend

Apprenez l'utilisation des composants de boucle et des flux d'itération. Découvrez les bonnes pratiques pour la synchronisation d'un sous-job en fonction d'un événement.  

Découvrir