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.


SommaireUtilisation générale / Développement de job (25)
précédent sommaire suivant
 

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 ; 
    }
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 :

Code java : Sélectionner tout
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

Mis à jour le 11 juin 2008 Rgent

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

Mis à jour le 6 octobre 2008 mumuri

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

Mis à jour le 6 octobre 2008 mumuri

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

Mis à jour le 6 octobre 2008 mumuri

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

Mis à jour le 9 avril 2009 jsd03

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";
ou suivant les cas :

Code java : Sélectionner tout
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 :

Code java : Sélectionner tout
1
2
3
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

Mis à jour le 11 février 2010 jsd03

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
ou encore

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

Mis à jour le 16 avril 2009 jsd03

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 
}

Mis à jour le 15 janvier 2010 jsd03

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.

Mis à jour le 6 octobre 2008 jsd03 souska

- 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)

Mis à jour le 28 avril 2009 jsd03

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.

Mis à jour le 19 mai 2009 jsd03

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"
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".

Code java : Sélectionner tout
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.

Mis à jour le 28 avril 2009 jsd03

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"
Cette méthode peut être couplée avec la fonction equals pour vérifier si le champ n'est pas vide :

Code java : Sélectionner tout
(!Relational.ISNULL(row1.monChamp) && !row1.monChamp.equals("")) ?"pas nul et pas vide" :"nul ou vide"

Mis à jour le 28 avril 2009 jsd03

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.

Mis à jour le 6 mai 2009 jsd03

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.

Mis à jour le 7 mai 2009 jsd03

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

Mis à jour le 19 mai 2009 jsd03

On aurait tendance à utiliser :

Code java : Sélectionner tout
"\\serveur\folder\fileName.extension"
Mais en fait il faut échapper les back slash

Code : Sélectionner tout
"\\\\serveur\\folder\\fileName.extension"
Ou encore remplacer les back slash par des slash

Code java : Sélectionner tout
"//serveur/folder/fileName.extension"
Exemple:

Code java : Sélectionner tout
"//localhost/partage/monFichier.txt"

Mis à jour le 11 juin 2009 CyberChouan jsd03

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

Mis à jour le 19 juin 2009 jsd03

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

Mis à jour le 19 juin 2009 jsd03

Il faut supprimer les anciennes classes dans la corbeille de Talend AVANT de les générer à nouveau.

Mis à jour le 6 novembre 2009 Mselle

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"))
Exemple :

Code java : Sélectionner tout
((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) :

Mis à jour le 7 avril 2010 jsd03

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.
Comme le dit le bug tracker 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/ ).

Mis à jour le 21 juillet 2009 jpzuate

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";
Voici la liste exaustive des équivalences unicodes cliquez sur ce lien

Vous pouvez également utiliser l' API Apache commons comme suivant :

Code java : Sélectionner tout
StringEscapeUtils.escapeJava()

Mis à jour le 28 février 2011 jsd03

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)

Mis à jour le 8 juin 2012 atb

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".

Mis à jour le 9 juin 2012 jsd03

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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 © 2018 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.

 
Contacter le responsable de la rubrique Talend