|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 6 ![]() |
Bonjour,
Dans un de mes job talend, j'ai besoin d'insérer (ou modifier) un enregistrement dans une table 1 mysql, je dois ensuite récupérer la clé primaire de cette table (qui est en auto incrément) et d'insérer un enregistrement dans une autre table avec cette valeur. Actuellement, n'ayant pas trouvé de solution, j'éxécute le composant tMysqlSP qui appelle une procédure stockée. Cette procédure stockée ne fait que insérer un enregistrement vide dans la table 1 et récupère l'id. Je peux donc par la suite insérer cette valeur dans ma deuxième table. Je ne suis pas satisfait de cette solution. Existe t'il une autre solution ? Merci par avance, Estelle |
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Bonjour,
A priori le compostant tMysqlLastInsertId est fait pour ça. Je ne l'ai jamais utilisé, du coup je ne m'avance pas trop... Et j'ai un petit doute sur son bon fonctionnement en cas de plusieurs insertions en parallèle dans la table... Nicolas |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 6 ![]() |
Je ne vois pas comment je peux utiliser le tMysqlLastInsertId.
Je m'explique un peu plus, je vais prendre un exemple. J'ai 2 valeurs en entrée d'un tmap : val1, val2. val1 doit être insérée dans la table1. val2 doit être insérée dans la table2 avec l'id de la table1. j'ai donc un tmap avec comme première sortie un tMysqlOutput vers la table 1. je branche après un tmysqlLastInsertId. Comment puis-je récupérer l'id avec tMysqlLastInsertId et récupérer ma val2 du tmap pour insérer dans ma table2. Je vous joins un un schéma simplifié ! Mon problème est donc le suivant : J'aimerais brancher le tMysqlOutput de la table2 après le tMysqlLastInsertId mais comment puis-je récupérer val2 qui n'est pas dans le flux de sortie ? |
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Inscription : mai 2007 Messages : 173 ![]() |
La page 494 du guide de reference 4.x des composants donne un example de ce que vous souhaitez faire... Précisément.
P. |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Nicolas VandenbergueConseil - Consultant en systèmes d'information Inscription : janvier 2011 Messages : 88 ![]() |
Bonjour,
J'ai regardé cela. Parlez-vous des composants tGreenplumOutputBulk et tGreenplumBulkExec ? J'ai testé avec un tMysqlOutputBulk et tMysqlBulkExec. Je peux ajouter des enregistrements dans la table, mais comment récupérer l'ID (auto incrément de la table)? Merci si vous pouvez préciser. |
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() Etienne MenuetInscription : mai 2010 Messages : 71 ![]() |
Bonjour,
Je réponds a partir de l'image de tetelle49. Dans le cas 1, il suffit d'ajouter un tSetGlobalVar après le tMysqlLastInsertId et de créer sa propre variable global. Dans le mapping pour la table 2 il suffit de renseigner avec la globalVariable que l'on a créé : (Interger)globalMap.get("MyVar"). Dans le cas 2, il faut décrire dans le schéma toutes les colonnes nécessaire pour les 2 tables, puis aller dans les paramètres avancé du composants Output de la table 1 et cocher use field option qui permet de sélectionner les colonnes pour une table 1. Pour l'ID, un tMap pour effectuer le mapping des colonnes dans la table 2 permet de prendre en compte la valeur de l'auto incrément. |
|
|
00
|
|
|
#7 |
|
Membre régulier
![]() Inscription : mai 2007 Messages : 173 ![]() |
J'ai du me tromper de page ou de version du doc.
Je voulais parler de TalendOpenStudio_Components_RG_42a_FR.pdf, (p642 du doc ou p670 du pdf : * tMysqlLastInsertId * Scénario : Récupérer les ID des dernières entrées ajoutées |
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Nicolas VandenbergueConseil - Consultant en systèmes d'information Inscription : janvier 2011 Messages : 88 ![]() |
Merci, nous avons pu faire cela
Nous avions deux choses que nous ne maîtrisions pas : 1. La possibilité de passer des données du flux 'à travers' le premier tMysqlOutput (comme indiqué par emenuet, le "use field option qui permet de sélectionner les colonnes pour une table 1") 2. Le fait de "vérifiez que la case Extend Insert de l'onglet Advanced settings est bien décochée" comme indiqué dans le TalendOpenStudio_Components_RG_42a_FR.pdf (p. 670 et suivantes), comme indiqué par pdelorme Encore merci à vous deux. |
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : août 2006 Messages : 17 ![]() |
Bonjour,
J'ai la même problématique que celle décrite ici. Comment avez-vous utiliser le "use field option" pour résoudre votre problème ? Apparemment, il faut ajouter les champs du schéma de table2 dans le schéma entre le tMap et table1 : il y a-t-il un moyen rapide de faire cela pour les gros schémas, où doit-on le faire à la main, champs par champs ? Merci |
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Nicolas VandenbergueConseil - Consultant en systèmes d'information Inscription : janvier 2011 Messages : 88 ![]() |
Bonjour,
Tu peux cliquer sur 'Editer le schéma' sur le tMysqlLastInsertId et utiliser les boutons pour ajouter les champs de la table 2 sur la description du tMysqlLastInsertId, puis faire la même chose pour la description de la table 1. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com