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 28/06/2011, 15h54   #1
Expert Confirmé
 
Homme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 2 253
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 2 253
Points : 2 569
Points : 2 569
Par défaut Post Opération avec talend

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?
DevServlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 16h19   #2
Membre régulier
 
Etienne Menuet
Inscription : mai 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Etienne Menuet
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2010
Messages : 71
Points : 98
Points : 98
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.
emenuet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 16h28   #3
Expert Confirmé
 
Homme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 2 253
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 2 253
Points : 2 569
Points : 2 569
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 :
1
2
3
 
1 toto tata, non_traite
2 tutu titi, non_traite
On suppose que Talend a un 3eme enregistrement à inserer, par exemple
Code :
1 toto tata, non_traite
qui se trouve être déjà présent alors ce que nous voulons c'est d'avoir au final :
Code :
1
2
3
4
5
1 toto tata, obsolete
2 tutu titi, non_traite
1 toto tata, traite
Tu piges mieux maintenant? talend peut faire ca alors ?
DevServlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 16h51   #4
Membre régulier
 
Etienne Menuet
Inscription : mai 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Etienne Menuet
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2010
Messages : 71
Points : 98
Points : 98
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 !
emenuet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 17h11   #5
Expert Confirmé
 
Homme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 2 253
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 2 253
Points : 2 569
Points : 2 569
Merci d'avance déjà pour ta réponse, on va y aller tout doux :
Code :
1
2
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
c'est quoi lookup? La actuellement j'ai une fleche qui va de tMap==>tOracleOutPut, c'est elle qui m'alimente ma table Oracle, d'après toi je dévrais avoir plutot 2 sorties, une pour l'insertion et l'autre la mise à jour c'est ca? mais comment Talend va savoir que c'est déjà present dans la table t1?
DevServlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 17h48   #6
Membre régulier
 
Etienne Menuet
Inscription : mai 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Etienne Menuet
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2010
Messages : 71
Points : 98
Points : 98
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.
emenuet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h33   #7
Expert Confirmé
 
Homme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 2 253
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 2 253
Points : 2 569
Points : 2 569
Je reviens à la charge, j'ai un peu avancé au niveau graphique mais rien de bien probant . J'ai mis en joint mes schémas actuels, quelqu'un peut il me dire ce qu'il faut compléter pour que ça marche? je rappelle d'après le post ci dessus que la tâche d'insertion marche bien, mais pour un enregistrement déjà existant en base je veux pouvoir non seulement faire une insertion mais aussi mettre à jour le doublon d'enregistrement qui avait déjà été présent(confère post ci dessus). Merci d'avance
Images attachées
Type de fichier : png adressePersonneEtendu.PNG (91,6 Ko, 12 affichages)
DevServlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h39   #8
Membre habitué
 
Homme Nicolas Vandenbergue
Conseil - Consultant en systèmes d'information
Inscription : janvier 2011
Messages : 88
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vandenbergue
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : janvier 2011
Messages : 88
Points : 112
Points : 112
Bonjour,

Ton test (au niveau des flux sortants) ne doit pas porter sur row1.numeroPersonne, mais sur row4.ID_ADRESSE_PERSONNE
NicolasTT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 11h48   #9
Expert Confirmé
 
Homme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 2 253
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 2 253
Points : 2 569
Points : 2 569
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.
DevServlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 12h04   #10
Membre régulier
 
Etienne Menuet
Inscription : mai 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Etienne Menuet
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2010
Messages : 71
Points : 98
Points : 98
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.
emenuet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 10h23   #11
Expert Confirmé
 
Homme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 2 253
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 2 253
Points : 2 569
Points : 2 569
Citation:
Envoyé par emenuet Voir le message
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.
C'est fait pour la colonne row4.ID_ADRESSE_PERSONNE, merci.
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
DevServlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 17h18   #12
Membre habitué
 
Homme Nicolas Vandenbergue
Conseil - Consultant en systèmes d'information
Inscription : janvier 2011
Messages : 88
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vandenbergue
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Conseil

Informations forums :
Inscription : janvier 2011
Messages : 88
Points : 112
Points : 112
Bonjour,


Citation:
Envoyé par DevServlet Voir le message
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
Pour ton flux sortant d'insertion, ne fais pas de test sur le row4.ID_ADRESSE_PERSONNE puisqu'il faut que tu insères dans les deux cas (que l'enregistrement était présent ou pas). (Si tu as 5 lignes en entrée avec 3 déjà présentes et 2 nouvelles, tu auras 3 éléments dans le flux de mise à jour, et bien 5 dans le flux d'insertion).
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")




Citation:
Envoyé par DevServlet Voir le message
Dans la clause Requete de la table t1 en réference (celle en lookup) je suis censé mettre quoi?
Je ne comprends pas. Qu'entends-tu par Requete de la table t1 ?
NicolasTT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h46   #13
Invité de passage
 
Homme
Développeur décisionnel
Inscription : juillet 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur décisionnel

Informations forums :
Inscription : juillet 2011
Messages : 2
Points : 2
Points : 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
aminovic12 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 02h20.


 
 
 
 
Partenaires

Hébergement Web