|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : juin 2006 Messages : 109 ![]() |
Bonjour,
Dans talend, je lis un fichier excel. Pour chaque ligne du fichier excel, j'insère la ligne dans une table postgres "out" et pour cela je lis la valeur de l'index de la table "t_index" pour cette ligne dans une table spéciale "t_index". Dans cette table j'ai le dernier id utilisé, je veux donc le lire, insérer ma ligne dans la table "out" avec cet id puis incrémenter mon id dans la table "t_index". Comment faire pour réaliser ce traitement ligne par ligne ? J'ai mis le fichier excel en input et liaison main et un "t_postgressqlInput" reprenant la table t_index en input liaison lookup. ces deux composants vont vers un t_map puis en sortie je mets à jour mon id dans "t_index" et j'insère ma ligne dans ma table "out". Mais si je fais ça, il me lit la valeur de l' id, et me met cette valeur pour toutes les lignes de mon fichier excel dans la table "out", au lieu de relire la valeur de l'id à chaque ligne.... Merci Charlotte |
|
|
00
|
|
|
#2 | ||||
|
Membre éclairé
![]() |
Bonjour,
voici une façon de procéder. Elle n'est pas très performante mais elle fonctionne : - Creer un job principal et un sous job. - dans les 2 jobs créer des paramètres : un pour chaque champ du schéma du fichier Excel par ex : dans le job principal : - relier le tFileExcelInput à un tJavaRow. - dans le tJavaRow affecter les valeurs aux paramètres du job par ex: Code :
ex: Code :
-utiliser un tPostgresqlInput pour obtenir la valeur de l'index -relier à un tPostgresqlRow qui a pour requête : Code :
UPDATE dbo.t_index SET mon_index = mon_index +1 - insérer dans la base grâce à un tPostgresqlOutput |
||||
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : juin 2006 Messages : 109 ![]() |
Bonjour,
Alors j'essaye ta solution ce matin, pour le job principal je comprend bien par contre pour le sous job je suis un peu perdue. c'est la fin où je suis perdue: relier à un tMap dans lequel mapping pour l'index et utilisation des paramètres pour les champs : Code : context.getProperty("param1") - insérer dans la base grâce à un tPostgresqlOutput Je joins une image de ce que j'ai compris. que dois je faire dans le t_map? où puis utiliser le "param1" ? en sortie du t_PostgresqlRow je n'ai plus que des infos sur la valeur de l'index, j'ai perdu les infos de mon fichier excel d'entrée. il doit me manquer une liaison quelque part.... merci |
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() |
Bonjour,
les données du fichier Excel sont passées ligne par ligne en paramètres au tRunJob dans le job principal (pour cela il ne faut pas oublier de passer les paramètres dans l'onglet Properties pour le tRunJob, propriété Context Param). Dans le sous job voici à quoi doit ressembler le tMap : tMap.png Comme tu peux voir tu récupères pour l'index tous les paramètres qui contiennent les données de ton fichier Excel. J'ai oublié de préciser qu'il ne faut utiliser que des liens Main. |
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : juin 2006 Messages : 109 ![]() |
merci c'est plus clair pour moi,
par contre je n'arrive pas à mettre les paramètres dans mon trunjob, lorsque je veux créer un nouveau paramètre je ne peux mettre qu'une valeur et pas de nom à mon paramètre. Il y a une liste vide qui s'ouvre pour le nom. dois je déclarer la liste de mes variables quelque part ? je te joins une image de mon t_javarow et de mon trunjob |
|
|
00
|
|
|
#6 | |
|
Membre éclairé
![]() |
Citation:
|
|
|
|
00
|
|
|
#7 | ||
|
Nouveau Membre du Club
![]() Inscription : juin 2006 Messages : 109 ![]() |
Alors dans mon job principal je déclare les variable dans un t_javarow :
avec comme code: Code :
dans mon sous job je dois aussi ajouter un t_jararow? et dedans je dois mettre quoi? ou alors est ce qu'il faut que je crée un context dans l'onglet context avec toutes mes variables déclarer ? |
||
|
|
00
|
|
|
#8 | |
|
Membre éclairé
![]() |
Citation:
Il n' y a pas besoin de tJavaRow dans le sous job, celui dans le job principal est utilisé afin d'affecter les valeurs aux variables. |
|
|
|
00
|
|
|
#9 |
|
Nouveau Membre du Club
![]() Inscription : juin 2006 Messages : 109 ![]() |
alors j'avance pas mal!
j'ai créé un context avec mes 38 paramètres, j'ai affecté ce context à mon job et mon sous job. par contre j'ai une erreur : Exception in component tJavaRow_1 java.lang.NullPointerException at java.util.Hashtable.put(Unknown Source) at java.util.Properties.setProperty(Unknown Source) at infocentre_eurica.tier_distributeur_onetoone.tier_distributeur_onetoone.tFileInputExcel_1Process(tier_distributeur_onetoone.java:571) at infocentre_eurica.tier_distributeur_onetoone.tier_distributeur_onetoone.main(tier_distributeur_onetoone.java:829) je joins deux image de mon context et des variables de mon t_runjob, peux être verras tu où est l'erreur... |
|
|
00
|
|
|
#10 | ||
|
Membre éclairé
![]() |
L'erreur est que parfois, une valeur nulle est affectée à un paramètre dans le tJavaRow. Pour éviter que cela ait lieu, il faut éviter d'insérer ces valeurs.
Je vois 2 solutions : - soit remplacer par des chaînes vides les valeurs qui posent problème : Code :
context.setProperty('param1',row1.champ1==null?"":row1.champ1);
Code :
|
||
|
|
00
|
|
|
#11 | ||||
|
Nouveau Membre du Club
![]() Inscription : juin 2006 Messages : 109 ![]() |
ah j'aime bien quand ça change de message d'erreur, ça veut dire que j'avance...
alors j'ai mis dans le t_javarow la première de tes 2 solutions: Code :
Exception in thread "main" java.lang.Error: Unresolved compilation problems: Syntax error, insert ")" to complete Expression Syntax error, insert ")" to complete Expression Syntax error, insert ")" to complete Expression at infocentre_eurica.tier_distributeur_onetoone.tier_distributeur_onetoone.tFileInputExcel_1Process(tier_distributeur_onetoone.java:583) at infocentre_eurica.tier_distributeur_onetoone.tier_distributeur_onetoone.main(tier_distributeur_onetoone.java:823) j'ai essayé de mettre: Code :
|
||||
|
|
00
|
|
|
#12 |
|
Membre éclairé
![]() |
Il faut bien des double quote, j'avais fait une erreur d'inattention...
Par contre je viens de créer 2 jobs afin de tester et tout fonctionne. Donc il manque probablement une parenthèse quelque part dans le tJavaRow. As-tu regardé à la ligne 583 du code pour savoir quelle instruction empêche la compilation ? |
|
|
00
|
|
|
#13 |
|
Nouveau Membre du Club
![]() Inscription : juin 2006 Messages : 109 ![]() |
je desinstalle et réinstalle mon talend depuis ce matin pour mon problème d'export de job, donc dès que je l'ai réinstallé je regarde la ligne 583.
dis moi juste pour info, lorsque tu exportes tes jobs, dans le fichier .jar de ton job, est qu'il n'y a qu'un répertoire avec un ficheir MANIFEST.MF ? |
|
|
00
|
|
|
#14 | ||
|
Membre éclairé
![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#15 |
|
Nouveau Membre du Club
![]() Inscription : juin 2006 Messages : 109 ![]() |
nickel en voulant effacer des espaces, j'avais effacé des parenthèses...
donc voilà, mes exports de job fonctionne, ce job fonctionne. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com