FAQ Talend
FAQ TalendConsultez toutes les FAQ
Nombre d'auteurs : 12, nombre de questions : 52, dernière mise à jour : 15 juin 2021
- Comment créer et exécuter une routine ?
- Comment modifier les routines système ?
- Comment inclure un fichier .properties dans le CLASSPATH du projet ?
- Comment inclure une gestion de trace basée sur Log4j ?
- Comment passer des paramètres d'un job père à un job fils ?
- Comment définir la valeur d'une variable de contexte ?
- Comment récupérer la valeur d'une variable de contexte ?
- Comment récupérer le nom du contexte d'environnement courant ?
- Qu'est ce que le mode ELT ?
- Quelle est la différence entre "On Component OK" et "On subjob OK" ?
- Comment activer un filtre sur une sortie d'un tMap ?
- Comment faire une condition dans un composant ?
- Comment vérifier si la valeur d'un champ est nulle ?
- Comment créer sont propre composant Talend ?
- Comment utiliser un schéma dans plusieurs composants sans avoir à le redéfinir ?
- Comment définir le type et la longueur des champs par défaut pour les schémas de tous les jobs ?
- Comment accéder à un fichier sur un partage ?
- Comment récupérer le nom du projet courant dans un job ?
- Comment récupérer le nom du job courant ?
- Pourquoi lorsque l'on essaye de régénérer les classes "stubs" pour un composant "tWebServiceInput" le répertoire de routines reste-il vide ?
- Quels sont les retours du composant tMsgBox ?
- Comment corriger les problèmes avec les composants base de données Ingres ?
- Comment palier aux problèmes d'accentuation dans mes jobs ?
- Comment arrondir un BigDecimal ?
- Comment propager l'ajouter/suppression des variables de contexte du référentiel ?
Tout d'abord pour créer une routine, il faut créer un nouveau fichier de Routine dans la partie "Code" en cliquant droit sur "Routine > Create routine" du volet de gauche.
Ensuite dans le fichier créé, il suffit de faire comme si c'était une classe java avec des méthodes statiques.
Exemple :
/**
* helloExample: retourn "hello" + message.
*
*
* {talendTypes} String
*
* {Category} User Defined
*
* {param} string("developpez") input: la chaine de caractère à afficher.
*
* {example} helloExemple("developpez") # Hello developpez.
*/
public
static
void
helloExample
(
String message) {
if
(
message ==
null
) {
message =
"Talend"
;
}
return
"Hello "
+
message ;
}
Comme vous pouvez le voir, il faut bien définir tous les paramètres d'entrée avant entre les commentaires car sinon vous ne pourrez pas accéder à cette fonction.
Ensuite après avoir enregistré cette nouvelle routine, pour l'utiliser, il suffit d'y faire appel de cette façon :
nomDeLaRoutine.helloExample
(
"tout le monde"
)
On peut aussi retrouver ces routines dans la catégorie "user defined " des fonctions présentes dans Talend.
Testé en version 3.0.3
Par défaut, Talend inclut certaines routines système dans les projets. Vous ne pouvez pas modifier ces routines en les éditant.
Pour ce faire, éditer les fichiers Java dans le répertoire suivant "plugins\org.talend.librariesmanager_X.X.X.rXXXXX\resources\java\routines\system".
Cela vous sera utile par exemple en cas de problème de conversion de type String vers Long, les "" ne sont pas considérées comme égale à 0, et il faut donc modifier la classe ParserUtils pour permettre cette conversion.
Testé en version 2.0.4
Il suffit d'utiliser un composant "tLibraryLoad" et charger le fichier ".properties" voulu. Vous pourrez alors renommer le composant en "tPropertiesLoader" pour être plus "propre".
Testé en version 2.0.4
Par défaut, Talend fournit un composant tLogCatcher pour loguer des informations. Celui-ci peut être utile dans certains cas, mais il ne permet pas de loguer ses propres messages.
Afin de loguer des messages personnalisés de type Info, Warn ou Error :
- rajouter un composant "tLibraryLoad", où vous chargerez votre librairie "log4j.jar"
- rajouter un composant "tPropertiesLoader", où vous chargerez votre fichier "log4j.properties"
- pour initialiser le loguer, rajouter une routine Java "Loguer", où vous allez déclarer un instance statique de votre loguer
Testé en version 2.0.4
Concrètement, vous avez un job père qui appelle un job fils avec un tRunJob.
Dans le job fils, ajoutez des variables de contexte qui serviront de paramètres pour ce job puis enregistrer ce job.
Ensuite cliquez sur le tRunJob présent dans le job père, et allez dans l'onglet "Component". Ici vous avec un tableau "Parameters | Value". Cliquez sur le bouton avec la croix verte. Cela va ajouter une ligne avec pour paramètre le nom d'une variable de contexte présent dans votre job fils. Sélectionnez dans la liste déroulante la variable que vous souhaitez charger et attribuez lui une valeur.
On peut utiliser aussi la coche "Transmit whole context" du tRunJob qui transmettra toutes les valeurs des variables de contexte du job maitre qui sont présents dans le job fils.
Testé en version 2.4.3
Tout d'abord ajoutez un contexte dans l'onglet contexte du Job. Ensuite plusieurs choix s'offre à vous :
1 : définissez directement sa valeur dans l'onglet contexte, partie "Valeur en table". En gros sa valeur par défaut avant traitement.
2 : définissez sa valeur dans un tJava, tJavaRow, tJavaFlex... de la manière suivante :
context.MaVariableDeContexte =
"valeur"
;
ou suivant les cas :
context.setProperty
(
"MaVariableDeContexte "
,"valeur"
);
3 : liez un flux principal à un tContextLoad qui aura pour schéma :
- key String(255)
- value String(255)
Avec par exemple comme flux principale :
MaVariableDeContexte1|
val1
MaVariableDeContexte2|
val2
...
Du coup le tContextLoad va charger chaque valeur dans le nom de la variable de contexte associée, définie en premier lieu
Si vous voulez utiliser votre variable de contexte dans un composant particulier comme par exemple indiquer le nom d'un table d'un base de données, un nom de fichier, faire une requête par rapport à la valeur de cette variable...
Il suffit d'appeler cette variable de la façon suivante :
context.NomVariableDeContexte
ou encore
context.getProperty
(
"NomVariableDeContexte"
)
Suivant où vous faite appel à votre variable de contexte, il faudra utiliser l'une ou l'autre méthode
Dans Talend, il est possible de faire des contextes d'environnement pour les différents environnement de travail (DEV, RECETTE, PROD...). Pour récupérer la valeur du contexte courant, il suffit d'utiliser la variable "contextStr" et par exemple de l'utiliser de la manière suivante :
if
(
contextStr.equals
(
"DEV"
)) {
//faire quelque chose
}
else
{
//faire autre chose
}
ELT : Extract Load Tranform
Contrairement à un composant ETL qui extrait, transforme et charge en base de données, un ELT n'a pas de moteur d'exécution mais utilise les capacités de traitement des bases de données qu'il exploite
Si vous utilisez ces modes de transformations, les données seront donc traitées par la base de données et non plus par Talend et donc Java ce qui peut améliorer les performances lors de gros traitement.
- On Component OK : si aucune erreur est survenue dans sur le composant d'où le lien est fait, la chaîne se poursuit
- On subjob OK : si aucune erreur n'est survenue dans le groupe de composants (ou subjob) sur lequel le lien est fait. C'est à dire le premier composant d'un groupe de composants (un groupe de composants est matérialisé par un cadre gris qui regroupe les composants. D'ailleurs ce carré a un petit plus vert en haut à droite pour réduire le groupe) la chaïne se continue.
La sortie "On subjob OK/KO" ne peut être mise que sur le premier composant d'un subjob ou sur un composant unique (qui forme a lui seul un groupe)
Cliquez sur le bouton "Enable/Disable expression filter" (flèche blanche vers la droite avec un plus vert) dans la sortie en question. Ajouter ensuite la condition dans le champ qui s'affiche à cet effet.
Vous pouvez maintenant envoyer les données filtrées dans cette sortie et activer les rejets dans une autre sortie en cliquant sur le bouton "Enable/Disable output reject" (flèche orange) de la sortie des rejets.
Pour faire une condition dans un composant Talend, comme dans un tMap, il suffit d'utiliser des conditions ternaires comme ceci :
row1.monChamp.equals
(
"forum developpez"
)?"OK"
:"KO"
Cela signifie que si mon champ est égal à la chaine de caractère "forum developpez", le champ cible aura pour valeur "OK" sinon il aura pour valeur "KO".
row1.monChamp ==
2009
? 1
: 0
Cela signifie que si mon champ est égal à 2009, le champ cible aura pour valeur 1 sinon il aura pour valeur "KO".
Ceci est très utile dans un tMap pour donner une valeur à un champ en sortie suivant les champs en entrée.
Talend fournit la fonction Relational.ISNULL() très pratique pour savoir si un champ est nul ou pas.
Utilisation :
Relational.ISNULL
(
row1.monChamp)?"nul"
:"pas nul"
Cette méthode peut être couplée avec la fonction equals pour vérifier si le champ n'est pas vide :
(!
Relational.ISNULL
(
row1.monChamp) &&
!
row1.monChamp.equals
(
""
)) ?"pas nul et pas vide"
:"nul ou vide"
PUBLIC EXPERT recommandé.
Chose à faire avant tout : vérifier que le composant que vous voulez créer n'a pas déjà été développé par quelqu'un d'autre (ça vous évitera des heures de développement ) en vous rendant à l'adresse suivante. Si il existe déjà suivez la procédure d'ajout de nouveau composant à l'adresse suivante. Sinon suivez le point suivant.
Maintenant que vous êtes sûr que personne n'a fait le composant en question, il vous faut définir un dossier où seront sauvegardés les composants que vous développerez. Pour cela cliquez successivement dans le menu Window > Preferences > "Talend Component Designer". Indiquez maintenant un dossier de sauvegarde.
Maintenant vous pouvez accéder à la fenêtre qui vous permettra de développer vos composant en cliquant sur "Window > Perspective > Design Worspace". Dans l'onglet "Component Designer", cliquez droit sur le projet "COMPONENT_PROJECT > New > New Component". Ensuite laissez vous guider.
La partie "Metadata" de l'onglet "Repository" permet de faire ça simplement.
Si c'est un schéma de base de données, il faut créer une connexion à votre base dans "Db connection". Ensuite, faite un clique droit sur cette nouvelle connexion et sur "Retrieve schema". Vous aurez alors à choisir quel schéma des tables proposées, vous souhaitez récupérer.
Vous pouvez faire de même pour les fichiers de type "Delimited", "Positional"...
Si vous voulez utiliser un schéma à la fois pour un fichier, un schéma de composant, une BDD... utilisé le "Metadata" "Generic schemas".
Ensuite pour utiliser ces schémas, il vous suffit de choisir un schéma de type "Repository" dans votre composant.
Cliquez successivement sur "Window > preferences". Dans la fenêtre des préférences Talend, cliquez sur "Talend > Specific Setting > Default Type and Length".
Vous pourrez alors configurer le type et la longueur des champs par défaut pour les schémas de tous les jobs de votre projet.
Testé en version 3.1.0
On aurait tendance à utiliser :
"
\\
serveur
\f
older
\f
ileName.extension"
Mais en fait il faut échapper les back slash
"\\\\serveur\\folder\\fileName.extension"
Ou encore remplacer les back slash par des slash
"//serveur/folder/fileName.extension"
Exemple :
"//localhost/partage/monFichier.txt"
Il suffit d'utiliser la variable globale "projectName".
Par exemple dans le contenu d'un tMsgBox :
"Le nom du projet courant est : "
+
projectName
Il suffit d'utiliser la variable globale "jobName".
Par exemple dans le contenu d'un tMsgBox :
"Le nom du job courant est : "
+
jobName
Il faut supprimer les anciennes classes dans la corbeille de Talend AVANT de les générer à nouveau.
Le composant propose différents affichages avec des retours bien particulier à savoir :
1. "OK" : popup avec un message personnalisé et un bouton "OK"
Retour :
- 1 : qu'on faire la fenêtre ou qu'on appuie sur le bouton "OK", le retour est 1 car c'est juste une popup d'information
2. "OK et annuler" : popup avec un message personnalisé et deux boutons : "OK et "Cancel"
Retours :
- 0 : si appuie sur le bouton "OK"
- 1 : si appuie sur le bouton "Cancel"
- -1 : aucune réponse (fermeture de la fenêtre)
3. "Abandonner, Réessayer et Ignorer" : popup avec un message personnalisé et trois boutons : "Abort", "Retry" et "Cancel"
Retours :
- 0 : si appuie sur le bouton "Abort"
- 1 : si appuie sur le bouton "Retry"
- 2 : si appuie sur le bouton "Cancel"
- -1 : aucune réponse (fermeture de la fenêtre)
4. "Oui, Non et annuler" : popup avec un message personnalisé et 3 boutons : "Yes", "No" et "Cancel"
Retours :
- 0 : si appuie sur le bouton "Yes"
- 1 : si appuie sur le bouton "No"
- 2 : si appuie sur le bouton "Cancel"
- -1 : aucune réponse (fermeture de la fenêtre)
5. "Oui et Non" : popup avec un message personnalisé et 2 boutons : "Yes" et "No"
Retours :
- 0 : si appuie sur le bouton "Yes"
- 1 : si appuie sur le bouton "No"
- -1 : aucune réponse (fermeture de la fenêtre)
6. "Réessayer et annuler" : popup avec un message personnalisé et 2 boutons : "Retry" et "Cancel"
Retours :
- 0 : si appuie sur le bouton "Retry"
- 1 : si appuie sur le bouton "Cancel"
- -1 : aucune réponse (fermeture de la fenêtre)
7. "Question" : popup avec une question personnalisé et un textBox pour récupérer la réponse faite par l'utilisateur
Retours :
- null : si appuie sur le bouton "Annuler" ou fermeture de la fenêtre
- valeur entrée : si appuie sur le bouton "OK"
Enfin pour récupérer ses valeurs, il suffit d'utiliser la méthode suivante dans la suite du job :
((
String)globalMap.get
(
"tMsgBox_[number]_RESULT"
))
Exemple :
((
String)globalMap.get
(
"tMsgBox_1_RESULT"
))
Si ce n'est pas une question, vous pouvez toujours changer le type de la donnée retourné mais pas en "castant" l'objet en Integer car ça ne fonctionnera pas. Il faut utiliser la méthode Integer.parseInt(String) :
Lorsqu'on cherche à utiliser Talend avec le SGBD Ingres, il y a certains messages d'erreurs du genre :
com.ingres.gcf.util.SqlEx: Connection aborted due to communications protocol error.
Comme le dit le bug trackerAccès au BugTracker 4589 de Talend, il faut remplacer tous les fichiers iijdbc.jar trouvés dans les répertoires Talend (il y en a plusieurs) par une version plus récente (téléchargée gratuitement via http://esd.actian.com/Accèder à Actionx).
Les environnements de développement sont parfois différents de l'environnement de production. De ce fait, les accents peuvent être interprétés différemment (problème de charset). Il est donc nécessaire de palier à ce problème en remplaçant systématiquement les caractères accentués par la valeur équivalente en UNICODE. Ce remplacement doit être réalisé dans les requêtes SQL, composants Java, etc…absolument partout dans vos jobs Talend à moins que vous soyez sûr à 150% que votre environnement de test et le même que l'environnement d'exploitation.
Voici un tableau non exaustif récapitulatif des équivalences en Unicode :
Exemple d'utilisation :
Caractère | Unicode |
---|---|
à | \u00e0 |
â | \u00e2 |
ä | \u00e4 |
ç | \u00e7 |
è | \u00e8 |
é | \u00e9 |
ê | \u00ea |
ë | \u00eb |
î | \u00ee |
ï | \u00ef |
ô | \u00f4 |
ö | \u00f6 |
ù | \u00f9 |
û | \u00fb |
ü | \u00fc |
String maVar =
"Connexion impossible au sch
\u00e9
ma DWH"
;
Voici la liste exaustive des équivalences unicodes cliquez sur ce lien
Vous pouvez également utiliser l'API Apache commons comme suivant :
StringEscapeUtils.escapeJava
(
)
Pour arrondir un champ BigDecimal à l'entier supérieur, il suffit d'utiliser la méthode setScale()
Exemple :
row1.monChampBigDecimal.setScale
(
BigDecimal.ROUND_HALF_UP)
En fait il y a une option qui n'est pas cochée par défaut dans les paramètres du Designer Talend et qui permet de propager les changements de contexte dans un groupe de contexte comme par exemple son type ou une valeur mais également d'enlever ou d'ajouter une variable dans tous les jobs en une seule passe.
Pour activer l'option, il faut cliquer successivement sur "Fenêtre > Préférences". Développer ensuite l'arborescence "Talend > Performance". Il suffit maintenant de cocher l'option "Propager les changements d'ajout/suppression de variables dans un contexte du référentiel".