FAQ Talend
FAQ TalendConsultez toutes les FAQ
Nombre d'auteurs : 12, nombre de questions : 52, dernière mise à jour : 15 juin 2021
- Comment passer des paramètres à un script ?
- Comment vérifier d'où provient une erreur lors de la compilation ?
- Comment éviter les problèmes de mémoire lors d'un lookup dans un tMap ?
- Problème récurrent de Java Heap Space ?
- Comment afficher les statistiques lors de l'exécution d'un job ?
- Comment afficher les données qui transitent entre mes composants ?
- Comment chronométrer le temps réel mis par un traitement ?
Pour passer des paramètres à un script Talend, il faut d'abord déclarer une variable (context) dans votre job ou dans votre projet, par exemple "maVariable". Utilisez ensuite cette variable dans votre job aux endroits nécessaires (par exemple un nom de fichier en entrée). En appelant la variable comme ceci :
context.maVariable
Ensuite, après avoir exporté votre script, éditez le fichier *.bat ou *.sh (suivant le système d'exploitation sur lequel vous allez exécuter le script) et rajoutez à la suite de la ligne :
--context_param maVariable
=
maValeur
Testé en version 3.0.3
Pour passer une valeur comportant un ou plusieurs espaces à un paramètre utiliser la syntaxe suivante :
--
context_param maVariable=
"ma Valeur"
Attention cette syntaxe fonctionne uniquement sous Windows pour toutes les version de Talend et à partir de la version 5.1.1 sous Unix.
Si vous voulez passer une valeur avec un espace sous Unix avant la version 5.1.1, modifier le fichier xxx_run.sh généré par Talend et changer la fin de la ligne java...
$*
par
"$@"
Pour cela il suffit d'aller dans l'onglet "Code" du job qui donne un aperçu du code qui sera généré lors de la compilation.
On peut ainsi voir précisément à quel endroit et qu'elle erreur sera levée.
Lors d'un traitement important de données dans un tMap avec un ou plusieurs lookup il convient de sélectionner l'option "Store on disk" du lookup à l'intérieur du tMap. Pour éviter les problèmes de mémoire (Java Heap Space). Pour cela cliquez sur le bouton qui ressemble à un disque dur gris dans l'entrée qui correspond aux lookup. Puis fermer le tMap en appuyant sur "OK".
Maintenant au lieu de faire le traitement en mémoire, Talend le fera sur le disque en créant des fichiers temporaires.
Dans l'onglet "Component" des propriétés du tMap, il ne reste plus qu'a indiquer où seront créés les fichiers temporaires qui seront utilisés pour le traitement des données au moment du lookup.
A savoir : ce problème provient d'un manque de mémoire allouée à la machine virtuelle Java lors de l'exécution du job.
3 solutions s'offrent à vous :
- Se référer au post précédent : Comment éviter les problèmes de mémoire lors d'un lookup dans un tMap ?
- Editer les paramètres d'exécution du job en local. Pour cela cliquez successivement sur Window > Preferences. Dans la fenêtre qui s'affiche, cliquez successivement, dans l'arborescence, sur Talend > Run/Debug. Ici, spécifiez une valeur de -Xmx supérieur. Par exemple -Xmx2048
- Editer le fichier nomDuJob.sh ou nomDuJob.bat (suivant si vous exécutez le job sur un environnement Unix ou Windows) après avoir exporté votre job en script et remplacez la valeur -Xmx1024 par -Xmx2048 par exemple.
Cliquez sur l'onglet "Run (job ...)". Cochez la case "Statistics".
Les statistiques vont alors s'afficher sous forme de nombre de données entrantes et sortantes pour chaque composant du job avec le temps mis pour faire les traitement.
C'est très utile pour débugger et voir combien de données sont traitées dans tel ou tel job et/ou composant.
Cliquez sur l'onglet "Run (job ...)". Cochez la case "Traces".
Les données qui transitent entre les composants vont alors s'afficher sous forme d'un tableau avec pour colonne "NomDeLaColonne|valeur".
Comme les statistiques, le mode trace permet un meilleur débugage.
Avec sa montre bien sûr...
Non c'est beaucoup moins contraignant que ça ! Vous pouvez attendre le retour dans la console Talend mais il n'est pas très précis et non personnalisable. C'est pour cela que vous pouvez utiliser les composants tChronometerStart et tChronometerStop de la façon suivante :
tChronometerStart (OnSubjobOk) -> tRunJob (OnSubJobOk) -> tChronometerStop.
OU autre cas de figure :
tChronometerStart (OnSubjobOk) -> tFileInput -> traitement...-> tFileOutput et mettre une sortie de type OnSubjobOk sur le tFileInput (soit le premier composant du job) vers un -> tChronometerStop.
Le composant tChronometerStop étant configuré de la manière suivante:
- Since the tChronometerStart (lié avec le tChronometerStart de début de job)
- "Display human readable duration" coché