Blog technique

La routine, ça a du bon (sur Talend) !

Talend étant limité par le nombre de ses composants, il est donc nécessaire de créer soi-même des routines pour déployer des jobs spécifiques.

Cerise sur le gâteau, plus vous créez de routines sur Talend, plus vous êtes à-même de concevoir votre propre bibliothèque de routines et optimiser ainsi votre puissance de factorisation de code.

Qu’est-ce qu’une routine sur Talend ?

Sur Talend, une routine recouvre un ensemble de fonctions de programmation développées via des lignes de code rédigées sous Java (langage de développement de Talend).

Les routines permettent d’effectuer des actions que les composants, installés originalement sur Talend, ne peuvent pas effectuer.

Les fonctions commencent par l’expression « Public Static » qui représente le statut de la fonction puis par le nom de la fonction. Il s’agit ici de langage java.

  • Le mot « Public » désigne la portée de la classe ou de la fonction.
  • Le mot « static » permet d’appeler une fonction sans instancier un objet.
public static

Il existe deux types de routine :

Routines sur Talend

1. Les routines système inclues dans Talend :

Elles sont accessibles via > Codes > Routines > Systems et permettent d’effectuer les opérations de routine déjà installées sur Talend.

Routines Arborescence Talend
Liste des routines système sur Talend
Routine récupération Date
ex. de routine de récupération de la date actuelle

2. Les routines « utilisateurs »

Elles sont créées sur-mesure pour certains projets. 

Dans l’exemple suivant, nous ne disposons pas de routine permettant de chiffrer ou déchiffrer un mot de passe pour notre client.

  • Nous avons donc créé nous-mêmes cette fonction de chiffrement et déchiffrement de mot de passe, que nous avons nommée « crypto ».
Routine Crypto
  • Autre exemple : la routine « Clean » qui comporte des fonctions permettant entre autres de nettoyer les données (n° de téléphone) et qui n’existe pas non plus en natif sur Talend.
Routine Clean Talend

Cette routine permet de :

  • Nettoyer et valider les numéros de téléphone
  • Vérifier que les adresses e-mail sont bien valides avant de les intégrer dans la base.

Une routine n’est finalement qu’une classe Java comportant des fonctions.

  • Encore un exemple, le ParseBigDecimal
Clean ParseBigdecimal

Le parseBigDecimal fait partie de la routine « Clean », il permet de faire des conversions sur des données décimales qui peuvent contenir des virgules ou des points. Cette fonction permet d’éviter d’encombrer avec la gestion des conditions, la gestion des NPE (Null Pointer Exception) dans les TMap (composant de Talend qui fait le mapping entre la source de données et la BDD cible).

Parse Big Decimal 2

Voici un exemple pour illustrer :

Parse Big Decimal 3

Dans le contenu de ce “Tmap”, nous essayons de faire un mapping entre 2 bases. Seul problème, la colonne “prix” de la base de données en sortie n’est pas du même type que la base de données en entrée.

Une conversion de “String” vers “Bigdecimal” s’impose alors.

  • Cas sans routine :

Constructeur d'expression
  • Cas avec routine :
Constructeur d'expression 2

Ces deux cas nous montrent clairement que les routines permettent de :

–          désencombrer les TMap

–          et de mieux gérer les “Null Pointer Exception”.

Elles permettent ainsi la factorisation de code dans un projet TALEND et aussi la réutilisabilité de codes dans un autre projet.

  • Le cas ci-dessous illustre une autre utilité des routines utilisateurs :

Il s’agit du test de non-régression qui est un des tests les plus importants dans le processus de traitement des données. Le fait d’automatiser ce genre de test grâce aux routines sur Talend montre la puissance que peut avoir une routine dans un projet de traitement de données.

 

 

Non-Regression

Nous allons nous focaliser sur le test portant sur la validité des téléphones (isTelephoneValid). La fonction de notre routine Clean qui vérifie la validité d’un numéro est isTelephoneValid().

1. Le composant tFixedFlowInput nous permet ici de mettre les différents cas de tests ainsi que les résultats / réponses attendus.

En voici un exemple :

tFixedFlowInput

Dans la partie “Contenu” de notre composant, on a une liste de numéro de téléphone et d’assertion booléenne séparé par “ ;” sur chaque ligne.

L’assertion “1” correspond, dans ce cas, au fait qu’un numéro soit valide.
L’assertion “0” correspond, dans ce cas, au fait qu’un numéro soit invalide.

2. Le composant tAssert_2 nous permet de vérifier nos assertions précédemment listées par rapport à la fonction isTelephoneValid de notre routine.

Chaque numéro de téléphone est passé en paramètre de la fonction isTelephoneValid. La valeur retournée ensuite par cette dernière est comparée à l’assertion correspondant au numéro de téléphone.

Dans le cas où notre “expression” est valide, notre composant renvoie un “ok”. Le cas contraire, il renvoie un message d’erreur : “failed”.

3. Notre composant tAssertCatcher nous permet de capturer les tAssert pour pouvoir afficher leurs contenus au travers du composant tLog.

Assert Catcher 1

Après exécution de notre job, voici le résultat du test :

Resultat Test

Dans notre premier cas de test, nous obtenons un statut ”failed”, ce qui démontre que le résultat retourné par notre fonction est différent de l’assertion correspondant au numéro concerné. Ainsi l’assertion a été faussée dans la liste des cas de tests car le numéro est bien valide. A part ce dernier, les autres cas ont bien été validée. 

Vers une « bibliothèque de routines »

Une fois codée, une routine est réutilisable dans un autre projet Talend. C’est pourquoi l’expérience accumulée par Effidic nous a permis de créer une véritable bibliothèque de routines.

Cet outil nous est extrêmement utile car il nous permet, au gré des projets, de puiser dans un nombre croissant de routines et donc d’optimiser notre agilité et affuter sans cesse notre expertise sur cet outil, quel que soit le projet qui nous est confié.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.