Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Réflexions informatiques

Astuces sur Talend

04/06/2020
Quelques techniques et extraits de code qui peuvent aider sur des projets Talend.

Afficher le contenu du globalMap

Le globalMap est un tableau permettant de stocker en mémoire les données du traitement en cours. Voici comment afficher son contenu :

java.util.Iterator<String> it = globalMap.keySet().iterator();
while(it.hasNext())
    {
    String key = it.next().toString();
    String value = globalMap.get(key)==null ? "null" : globalMap.get(key).toString();
    System.out.println(" - " + key + " = " + value);
    }

Ajouter un numéro incrémenté sur chaque ligne d'un flux

  • Ajouter un TMap sur le traitement
  • Placer ceci sur la variable contenant le numéro auto : Numeric.sequence("ordre",1,1)

Ne garder que la dernière ligne sur des lignes dupliquées

Le tUniqRow ne conserve que la première ligne des lignes dupliquées. Pour faire l'inverse, il faut inverser l'ordre des lignes.

  • Ajouter un champ contenant un numéro incrémenté sur chaque ligne (astuce précédente)
  • Faire un tri inversé sur le champ ajouté (tSortRow)
  • Faire un tUniqRow

Incrémenter un compteur et récupérer sa valeur

// Initialise le compteur
globalMap.put("NbLignes", 0);
// Incrémente la valeur
globalMap.put("NbLignes", ((Integer)globalMap.get("NbLignes"))+1);
// Récupère la valeur
Integer compteur=((Integer)globalMap.get("NbLignes"));

Récupérer une donnée précise d'un sous-job

  • Dans le sous-job :
    • Créer une variable de contexte : globaMapParent (de type Object)
    • Ajouter un tJavaRow avec le code suivant :
      // Affectation
      if (context.globaMapParent instanceof java.util.Map)
      ((java.util.Map) context.globaMapParent).put("id_classe", input_row.id);
  • Dans le job principal :
    • Ajouter un tJava avec le code suivant :
      // Crée un global map pour envoi des données enfant
      globalMap.put("globalMapEnfant", new java.util.concurrent.ConcurrentHashMap());
    • Sur le tRunJob, affecter le paramètre globalMapParent = globalMap.get("globalMapEnfant")

Appliquer une condition Run If sur chaque ligne d'un flux

Si vous utilisez la condition Run If sur chaque Row d'un flux, seulement la dernière ligne du flux sera traitée dans la condition. Le traitement sera scindé en deux parties : la première partie avant le Run If et la seconde après.

Pour pouvoir appliquer une condition sur chaque ligne, il faut utiliser le composant tFlowToIterate, branché d'un côté au flux et de l'autre à un composant tJava (ou tJavaFlex). Puis ajouter un second composant tJava et placer entre les deux la relation Run If. Le schéma ci-dessous présente la situation :

Le flux complet sera ainsi traité du début à la fin, en appliquan le Run If sur chaque ligne.

Exécuter une requête SQL

Le composant tDBRow permet d'exécuter certaines requêtes particulières. Ci-besoin, voici un code qui récupère la connexion établie au préalable et exécute aussi une requête :

java.sql.Statement statement = ((java.sql.Connection) globalMap.get("conn_tDBConnection_1")).createStatement();statement.execute("ALTER SEQUENCE ma_table RESTART WITH 1;");statement.close();

Trier les lignes par date avec NULL au début ou en fin de liste

Le composant TSortRow permet de trier le flux selon un champ spécifique. Cependant, dans certains cas, si on souhaite avoir les NULL en fin de liste ou en en début de liste, le composant ne propose pas de solution directe. Voici comment le gérer pour un champ date :

  • Lors d'un tri par dates décroissantes, pour avoir le NULL en fin de liste, spécifiez "Tri Date"
  • Lors d'un tri par dates décroissantes, pour avoir le NULL en début de liste, spécifiez "Tri Alpha"
  • Lors d'un tri par dates croissantes, pour avoir le NULL en fin de liste, spécifiez "Tri Alpha"
  • Lors d'un tri par dates croissantes, pour avoir le NULL en début de liste, spécifiez "Tri Date"
Dernière modification le 07/11/2020 - Quillevere.net

Rechercher sur le site

rss RSS info Informations