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 23/05/2011, 17h31   #1
Futur Membre du Club
 
Inscription : juin 2006
Messages : 217
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 217
Points : 16
Points : 16
Par défaut Condition d'insertion tmap

Bonjour

Voila j'ai un tmap comme ceci



Je voudrais mettre un condition d'insertion.
Je veux que la ligne s’insère uniquement si row1.matricule n'existe pas déjà dans la colonne matricule_c.

merci d'avance
france38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 09h52   #2
Membre émérite
 
Homme Nicolas Saumande
Architecte Décisionnel
Inscription : février 2008
Messages : 693
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Saumande
Âge : 36
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte Décisionnel

Informations forums :
Inscription : février 2008
Messages : 693
Points : 879
Points : 879
Bonjour,

Une discussion traite actuellement du même sujet : http://www.developpez.net/forums/d10...s/#post6001986

Pour compléter les différentes solutions possibles, tu peux éventuellement vouloir que dans le cas où le matricule existe déjà dans la table, la ligne soit mise à jour (update).
Dans ce cas, la mise en oeuvre est assez simple : il suffit de définir le champs matricule_c en clé dans ton schéma de sortie, et de paramétrer le composant de mise à jour de base de données que tu utilises en 'Insert or Update'.

Ainsi, si la valeur existe déjà les données de la ligne sont mises à jour, si elle n'existe pas alors la ligne est insérée.

Nicolas
DevNico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 10h23   #3
Futur Membre du Club
 
Inscription : juin 2006
Messages : 217
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 217
Points : 16
Points : 16
Citation:
Pour compléter les différentes solutions possibles, tu peux éventuellement vouloir que dans le cas où le matricule existe déjà dans la table, la ligne soit mise à jour (update).
C'est exactement cela que je veut faire.

Citation:
Dans ce cas, la mise en oeuvre est assez simple : il suffit de définir le champs matricule_c en clé dans ton schéma de sortie, et de paramétrer le composant de mise à jour de base de données que tu utilises en 'Insert or Update'.

Qu'est ce que tu appelle composant de mise à jour ?
Dans ma sorti j'ai un composant sugarcrmOutput et il faut sélectionner soit insert soit update.
france38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 11h58   #4
Membre émérite
 
Homme Nicolas Saumande
Architecte Décisionnel
Inscription : février 2008
Messages : 693
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Saumande
Âge : 36
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte Décisionnel

Informations forums :
Inscription : février 2008
Messages : 693
Points : 879
Points : 879
Ah oups...
Il est possible que ce composant ne gère pas le mode Update or Insert, contrairement à la plupart des autres composants base de données.

Du coup tu vas être obligé de faire de la même manière que ce qui est proposé dans la discussions dont je t'ai donné le lien : tester si la valeur existe, et utiliser 2 flux de sortie, un qui gère l'insert et un qui gère l'update.

Nicolas
DevNico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 12h05   #5
Futur Membre du Club
 
Inscription : juin 2006
Messages : 217
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 217
Points : 16
Points : 16
Pour l'instant je fais que l'insert.
J'ai regarder le lien.
J'ai essayer ceci.



et dans mon tmap j'ai bien fais la jointure, Et j'ai mit matricule_c en cle.



Seulement malgré ceci l'insert ce fais plusieurs fois je ne vois pas ce qu'il ne va pas.

Merci pour l'aide
france38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 14h12   #6
Membre émérite
 
Homme Nicolas Saumande
Architecte Décisionnel
Inscription : février 2008
Messages : 693
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Saumande
Âge : 36
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte Décisionnel

Informations forums :
Inscription : février 2008
Messages : 693
Points : 879
Points : 879
Il manque juste la définition du filtre en sortie.

Il y a plusieurs façons de le faire.
Tu peux utiliser le filtre du flux de sortie (flèche blanche avec le + vert) et entrer une condition du genre : Relational.ISNULL(row2.matricule_c).

Ainsi une ligne passera dans le flux 'lien' uniquement si le lookup n'a pas ramené de donnée.


La condition à utiliser pour le flux de l'update sera donc l'inverse : !Relational.ISNULL(row2.matricule_c).

Nicolas
DevNico est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/05/2011, 14h53   #7
Futur Membre du Club
 
Inscription : juin 2006
Messages : 217
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 217
Points : 16
Points : 16
Merci pour l'aide ça marche.

J'ai encore quelque question, comment sais-tu le Relational ?
les filtres c'est du JAVA ?

Pour le update maintenant il faut que je rajoute un outputSugar relier au tmap mais en update se coût si.
Comment va t'il choisir entre l'update et l'insert ?
Est-ce-que c'est le filtre qui va faire si on fais un update ou un insert ?

Merci
france38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 15h22   #8
Membre émérite
 
Homme Nicolas Saumande
Architecte Décisionnel
Inscription : février 2008
Messages : 693
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Saumande
Âge : 36
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte Décisionnel

Informations forums :
Inscription : février 2008
Messages : 693
Points : 879
Points : 879
Le Relational.ISNULL est une routine standard Talend.
Tu peux voir ces routines dans l'expression builder (quand tu cliques sur une expression).

L'expression que tu mets dans un filtre est effectivement du java.

Et oui, tu as bien compris.
Ce sont les filtres que tu mets dans chacun des 2 flux de sorties dans le tMap qui définissent dans quel composant passe chaque ligne.

Nicolas
DevNico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 10h20   #9
Futur Membre du Club
 
Inscription : juin 2006
Messages : 217
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 217
Points : 16
Points : 16
Bonjour

J'ai mis l'update en place seulement il y a un petit problème c'est que l'update me ré-insert les lignes même en étant en update.
J'ai bien mis le filtre.
france38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 11h35   #10
Membre émérite
 
Homme Nicolas Saumande
Architecte Décisionnel
Inscription : février 2008
Messages : 693
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Saumande
Âge : 36
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte Décisionnel

Informations forums :
Inscription : février 2008
Messages : 693
Points : 879
Points : 879
Alors je ne connais pas les composants sugarcrm, mais je ne vois pas comment un composant paramétré en update peut insérer une ligne...
DevNico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 12h39   #11
Futur Membre du Club
 
Inscription : juin 2006
Messages : 217
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 217
Points : 16
Points : 16
Je ne comprend pas non plus mais pourtant sur l'image on que il y a deja 13 lignes d’inséré et il lit 6 lignes qui passe dans l'update mais ces lignes sont insère dans la base donc je comprend pas.
J'ai bien mis update après il faut peut être faire quelque chose d'autre mais je trouve rien sur internet pour les composants sugar.



france38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 09h24   #12
Futur Membre du Club
 
Inscription : juin 2006
Messages : 217
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 217
Points : 16
Points : 16
Bonjour

Encore une petite question.
Comment fais t'on pour passer l'ID de sugarcrm à l'id de l'update de façon à ce qu'il sache quel ligne mettre à jour?

J'ai essayer lien.id=update.id sa marche pas.
france38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h03   #13
Membre émérite
 
Homme Nicolas Saumande
Architecte Décisionnel
Inscription : février 2008
Messages : 693
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Saumande
Âge : 36
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte Décisionnel

Informations forums :
Inscription : février 2008
Messages : 693
Points : 879
Points : 879
Les mises à jour se font par rapport aux champs clés définis dans le schéma du composant.

Si on compare par rapport à un update SQL, les champs qui sont mis à jour (commande SET) sont ceux qui ne sont pas clés, et les critères de mise à jour (commande WHERE) sont ceux qui sont clés.

C'est le comportement des tOutput pour les bases de données, j'imagine que le composant sugarcrm fonctionne de la même façon...

Nicolas
DevNico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h16   #14
Futur Membre du Club
 
Inscription : juin 2006
Messages : 217
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 217
Points : 16
Points : 16
Oui mais dans ce cas la cela devrais fonctionner et la ce n'est pas le cas.

On ma dit d'essayer de lui passer l'id de sugarcrm et j'ai pas d'autre solution.
Est-ce-que tu serais comment lui passer l'id ?
france38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h23   #15
Membre émérite
 
Homme Nicolas Saumande
Architecte Décisionnel
Inscription : février 2008
Messages : 693
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Saumande
Âge : 36
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte Décisionnel

Informations forums :
Inscription : février 2008
Messages : 693
Points : 879
Points : 879
Oui, il faut lui passer un champ contenant l'ID et le définir en tant que clé.
Cet ID ne fait pas partie des données que tu as en entrée ?
DevNico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h28   #16
Futur Membre du Club
 
Inscription : juin 2006
Messages : 217
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 217
Points : 16
Points : 16
Ben dans le cas de l'insert l'id est générer automatiquement pas sugarcrm donc je ne m'en occupe pas.
Mais dans l'update l'Id n'est liée à rien du coup il génère un id comme pour un insert.
Je pense que si l'id de l'update étais liée au ligne déjà insérer il serait qu'elle ligne modifier.

Je n'arrive pas à lui passer l'id déjà insérer à l'update.
france38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h46   #17
Membre émérite
 
Homme Nicolas Saumande
Architecte Décisionnel
Inscription : février 2008
Messages : 693
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Saumande
Âge : 36
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte Décisionnel

Informations forums :
Inscription : février 2008
Messages : 693
Points : 879
Points : 879
Donc à priori, il te faut récupérer l'ID de la ligne que tu as détectée via le lookup pour pouvoir le passer au composant update.
DevNico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h59   #18
Futur Membre du Club
 
Inscription : juin 2006
Messages : 217
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 217
Points : 16
Points : 16
Ben non pas le lookup, car le lookup pointe sur une autre table d'une autre base.
Enfaite il me faut récupéré les IDs qui on étais générer par sugarcrm lors de l'insert.
france38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 13h25   #19
Membre émérite
 
Homme Nicolas Saumande
Architecte Décisionnel
Inscription : février 2008
Messages : 693
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Saumande
Âge : 36
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Architecte Décisionnel

Informations forums :
Inscription : février 2008
Messages : 693
Points : 879
Points : 879
Alors c'est un autre lookup qu'il te faut.
Un qui pointe sur la même table qui est alimentée, afin de récupérer l'ID qui correspond à la ligne que tu souhaites mettre à jour.
DevNico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 14h23   #20
Futur Membre du Club
 
Inscription : juin 2006
Messages : 217
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 217
Points : 16
Points : 16
J'ai mit un lookup en plus en dessous de l'autre et j'ai liée l'id.
Mais sa marche toujours pas j'ai pas du faire le bon truc.

Je voulais savoir si il y aurais pas moyen de lancer un update sql d'une table à une autre. mais dans talend.
Si oui comment faire, je crois que j'avais vue avec tMSSqlRow que il y avait possibilité d'exécuter des scripts sql.
Mais je me demande comment je peux faire référence aux tables.
france38 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 13h57.


 
 
 
 
Partenaires

Hébergement Web