Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL > Talend
Talend Forum d'entraide sur Talend (Talend Open Studio, ...). Avant de poster --> FAQ Talend, Tutoriels Talend
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/09/2011, 11h16   #1
Invité de passage
 
Inscription : février 2009
Messages : 5
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2009
Messages : 5
Points : 0
Points : 0
Par défaut tMysqlInput utilisation si aucun résultat

Bonjour à tous !

Après avoir cherché, je n'ai malheureusement pas trouvé de réponses à ma question :


J'utilise un tMysqlInput qui fait un select en base, et qui est connecté via un lien Main à un tJavaRow (je joins l'image). Dans ce tJavaRow, je fais un println très simple, qui ne tiens pas en compte du row2. Si la requête renvoie des résultats, le tJavaRow est exécuté, mais si elle ne renvoie rien, le tJavaRow n'est pas executé.

Comment faire pour ajouter un tJavaRow qui soit executé lorsque la requête ne renvoie aucune réponse ? J'ai bien envisagé d'ajouter un lien if sur le tMysqlInput, mais je ne vois pas sur quelle condition se baser.

Merci d'avance et désolé pour cette question qui paraîtra sans doute absurde.
Images attachées
Type de fichier : png Capture-1.png (7,4 Ko, 16 affichages)
minzou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2011, 12h07   #2
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Salut,

Oui l'idée est d'utiliser un lien If, et pour cela tu pourrais tester sur la condition suivantes :

Citation:
((int)globalMap.get(tMySqlInput_1_NB_LINE)) != 0
En fait c'est une variable globale remplit automatiquement par Talend et qui contient le nombre de ligne renvoyé par ton composant.

N.B : Tu devras remplcer le "tMySqlInput_1" par le nom de ton composant.
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/09/2011, 12h37   #3
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Bon je viens de faire un test sur mon poste :

La bonne syntaxe est celle là ( j'ai utilisé un composant tOracleInput qui s'appelle tOracleInput_1) :

Citation:
if(((Integer)globalMap.get("tOracleInput_1_NB_LINE")) != 0)
Mais il y'un un hic, en fait cette variable ne sera accessible qu'après que le composant tOracleInput_1 aura fini son travail, donc tu devras le lier à un tJava avec le lien "OnComponentOk" ou bien "OnSubJobOk" à toi de voir.

Bonne chance.
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/09/2011, 15h57   #4
Invité de passage
 
Inscription : février 2009
Messages : 5
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2009
Messages : 5
Points : 0
Points : 0
Merci pour ta réponse haskouse !

Malheureusement cela ne fonctionne pas dans mon cas. Je joins une capture du job plus globale, afin de faciliter la compréhension.

Ce que je veux faire :

Charger un fichier CSV contenant 30 lignes, pour chaque ligne, récupérer les éléments de la ligne, faire un algorithme de type "pour chaque élément de la ligne, je regarde si il est dans mon cache (une collection de type Map simple). Si il n'y est pas, je regarde en base, si il est présent, alors je le met dans la Map et continue le traitement. Sinon, je l'insére, récupère l'id, et met l'information dans la Map. En gros une stratégie de cache classique.

Mais le traitement ne va jamais jusqu'au tJavaRow_13 (dans lequel j'ai un sysout classique), j'ai essayé avec un lien de type "on subjob ok" et "on component ok".

D'autre part, en sortie de mon tMap, et pour chaque branche Main, j'ai bien 30 row qui passent, mais en sortie de mon tJavaRow, j'ai l'impression qu'il n'y a qu'une ligne qui arrive dans le tMysqlInput. Y'a t'il quelque chose à faire dans le tMysqlRow ?

merci d'avance encore une fois pour mes questions de novice.
Images attachées
Type de fichier : png Capture-2.png (56,1 Ko, 12 affichages)
minzou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 16h15   #5
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Salut,

Après la sortie de ton main, sin on prend la ligne d'en haut de ta capture d'écran (userInfo) :

Est ce que le tJavaRow_1 s'execute correctement ?

Sinon, est ce que tu peux remplacer tes tJavaRow par des composants tJava ??
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2011, 16h44   #6
Invité de passage
 
Inscription : février 2009
Messages : 5
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2009
Messages : 5
Points : 0
Points : 0
Bonjour haskouse,

Oui le composant fonctionne bien (si je met un System.out.println("toto");, j'ai bien 30 "toto" qui s'affichent.
minzou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 08h25   #7
Membre habitué
 
Homme Rémy DUBOIS
Ingénieur développement logiciels
Inscription : août 2008
Messages : 88
Détails du profil
Informations personnelles :
Nom : Homme Rémy DUBOIS
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2008
Messages : 88
Points : 126
Points : 126
La variable est de type after. Ce qui signifie qu'elle peut être utilisée dans un sous job different. Pourquoi ? Car elle est settee dans le end du composant, une fois que toutes les lignes ont ete lues. Donc c est une mauvaise solution.
rdubois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 10h10   #8
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Citation:
j'ai bien 30 row qui passent, mais en sortie de mon tJavaRow, j'ai l'impression qu'il n'y a qu'une ligne qui arrive dans le tMysqlInput. Y'a t'il quelque chose à faire dans le tMysqlRow ?
S'il n y'a qu'une seule ligne qui arrive dans ton tMySqlInput je dirais que ça vient plutot de ta condition "IF", est ce que tu pourrais la remplacer par un composant tFilterRow ?? et voir ce que ça donne.
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 16h25   #9
Invité de passage
 
Inscription : février 2009
Messages : 5
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2009
Messages : 5
Points : 0
Points : 0
Merci encore haskouse

Oui si je mets un tFilterRow ça passe, mais le tFilterRow ne permet de faire que des choses simples sur les lignes ? Avec les 4 fonctions et les 4 opérateurs de base ?
Si je veux une condition plus poussée, y a t'il un moyen ? (par exemple aller regarder dans la globalMap si une info est présente et si oui laisser passer la ligne)

Merci encore pour tes réponses !
minzou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 18h02   #10
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Y' pas de quoi me remercier !!
Si tu veux une fonction plus poussée pour tes tests ty pourrais la coder toi même en ajoutant une routine avec le nombre d'arguments que tu veux et qui renvoie un bouleen.

Pour la création des routines je te renvoi vers ce tuto :

http://haskouse.developpez.com/tutor...ation-routine/

Bonne chance.
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui)

Mes articles publiés
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 17h51   #11
Invité de passage
 
Inscription : février 2009
Messages : 5
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2009
Messages : 5
Points : 0
Points : 0
Effectivement, merci encore.

Je continue dans ma lancée : je veux faire un tMysqlRow dans lequel je fais une requête (j'utilise un tMysqlRow car je suis juste derrière un tJavaRow), et je veux, dans le cas ou la requête ne renvoie rien, inserer quelque chose en base. Quelle est la bonne façon de faire ?

Merci encore
minzou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h45.


 
 
 
 
Partenaires

Hébergement Web