Téléphone Next Decision02.34.09.31.70

Contact Next Decisioncontact@nextdecision.fr

Les bonnes pratiques Talend

Quelques règles à observer pour bien pratiquer Talend

Notre conseil pour bien pratiquer Talend : rester le plus simple possible !

  • Nommer les composants, mettre des titres et des notes
  • Attention à la lisibilité
  • Eviter la barre de défilement horizontale, aligner les sous-jobs
  • Au-delà d'une trentaine de composants, se poser la question de la division en plusieurs jobs (père-fils?)
  • Attention à l'organisation et aux noms des dossiers contenant vos jobs

Les composants Talend les plus utilisés

  • tMap : C'est le composant le plus important et le plus puissant de Talend. Il permet de réaliser les multi opérations (jointures, transformations, filtres, rejets...) Les expressions utilisées sont en Java.

NB : IF THEN ELSE n'est pas autorisé !

Le nombre d'entrées et sorties n'est pas limité officiellement, mais pour la maintenabilité, il est fortement conseillé de limiter les entrées à un ou deux, les sorties peuvent être nombreuses.

  • tAgregateRow : Ce composant reçoit un flux de données et fait une agrégation basée sur une ou plusieurs colonnes. Il permet d'établir des métriques et des statistiques basées sur des valeurs ou des calculs.

NB : Il faut faire attention à ce que l'entrée et à la sortie de la colonne soient identiques. Ce composant met par défaut la première colonne de sortie pour toutes les autres.

Par rapport à SQL, l'ordre est à l'inverse : d'abord Group By ensuite opérations.

Opérations : Min, max, somme, moyenne, compter, premier, dernier, liste...

  • tSortRow : Ce composant trie les données dans un flux. Pour la performance du traitement, il est conseillé d'utiliser ce composant avant et après une agrégation.
  • tFilterRow : Il filtre les données dans un flux. Dans la partie "avancé", une expression Java peut être utilisée.

NB : La méthode simple et la méthode avancée ne peuvent pas être cumulées.

  • tFlowTolterate : Ce composant ne peut être utilisé en début de chaîne. Il permet la transformation d'une liste de valeurs en liste d'exécution. Il effectue une itération sur les données d'entrée et génère des variables globales. Il est utilisé afin de lire des données ligne par ligne.

Dans le paramètre d'iterate il est possible de choisir le nombre d'exécutions en parallèle, c'est de l'exécution concurrentielle, ce qui permet que le traitement soit rapide. Dans ce cas, l'exécution est aléatoire. Si l’ordre est important pour le traitement, ne pas utiliser cette méthode.

  • tIterateToFlow : Ce composant permet de transformer des données non traitables en flux traitable. Ce composant ne peut être utilisé en début de chaîne.
  • tFileList : Ce composant liste les fichiers d'un répertoire donné (possibilité de masque de fichier).

La méthode à observer est la récursivité (inclure les sous-répertoires). Ce composant est capable d'aller lire les fichiers recherchés dans tous les sous-dossiers et de les exécuter en même temps. C'est le parallélisme.

Il possède des variables globales tels que :

    • CURRENT_FILE : nom du fichier courant
    • CURRENT_FILEPATH : nom du fichier courant ainsi que son chemin d'accès
    • CURRENT_FILEEXTENSION : extension du fichier courant
    • CURRENT_FILEDIRECTORY : répertoire du fichier courant
    • NB_FILE : nombre de fichiers itérés
  • tLogRow : (Affichage par ligne) : C'est un excellent outil de débogage. Il envoie les données vers la console.
  • tNote ou Note : Il permet d'ajouter des commentaires, une présentation, liste les évolutions du job.

NB : Le composant est "Note" mais s'appelle en tapant "tNote".

  • tMemorizeRow : Ce composant mémorise une ou plusieurs lignes et permet au(x) composant(s) suivant(s) d'effectuer des opérations de votre choix sur les lignes mémorisées. Le nombre de lignes à mémoriser doit être mis à 2 ou plus.

NB : En amont de ce composant, faire un tri en utilisant le composant tSortRow

  • tAggregateSortedRow : Ce composant reçoit un flux de données triées sur lequel il effectue une agrégation basée sur une ou plusieurs colonnes.

Si les données sont déjà triées, les performances n'en sont que plus optimisées.

  • tFixedFlowInput : Il permet de créer une mini table (colonne + lignes) avec des valeurs en dur.

Talend et les différences entre tJava, tJavaRow et tJavaFlex

Ces 3 composants permettent l'insertion de codes Java personnalisés.

Un composant Java comprend 3 parties : Begin, Main et End.

  • tJava : Le tJava n’a qu’un Begin donc il ne s’exécute qu’une fois. Il ne gère pas de flux de données (de type row) donc pas de sortie. Rattaché à un job ou à un sous-job par un trigger ( onComponentOk ou onSubjobOk)
  • tJava Row : Le tJava Row n'a que la partie Main.
  • tJavaFlex : Le tJavaFlex est similaire au tJava. La différence est qu’il crée automatiquement un flux de données en sortie à partir du flux de données en entrée (donc pas besoin d’initialisation). Ce composant a le begin, main et end. Il peut donc être mis seul ou en début de job, ou même au milieu en prenant en compte le flux de données. C’est le plus flexible des trois.

Fichiers plats : Talend lit et écrit différents types de fichiers plats tels qu’Excel, CSV, positionnel, xml… Chaque type de fichier possède deux composants spécifiques (pour lire « Input », pour écrire « Output »).

BDD : Talend lit et écrit les différents types de BDD tel que MSSQL, MYSQL, ORACLE. Les composants spécifiques principaux sont la connexion à la base de donnée, la lecture, l'écriture et le commit / roll back.

Talend et quelques notions Java

== : Égal
!= : Différent
= : Déclaration ou valorisation d'une variable en Java


Xxxx == 100 ou xxxx > 100 ou xxxx < 100 : Test sur la valeur d'un champ numérique


"toto".equals("xxx") / !"toto".equals("xxx") : Test d'égalité / inégalité d'un champ de type String


Xxxx == null ou xxxx != null
Relational.isNull(Xxxx) / ! Relational.isNull(Xxxx) : Test de la nullité ou non d'un champ


Xxxx.isEmpty() / ! Xxxx.isEmpty() : Teste si le champ est vide ou pas (vide <> null : un champ peut être non null mais vide)


Xxxx.startsWith ("xx") / Xxxx.endswith ("xx") : Commencer / Terminer par xxxx, LIKE en SQL ("xx%")/SQL ("%xx")


Xxxx.contains ("xx") : Contenir xxxx , LIKE en SQL ("%xx%")


Boolean : True/ False (si la valeur est en string) ; 1/0 (si la valeur est en int)

Exemples de conversion Talend

Integer.valueOf("xxxx") : Conversion d'un string en int


String.valueOf(xxxx) : Conversion d'un int en string


variable.toString() ou xxxx + "" : Conversion d'un int ou float en string


Float.parseFloat("xxxx") : Conversion d'un char en float


BigDecimal("xxxx" ou xxxx) : Conversion en BigDecimal (de string ou integer)


TalendDate.parseDate("dd/MM/yyyy","01/01/2020") : Conversion d'un string en date en précisant le format du string


TalendDate.formatDate("dd", XXX) : Afficher uniquement le jour; Il faut que XXX soit au format Date (via parseDate si besoin). La sortie est au format string.


StringHandling.LEFT(xxxx,y) / StringHandling.RIGHT(xxxx,y) : Récupération des Y caractères de la chaîne en partant de la gauche ou de la droite. Cette fonction propre à Talend protège des null.


xxxx.substring(0,3) : Du premier au troisième caractère d'une chaîne.


Arrays.asList("X","Y").contains(xxxx) : Champ xxxx dans la liste. Nécessite un « import java.util.Arrays; » dans Advanced settings d'un tJavaRow, par exemple.


StringHandling.CHANGE(chaine ,"caractère à remplacer", "caractère remplaçant")) : Substitution d'un caractère dans une chaîne. Cette fonction propre à Talend protège des null.


Math.abs(xxx) : Valeur absolue version Java (+ fiable), Talend retourne un Double dans tous les cas (10.0).

Talend et les tests ternaires

Xxxx != null ? Xxxx : null : (Test) ? Valeur si vrai : Valeur si faux


Xxxx != 0 ? Xxxx : 0 : En Java, si l’objet est en int, le null n'est pas accepté, il faut mettre un 0.


"Toto".equals(xxxx) ? Xxxx : "" : Si XXXX = "Toto", alors afficher XXXX, sinon vide


Les expressions régulières (Regex) dans Talend

Ces expressions servent à définir des modèles pour la recherche et la manipulation de et dans des strings.

Exemple pour enlever les caractères d'un string :

"12zer45aaz43".replaceAll("\\D+",""); Résultat : 124543

Les routines de Talend

Ce sont des classes java. Elles sont utilisées pour centraliser les transformations complexes et répétitives. Le code est soit développé directement sous l'ETL, soit importé avec des Jars externes (library java). La routine est appelée par l’ETL, sous la forme classe.methode (paramètre).

Les variables dans Talend

Les variables globales

Elles sont liées à un composant et générées automatiquement en fonction du type de composant. Elles ne sont accessibles que dans le job courant. (scope = portée). Elles permettent d'accéder à l'état du composant lié :

Nom du fichier / Numéro de l'itération courante / message d'erreur

Syntaxe d'un appel à une variable :

(Type)globalMap.put("nom de variable", "la variable"); --> déclaration d'une variable globale

(String)System.out.println(((String)globalMap.get("nom de variable"))); --> récupération de la variable globale déclarée

Variables de contexte context.xxxx

Une variable de contexte peut avoir différentes valeurs selon le contexte (Dev, R7, PDR). Elles permettent d'exécuter le même job dans différents contextes / environnements. Elles peuvent être utilisées dans tout le projet en activant "Transmettre tout le contexte" dans les tRunJob. Il est possible de revaloriser la variable dans un job.

Les messages d'erreurs fréquents dans Talend

Data Truncation : La longueur des données d'un champ dépasse sa taille. En général, Talend indique le champ concerné, mais pas dans quelle ligne.

java.lang.NullPointerException : Cela se produit généralement lors de l'utilisation d'un test ternaire dans un tMap et que le cas de nullité de l'objet en entrée n'a pas été traité.

java.lang.NumberFormatException:null :

    • Si conversion en nombre d'une chaîne de caractères qui ne représentent pas un nombre.
    • Si l'objet est null : remplacer le null par une valeur par défaut (0).
    • Si la valeur est divisée par 0.

For input string :

    • Si le format ne correspond pas (int dans string par exemple).
    • Si l'en-tête du fichier intégré est traité comme une ligne. (nb ligne entête)
    • Si le float (12.3) est écrit avec (12,3) : La virgule n'est pas acceptée.

NB : Cette erreur n'empêche pas le traitement, il saute la ligne qui pose problème et continue son traitement.

Retour au Wiki

Vous recherchez des consultants experts en Talend? Next Decision est là ! alors Contactez-nous !

Laissez-nous vos coordonnées et nous vous rappellerons sous 24 heures.

 

Les adresses
Next Decision