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 10/01/2011, 14h04   #1
Membre régulier
 
Inscription : novembre 2006
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 226
Points : 94
Points : 94
Par défaut Boucles et ecritures dans un fichier

Bonjour,

Je dois générer un fichier ayant la structure suivante :

ENT;NumCde1;DateCde;NumFourn
COM;Commentaire 1
COM;Commentaire 2
LIG;NumProduit 1;Qte
LIG;NumProduit 2;Qte
LIG;NumProduit 3;Qte
...
FIN;NumCde1
ENT;NumCde2;DateCde;NumFourn
COM;Commentaire 1
COM;Commentaire 2
LIG;NumProduit 1;Qte
LIG;NumProduit 2;Qte
LIG;NumProduit 3;Qte
...
FIN;NumCde2

Les données sont stockées en BDD, j'ai du mail à voir quels composants utiliser et comment les orchestrer.

Pour le moment j'ai mes tOracleInput + tMap qui me génèrent les lignes ENT mais ensuite quel composant me permettant de boucler sur mes commandes dois-je enchainer et à quels moments déclencher mes ecritures dans le fichier de sortie ?

Toute aide est la bienvenue.
scariou29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 11h52   #2
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
Bon alors je connais pas la structure de ta BDD donc j'vais essayer de deviner.
J'imagine que tu as une table pour les ENT, pour les COM , ect
Moi je ferais ainsi :
-Un job fils dans lequel j'ecrirais des requetes avec un where dynamique (une variable de context qui represente le num de commande)
C'est à dire tu ecris l'entête puis les COM ... etc

-Un job père qui iterate sur les commande qui tu as a traité et qui passe le num de commande en parametre au job fils
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 12h01   #3
Membre régulier
 
Inscription : novembre 2006
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 226
Points : 94
Points : 94
Bonjour et merci pour ta réponse.

pour le moment j'ai un job qui sait alimenter les lignes d'entete (avec un tflowiterate) comme dans l'image jointe.

J'ai effectivement un sous-job qui doit aliment les COM mais je ne sais pas ou poser mon nouveau tflowiterate et comment récupérer dans mon sousjob la valeur pour construire ma clause where dynamique.
Images attachées
Type de fichier : jpg tflowiterate.jpg (34,0 Ko, 30 affichages)
scariou29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 12h13   #4
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
Dans tFlowtoIterate tu peux définir les clé (les valeurs que tu veux garder)
Pour les récupérer il suffit d'utiliser la fonction globalMap.get("NomClé")
Cet fonction renvoie un type Objet il faut donc le caster en String pour pouvoir l'utiliser dans une requete
Exemple dans un Input tu met en requête

Code :
1
2
SELECT * FROM MaTable
WHERE numCom="+((String)globalMap.get("NumCom"))
En mode contexte la requete
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 12h19   #5
Membre régulier
 
Inscription : novembre 2006
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 226
Points : 94
Points : 94
L'information
Code :
(String)globalMap.get("NumCom"))
est transmise entre le job main et son sous job ?

Si je resume,
J'ai mon job parent qui se termine par un tFlowIterate + RunJob
Et mon sous job débute par un toracleinput avec clause where dynamique.

Que veux-tu dire que ma requete est en mode contexte ?
scariou29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 14h03   #6
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
alors si tu utilise un Trunjob,
tu dois passer la variable en paramètre c a d :

Dans ton sous job tu défini des variables de contexte
Par exemple un String NumComande

Dans le job pere , dans le tRunJob tu va ajouter dans l'encadrer paramere ton parametre NumComande et à coté dans le champs valeur tu mettera ((String)globalMap.get("NumComande"))

Dans le sous job pour avoir une requête dynamique tu mettera :
Code :
1
2
SELECT * FROM MaTable
WHERE numCom="+context.NumComande
et excuse moi pour le mode contexte c juste si tu décide d'éditer ta requête.
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 15h57   #7
Membre régulier
 
Inscription : novembre 2006
Messages : 226
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 226
Points : 94
Points : 94
Ok

j'ai réussi à créer un fichier correspondant à peu près à ce que je désire.

Maintenant, je souhaite imbriquer des boucles (tFlowiterate).
A 1 cde, n lignes de produits et a chaque produit n lignes de tailles par exemple.

j'ai inséré pour le moment les entetes de commandes, les produits commandés et pour chaque produit je souhaite avoir les tailles commandées

Puis-je mettre mon nouveau tflowiterate en sortie d'un tmap ou faut-il qu'il soit en sortie d'un tOracleInput ?
scariou29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 16h09   #8
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
Ca c'est toi qui vois ce qui t'arrange, la seul contrainte c que le tFlowtoIterate prend un flow en entrée ^^
(en sorti d'un t map c un flow aussi )
kisskool45 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 18h52.


 
 
 
 
Partenaires

Hébergement Web