|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Expert Confirmé
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 2 253 ![]() |
Bonjour à tous,
Je débute sous Talend, et j'utilise une tmap pour partir des csv et alimenter une table oracle, jusque là tout marche bien. Mais alors j'ai une question et j'aimerai votre lumière. En fait un enregistrement que je veux insérer peut déjà être présent dans la table cible oracle, dans ce cas ce qui est demandé c'est qu'avant (ou apres ) l'insertion par talend, que je retrouve cet enregistrement et que je mette à jour un attribut d'etat de traitement. Alors ma question c'est de savoir si Talend pourrait effectuer cette tache? |
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Etienne MenuetInscription : mai 2010 Messages : 71 ![]() |
Bonjour,
Je vais garder ma lanterne et éclairer la tienne : Tu peux activer un lien de rejet sur le tOracleOutput qui te permettras de récupérer les erreurs d'insertion. Dans ce flux tu poses un tMap pour filtrer les colonnes dont tu as besoin pour calculer ton état de traitement. |
|
|
00
|
|
|
#3 | ||||
|
Expert Confirmé
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 2 253 ![]() |
Non non en fait je n'ai aucun rejet à faire, mais juste à mettre à jour un champ d'un enregistrement si jamais un doublon d'enregistrement est inséré, exemple j'ai une table T1 (id, nom, prenom,etat_traitement) avec les enregistrements suivants :
Code :
Code :
|
||||
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Etienne MenuetInscription : mai 2010 Messages : 71 ![]() |
Je comprend beaucoup mieux avec un jeu de test
et je réponds qu'avec Talend c'est possible ! tu prend le flux de mise a jour. comme flux principal de ton tMap et en lookup ta table t1 Tu spécifies une jointure externe tu auras 2 sorties a ton tMap, 1 flux d'insert et un flux d'update vers ta table t1 Tu détectes l’existence de ton enregistrement dans T1 si l'une des clefs du lookup n'est pas null Avec les filtres en sorties et la cellule Expression du "etat_traitement" tu peux gérer tes cas : si l'enregistrement n'existe pas ( clef == null ) alors tu fais seulement un insert, si ton enregistrement existe deja ( clef != null ) tu fais un update avec le status obsolète et un insert avec le status traite J'espere que j'ai bon cette fois ci ! |
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 2 253 ![]() |
Merci d'avance déjà pour ta réponse, on va y aller tout doux :
Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() Etienne MenuetInscription : mai 2010 Messages : 71 ![]() |
Un lookup est un second flux en entrée du tMap ( ta table t1 en référence )
Je te conseille de télécharger le Referential Guide RG_42 sur le site de Talend, et de jeter un coup d'oeil sur le composant tMap et ses scénarios. Ils sont clair et permettent de comprendre rapidement les fonctions du tMap. |
|
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 2 253 ![]() |
Je reviens à la charge, j'ai un peu avancé au niveau graphique mais rien de bien probant
|
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Nicolas VandenbergueConseil - Consultant en systèmes d'information Inscription : janvier 2011 Messages : 88 ![]() |
Bonjour,
Ton test (au niveau des flux sortants) ne doit pas porter sur row1.numeroPersonne, mais sur row4.ID_ADRESSE_PERSONNE |
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 2 253 ![]() |
Non il ne faut pas que ca porte sur ID_PERSONNE_ADRESSE, car c'est un id pas présent dans le fichier csv d'entrée, c'est une clé récupérée sequentiellement en base lors de l'insertion.
|
|
|
00
|
|
|
#10 |
|
Membre régulier
![]() Etienne MenuetInscription : mai 2010 Messages : 71 ![]() |
Bonjour,
Il faut effectivement prendre la colonne row4.ID_ADRESSE_PERSONNE de ton lookup pour faire le test, car cette colonne sera null si ton enreg n'existe pas et renseigné s'il existe. De plus dans le flux de mise a jour, il faut mapper row4.ID_ADRESSE_PERSONNE qui est la clef de l'update. De plus tu peux enlever tes liens onCompoentOK des 2 OracleOutput et le remplacer par un lien onSubjobOK a partir du tFileInput. Et je ne vois pas ta colonne état, tu vas devoir l'alimenter avec une regle de gestion suivant tes cas. Tu peux utiliser l’opérateur ternaire de java pour réaliser des conditions. |
|
|
00
|
|
|
#11 | |
|
Expert Confirmé
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 2 253 ![]() |
Citation:
Je n'avais pas encore intégré le traitement de la colonne "etat" merci, c'est pas le plus urgent, faut déjà que le mécanisme soit fonctionnel. Dans la clause Requete de la table t1 en réference (celle en lookup) je suis censé mettre quoi? La pour l'instant, Talend me detecte bien qu'un enregistrement entrant est une mise à jour ou une insertion à faire, lors d'une insertion ca le fait bien (donc la 1ere sortie marche bien) mais lorsque un enregistrement déjà inséré arrivé, j'ai du mal à voir comment il va non seulement aller mettre à jour celle existant déjà, mais aussi insérer ce doublon qui est arrivé, en gros la 2e sortie de Talend ne me convaint pas, et c'est là mon pb.Merci d'avance |
|
|
|
00
|
|
|
#12 | |
|
Membre habitué
![]() Nicolas VandenbergueConseil - Consultant en systèmes d'information Inscription : janvier 2011 Messages : 88 ![]() |
Bonjour,
Citation:
Ensuite, si tu veux modifier le champs 'statut' en fonction du fait que l'enregistrement était présent ou pas, tu le feras dans le champs 'statut' du flux sortant de mise à jour (du genre row4.ID_ADRESSE_PERSONNE == 0 ? "Nouveau" : "Obsolète") Je ne comprends pas. Qu'entends-tu par Requete de la table t1 ? |
|
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Développeur décisionnel Inscription : juillet 2011 Messages : 2 ![]() |
Bonjour,
je suis un débutant sur talend et j'ai une tâche à faire avec. mon problème c'est que j'ai 2 fichier délimiter en entrée test1.txt,tes2.txt et en sortie un seul fichier sortie.txt qui va contenir juste les champs qui ont eu une mise à jour ou une suppression ou bien un ajout. les 2 fichier d'entrée sont des fichier identique : test1.txt contient : code;labelle 01;toto 02;tutu 03;dupon test2.txt contient: code;labelle 01;Amine 02;tutu 04;momo le fichier de résultat que je veux avoir sortie.txt contient: code;labelle 01;toto-->donnée modifier 03;dupon-->donnée ajouté 04;momo-->donnée supprimer est ce que je peux le faire et comment merci de votre réponse |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com