|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éclairé
![]() Inscription : mars 2007 Messages : 379 ![]() |
bonjour,
je débute sur Talend et je ne sais pas si je peux faire ce que j'aimerai faire. J'ai un fichier de log que j'analyse via tFileInputRegex que je retravaille ensuite via un tMap dont j'ai en sortie (entre autres) une colonne "MACOLONNE_MAP". J'ai une base de données Oracle avec une table qui a une colonne "MACOLONNE_ORACLE" qui est la PK de cette table J'aimerai pour chaque valeur "MACOLONNE_MAP" faire une jointure avec la base de données en faisant une requête SQL : select * from MATABLE where MATABLE.MACOLONNE_ORACLE='VALEUR DE MACOLONNE_MAP'. Est-ce que c'est possible? ou bien faut-il faire autrement? "select * from MATABLE" => et faire la jointure dans le tMap? Merci d'avance |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Mustapha EL HASSAKIngénieur développement logiciels Inscription : août 2009 Messages : 627 ![]() |
Si tu veux créer une requête genre :
Code :
SELECT * FROM MATABLE WHERE MATABLE.MACOLONNE_ORACLE='VALEUR DE MACOLONNE_MAP' Ou sinon, et ce ce sue je pense moi le plus facile, c'est de lier ta sortie directement avec un autre tMap et lier ton autre table à ce même tMap, puis tu feras la jointure à l'intérieur. A toi de voir.
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui) Mes articles publiés |
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() Inscription : mars 2007 Messages : 379 ![]() |
merci de ta réponse.
je vais tester avec le FlowIterate. pour ce qui est de la 2ème solution (que tu préconises) ce qui me gène c'est de ramener tous les enregistrements de la table (plus 100 millions de lignes) pour en extraire une seule à chaque fois car la jointure que je demande est sur la PK de la table. donc, je pense que c'est plus performant de faire une clause where sur la PK que de tout ramener, non? |
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Inscription : mars 2007 Messages : 379 ![]() |
j'ai testé avec le tFlowToIterate, et ça fonctionne bien pour la jointure (ça évite de parcourir les 100 millions de lignes).
par contre, en sortie de ce tFlowToIterate, je ne peux récupérer que les colonnes de ma table Oracle; je perds les colonnes de mon tMap précédent. comment faire? |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Mustapha EL HASSAKIngénieur développement logiciels Inscription : août 2009 Messages : 627 ![]() |
Tu pourrais ajouter les colonnes que tu veux récupérer dans le schéma de ta sortie Oracle puis dans les paramètres avancés de ta table Oracle il y' a une partie où tu peux choisir quelles sont les colonnes que tu veux réellement insérer dans la base et lesquels tu ne veux pas.
Dans les paramètres de ton composant de sortie Oracle, tu coches "Paramètres avancés", une liste des champs de ton schéma va apparaître, dans cette dernière tu décoches les deux colonnes "Peut être mis à jour" et "Insérable" pour les colonnes que tu ne veux pas insérer ni mettre à jour dans la base de données.
__________________
Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant. "Mohammed le Messager d’Allah" (que la paix et le salut d'Allah soient sur lui) Mes articles publiés |
|
|
00
|
|
|
#6 |
|
Membre éclairé
![]() Inscription : mars 2007 Messages : 379 ![]() |
merci de ta réponse, mais je ne veux pas faire d'insertion en base.
voici ce que j'ai tMap --> tFlowToIterate --> tOracleRow --> tFileOutputDelimited dans tFileOutputDelimited, j'aimerai avoir des colonnes de "tMap" et de "tOracleRow". de plus, j'aimerai que la jointure entre tMap et tOracleRow soit externe car j'ai des lignes de sortie de tMap où la colonne de jointure avec tOracleRow n'a pas de valeur et j'ai besoin d'avoir cette ligne en sortie du tFileOutputDelimited |
|
|
00
|
|
|
#7 |
|
Futur Membre du Club
![]() Sébastien M. Inscription : janvier 2010 Messages : 11 ![]() |
Bonjour,
Il y a peut être une autre solution à ce problème. Dans le tMap, un flux lookup peut être chargé une fois pour toute, ou bien être rechargé à chaque ligne du flux principal (mode de jointure "reload at each row" ou "reload at each row (cache)") Dans ce cas il est possible d'exposer une variable au sein du tMap, qui pourra être appelée dans la clause WHERE de la requête SQL du composant utilisé dans le lookup. Attention, le flux lookup est rechargé à chaque ligne, donc pour éviter de rejouer la connexion à la base de données à chaque fois, il est préférable d'utiliser un composant de connexion en début de job et d'utiliser cette connexion dans le composant utilisé dans le flux lookup. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com