FAQ TalendConsultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 52, dernière mise à jour : 17 décembre 2014 Ajouter une question
Cette F.A.Q. a été réalisée à partir des connaissances de membres de Developpez.com en vue de répondre à des questions fréquemment posées par les utilisateurs.Elle traite exclusivement des questions relatives à Talend Open Studio et Talend Enterprise for Data Integration.Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.Remerciements tout particulier aux contributeurs : atb, cyberchouan, dingo200, jsd03, marcl1, mumuri, mselle, jojodu31,jpzuate, rgent et souska et aux relecteurs : fafabzh6, Fleur-Anne.Blain et zoom61.L'équipe Talend de Developpez.com.
- 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:
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /** * 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 ; } |
Ensuite après avoir enregistré cette nouvelle routine, pour l'utiliser, il suffit d'y faire appel de cette façon :
Code java : | Sélectionner tout |
nomDeLaRoutine.helloExample("tout le monde")
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 :
Code java : | Sélectionner tout |
context.MaVariableDeContexte = "valeur";
Code java : | Sélectionner tout |
context.setProperty("MaVariableDeContexte ","valeur");
- key String(255)
- value String(255)
Avec par exemple comme flux principale :
Code java : | Sélectionner tout |
1 2 3 | MaVariableDeContexte1|val1 MaVariableDeContexte2|val2 ... |
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 :
Code java : | Sélectionner tout |
context.NomVariableDeContexte
Code java : | Sélectionner tout |
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 :
Code java : | Sélectionner tout |
1 2 3 4 5 | 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 :
Code java : | Sélectionner tout |
row1.monChamp.equals("forum developpez")?"OK":"KO"
Code java : | Sélectionner tout |
row1.monChamp == 2009 ? 1 : 0
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 :
Code java : | Sélectionner tout |
Relational.ISNULL(row1.monChamp)?"nul":"pas nul"
Code java : | Sélectionner tout |
(!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 :
Code java : | Sélectionner tout |
"\\serveur\folder\fileName.extension"
Code : | Sélectionner tout |
"\\\\serveur\\folder\\fileName.extension"
Code java : | Sélectionner tout |
"//serveur/folder/fileName.extension"
Code java : | Sélectionner tout |
"//localhost/partage/monFichier.txt"
Il suffit d'utiliser la variable globale "projectName".
Par exemple dans le contenu d'un tMsgBox :
Code java : | Sélectionner tout |
"Le nom du projet courant est : " + projectName
Il suffit d'utiliser la variable globale "jobName".
Par exemple dans le contenu d'un tMsgBox :
Code java : | Sélectionner tout |
"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 :
Code java : | Sélectionner tout |
((String)globalMap.get("tMsgBox_[number]_RESULT"))
Code java : | Sélectionner tout |
((String)globalMap.get("tMsgBox_1_RESULT"))
Lorsqu'on cherche à utiliser Talend avec le SGBD Ingres, il y a certains messages d'erreurs du genre :
Code java : | Sélectionner tout |
com.ingres.gcf.util.SqlEx: Connection aborted due to communications protocol error.
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 |
Code java : | Sélectionner tout |
String maVar = "Connexion impossible au sch\u00e9ma DWH";
Vous pouvez également utiliser l' API Apache commons comme suivant :
Code java : | Sélectionner tout |
StringEscapeUtils.escapeJava()
Pour arrondir un champ BigDecimal à l'entier supérieur, il suffit d'utiliser la méthode setScale()
Exemple :
Code java : | Sélectionner tout |
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".
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.