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 06/04/2011, 18h27   #1
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 87
Points : -13
Points : -13
Par défaut passer une variable java dans un tBase

Bonjour,

Ma problématique est la suivante.

Je récupère une liste de string via une tache tJavaFlex (en lisant un fichier texte) que je sauve dans une variable de contexte.

J'utilise cette variable de contexte dans une requete SQL de type SELECT * FROM MA_TABLE WHERE MA_TABLE.MON_CHAMPS IN (context.maVariabel de contexte) dans un composant tOracle.

Jusque là pas trop de souci meme si je ne sais pas en terme de worflow pourquoi la tache tJavaFlex se lance forcement avant mon flow principal.

Le souci c'est que ma liste contient plus de 1000 entrées et que le requete SQL elle aime pas ca.

Du coup je me retrouve à splitter ma liste de string en bloc de 999 entrées masi je vois pas comment dynamiquement les passer à ma requête SQL dans mon composant java.
Images attachées
Type de fichier : jpg flow1.JPG (16,5 Ko, 7 affichages)
kaljerhom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2011, 11h02   #2
Rédacteur/Modérateur
 
Avatar de jsd03
 
Jean-Sébastien DARGES
Consultant décisionnel
Inscription : août 2008
Messages : 983
Détails du profil
Informations personnelles :
Nom : Jean-Sébastien DARGES
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant décisionnel

Informations forums :
Inscription : août 2008
Messages : 983
Points : 1 845
Points : 1 845
Pourquoi tu ne fais pas une jointure entre ta BDD et ton fichier de string grâce au tMap en joignant sur le champ MA_TABLE.MON_CHAMPS ? Ce t'éviterai ce genre de désagrément.
__________________
Google est ton ami mais ton voisin aussi

Modérateur BI
Mes tutoriels - FAQ Talend - FAQ SQL*Plus

Suivez @Developpez sur twitter !
jsd03 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/04/2011, 13h46   #3
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 87
Points : -13
Points : -13
Ok j'ai tenté ce que tu as dit mais le problème c'est que le composant tFileInputDelimited ne lit que le premier string de mon fichier texte.
Chaque string est en fait un nombre séparé par un virgule, tous sur une seule ligne.
Je ne vois pas pourquoi il ne lit que le premier et pas les autres, sinon à part cela le résultat semble être ce que je souhaite.

J'ai essayé un lien iterate mais il refuse de le mettre entre mon fichier et ma tmap.

Aurais-tu une idée qui me permettrait de parcourir tout le fichier.
Images attachées
Type de fichier : jpg flow2.JPG (17,6 Ko, 2 affichages)
kaljerhom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 11h36   #4
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 87
Points : -13
Points : -13
Bon alors la technique de récupérer mes enregistrements de base de données et de faire une jointure sur la clé primaire via un tMap avec ma liste de clé primaire contenue dans un fichier texte marche très bien.
Mon problème maintenant est que ma table source fait 2 millions d'entrées et que requêter toute la table pour ne récupérer que 3000 entrées au final par exemple ca fait mal en terme de perf.
Du coup je me retrouve à faire ma requête "select * from table where cleprimaire in (231231,32121)" mais toujours limité à 1000 occurrences.

Quelqu'un a une idée ?
kaljerhom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 11h52   #5
Rédacteur/Modérateur
 
Avatar de jsd03
 
Jean-Sébastien DARGES
Consultant décisionnel
Inscription : août 2008
Messages : 983
Détails du profil
Informations personnelles :
Nom : Jean-Sébastien DARGES
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant décisionnel

Informations forums :
Inscription : août 2008
Messages : 983
Points : 1 845
Points : 1 845
Ben ouai mais c'est la dure loi de l'ETL

Après même si tu lis 2 000 000 de lignes et que tu ne t'en sers que de 3000 en sortie du lookup, les performances doivent être raisonnable non ? entre 5 à 10 min ?
__________________
Google est ton ami mais ton voisin aussi

Modérateur BI
Mes tutoriels - FAQ Talend - FAQ SQL*Plus

Suivez @Developpez sur twitter !
jsd03 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 12h23   #6
 
Inscription : février 2008
Messages : 87
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 87
Points : -13
Points : -13
Si la base est en locale surement, mais si je dois me balader sur le réseau bah ca peut prendre des heures.
Sinon en fait avec ma fameuse table, ca m'a péter "java.lang.OutOfMemoryError: Java heap space" direct
J'ai oublié de dire que ma table à 2M d'entrée elle a plus de 60 colonnes.

Du coup vois tu comment je pourrais itérer sur un processus java qui donnerait à mon composant Oracle une variable contenant des groupes de clé primaire à insérer dans sa requête select * ... IN.
Pour faire une sorte de requête UNION mais dynamique.
kaljerhom 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 05h41.


 
 
 
 
Partenaires

Hébergement Web