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 10/03/2008, 11h31   #1
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
Par défaut [Talend] Transformation de données

Bonjours à tous,

Je découvre talend et donc je suis loin de tout maitrisé, j'aurais besoin d'une explication si cela est possible.

Alors voilà j'ai dans une table d'une bdd source une valeur de champs numérique, dans le champs correspondant de mon data warehouse le champs est en chaine de caractères. En fonction de la valeur numérique je dois attribuer une chaine précise.

exemple :
lorsqu'un tuple à la valeure 0 dans ma bdd source je dois lui mettre Mr dans le data warehouse, Mme si la valeure est 1 et Mlle pour 2.

Dans le tmap j'ai défini une variable où j'ai écris un algo "switch" mais ça ne marche pas puisque l'appelle de cet algo est fait en tant que simple variable et non comme une fonction.

Voilà, comment vous vous feriez? Il y a t'il possibilité d'utiliser des fonctions/procédures avec talend ou alors dans le tmap il y a un outil pour le faire?

Merci d'avance
Kihmé Xs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 12h15   #2
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 817
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 817
Points : 1 091
Points : 1 091
Salut,

Dans ton tmap tu dois pouvoir utiliser une syntaxe du style :

(myTable.myColumn == 0) ? "Mr" : (myTable.myColumn==1) ? "Mme" : "Mlle"

sinon tu peux mettre ton switch dans un tJavaRow

J'espère que ça t'aidera

Cordialement
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 14h07   #3
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
ok je vais voir ça, dans le manuel que j'ai (VF) il n'y a rien sur le tjavarow, tu peux me dire ce que tu sais dessus?
Kihmé Xs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 14h11   #4
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 817
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 817
Points : 1 091
Points : 1 091
tu y mets direcement ton code java dedans.

Tu récupères tes données avec input_row.colonne
et tu initialises tes données de sorties par output_row.colonne

nickel pour des transformations java un peu sioux.
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 14h12   #5
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
ok, intéressant ça
Kihmé Xs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 14h57   #6
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
je n'ai pas encore lancer le run mais je n'ai pas de message d'erreur. Donc y'a une possibilité que ça marche, je ne le lance pas de suite car dans la même table source il y a un champs sur lequel je dois travailler de la même façon. Il s'agit d'un champs numérique que je dois comparer avec des données d'un fichier et le retravailler en fonction de la comparaison? J'ai voulu faire un row qui va de mon fichier vers le tJava_Row sur lequel j'ai travailler l'histoire des mr madame mais ce n'est pas possible je ne peux pas faire d'autre row.
Kihmé Xs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 15h45   #7
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 817
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 817
Points : 1 091
Points : 1 091
un tJavaRox n'a qu'un seul flux d'entrée et qu'un schema de flux de sortie mais tu peux avoir plusieurs flux de sortie basés sur ce schéma.

Si tu veux croiser les données de plusieurs flux, utilise un tMap.
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 17h35   #8
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
je reviens sur l'histoire des Mr, Mme etc...

avec le tjavarow j'obtiens une erreure. Voilà ce que j'ai fais dans mon dans la zone de code du tjavarow :

Code :
1
2
3
4
5
6
7
8
9
10
11
switch(input.row.DEAR)
{
case 0 :
output_row.DEAR="Mr";
break;
case 1 :
output_row.DEAR="Mme";
break;
case2 : output_row.DEAR="Mlle";
break;
}
Kihmé Xs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 17h37   #9
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 817
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 817
Points : 1 091
Points : 1 091
input_row.DEAR à première vue.

Mais si c'est autre chose, je te conseil de mettre l'erreur java ca aide bien à déterminer la cause.
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 17h46   #10
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
me suis trompé en recopiant, j'ai bien mis input_row.DEAR.

voilà le message d'erreur :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Starting job data_for_dtwh_2 at 17:27 10/03/2008.
[trace] connecting TO socket ON port 4841
[trace] connected
Exception IN thread "main" java.lang.Error: Unresolved compilation problems: 
	Syntax error ON tokens, Label expected instead
	Syntax error ON token "case", assert expected
	Syntax error ON token "case", assert expected
	Syntax error, INSERT "Finally" TO complete BlockStatements
	Syntax error ON tokens, DELETE these tokens
 
	at testproject.data_for_dtwh_2.data_for_dtwh_2.tMysqlInput_1Process(data_for_dtwh_2.java:640)
	at testproject.data_for_dtwh_2.data_for_dtwh_2.runJobInTOS(data_for_dtwh_2.java:1043)
	at testproject.data_for_dtwh_2.data_for_dtwh_2.main(data_for_dtwh_2.java:957)
Kihmé Xs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2008, 09h43   #11
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 817
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 817
Points : 1 091
Points : 1 091
Tu peux faire un screenshot de tMysqlInput stp ?
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2008, 09h49   #12
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
j'ai mis le screen shot en pièce jointe
je viens de tester avec des si imbriqués dans le javarow

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
IF (input_row.DEAR==0)
{
	output_row.DEAR="Mr";
}
else
{
	IF (input_row.DEAR==1)
	{
		output_row.DEAR="Mme";
	}
	else
	{
		output_row.DEAR="Mlle";
	}
}
le message d'erreur pour les si imbriqués, il est bizare car je n'ai pas de row4 dans ce job là :

Code :
1
2
3
4
5
6
7
8
9
10
 
Starting job data_for_dtwh_2 at 09:41 11/03/2008.
[trace] connecting TO socket ON port 4835
[trace] connected
Exception IN thread "main" java.lang.Error: Unresolved compilation problem: 
	row4 cannot be resolved
 
	at testproject.data_for_dtwh_2.data_for_dtwh_2.tMysqlInput_1Process(data_for_dtwh_2.java:715)
	at testproject.data_for_dtwh_2.data_for_dtwh_2.runJobInTOS(data_for_dtwh_2.java:1058)
	at testproject.data_for_dtwh_2.data_for_dtwh_2.main(data_for_dtwh_2.java:972)
Kihmé Xs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2008, 10h12   #13
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 817
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 817
Points : 1 091
Points : 1 091
Là comme ça je ne vois pas trop.

Si tu connais pas mal java, je te conseil de regarder le code généré par talend, tu y verras toutes les erreurs de compilation.

Idem lors de l'execution d'un job si tu as une erreur, décoche les cases de stat et trace dans la fenetre d'execution, reéxécute et regarde la ligne de code qui a commise l'erreur.

Apres il existe des techniques de debuggage avancées notamment avec la vue debug, pour faire de debuggage temps réel et sur le papier ça dépote mais je ne m'en sers jamais.

N'hésites pas à poster plus d'infos qui te semblent pertinente à la résolution du pb.

Bon courage

Cordialement
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2008, 10h26   #14
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
oui c'est ce que je suis en train de faire, je regarde le code, il semblerait qu'il aime pas mon switch qui est pourtant correctement écris, je reteste avec les if, je vais bien finir par trouver
Kihmé Xs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2008, 10h33   #15
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
dans le javarow je reconfigure un champs le DEAR, mais ne dois je pas aussi mettre que ouput_row.champs1 = input_row.champs1 etc...???
Kihmé Xs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2008, 10h37   #16
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 817
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 817
Points : 1 091
Points : 1 091
en effet, il ne transfert pas automatiquement pas les colonnes d'entrée vers les colonnes de sortie du même nom.
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2008, 10h39   #17
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
c'était bien ça, bon voilà une transformation de finie, j'attaque les autres maintenant
Kihmé Xs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2008, 10h54   #18
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
pour ma nouvelle transformation j'ai besoin de mettre une chaine de caractères qui est en minuscule en majuscule, toujours dans mon javarow, j'ai utilisé la methode toUpperCase() comme ceci
Code :
output_row.NAME=toUpperCase(input_row.NAME)
dans le code java il est écris " the methode toUpperCase(String) is undefined for the type "le nom de mon job"

ça veut dire que talend ne prend pas cette méthode en compte ou que les méthodes ne sont pas toutes définies et que je les définir quelque part?
Kihmé Xs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2008, 11h03   #19
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 817
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 817
Points : 1 091
Points : 1 091
Ce n'est pas du java. Le code correct doit être :

output_row.NAME=input_row.NAME.toUpperCase();

http://java.sun.com/javase/6/docs/ap...ng/String.html

edit : Ce n'est pas du java. => ton code n'est pas interprétable en java
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2008, 11h30   #20
Membre éclairé
 
Avatar de Kihmé Xs
 
Inscription : janvier 2007
Messages : 477
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : janvier 2007
Messages : 477
Points : 324
Points : 324
en effet c'était ça mais pourquoi dis tu que ce n'est pas du java???

En tout cas maintenant je commence à comprendre talend et je m'amuse comme un fou (on a le droit de dire ça???)
Kihmé Xs 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 08h47.


 
 
 
 
Partenaires

Hébergement Web