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 09/05/2011, 10h31   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 13
Points : 10
Points : 10
Par défaut TFilelist pour opérations complexes

Bonjour,

J'arrive sans trop de problèmes à utiliser des tFilelist pour des subjob simples.

J'ai un XML de type
_________________________________________________________________
racine
-evenement1
--sous_evenement_classe1_1 (ou s_e_cl1_1)
--sous_evenement_classe1_2

--sous_evenement_classe2_1
--sous_evenement_classe2_2
--sous_evenement_classe2_3

--sous_evenement_classe3_1
--sous_evenement_classe3_2
--sous_evenement_classe3_3

-evenement2
(...)
_______________________________________________________________

Je dois le "linéariser" dans une base relationnelle en:

evenement1|s_e_cl1_1|s_e_cl1_2|s_e_cl2_1|s_e_cl2_2...
evenement2|s_e_cl1_1|s_e_cl1_2|s_e_cl2_1|s_e_cl2_2...

Le problème de "l'incertitude" sur le nombre d'évènements est résolu en ayant un nombre de "slots" fixes pour chaque classe de sous évènement, ce qui est suffisant pour résoudre correctement les cas rencontrés.

Les fichiers XML arrivent par batch.

Actuellement j'utiliser une architecture du type
________________________________________________________________

tfilelist -> timportXML("evenement")->temp_evenement.csv
|
|OnSubjobOk
tfilelist -> timportXML("classe1")->temp_class1.csv
|
|OnSubjobOk
tfilelist -> timportXML("classe2")->temp_class2.csv
|
|OnSubjobOk
tfilelist -> timportXML("classe3")->temp_class3.csv
|
|OnSubjobOk
*fusion des temp* (tmap sur temp_evenement.csv avec les autres fichiers en look-up) -> BD relationnelle
________________________________________________________________

Cette architecture traite batch par batch.

Pour une gestion plus propre j'aurais souhaité traiter fichier par fichier, en remplaçant par:

________________________________________________________________

tfilelist
|
|iterate
timportXML("evenement")->temp_evenement.csv
|
|OnSubjobOk
timportXML("classe1")->temp_class1.csv
|
|OnSubjobOk
timportXML("classe2")->temp_class2.csv
|
|OnSubjobOk
timportXML("classe3")->temp_class3.csv
|
|OnSubjobOk
*fusion des temp* (tmap sur temp_evenement.csv avec les autres fichiers en look-up) -> BD relationnelle
________________________________________________________________

c'est à dire faire un seul iterate sur l'ensemble des opérations.

le problème c'est que quand je tente ce type de méthode il ne me fait l'iterate que sur le premier subjob.

Je me pose la question de savoir si je m'y prend mal dans mon architecture ou si ce n'est pas possible.
FMIMF est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 11h51   #2
Membre habitué
 
Avatar de bbl22
 
Inscription : février 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 114
Points : 112
Points : 112
bjr,

Pour faire ton Iterate, on suppose que dans ton dossier tu as les X fichiers c'est à dire evenement, classe1, classe2, etc.
tu n'as pas à faire OnSubJobOK à chaque fois

tu fais:
tfilelist --->iterate--->ton_traitement--->tOuputFile

tu décoche la case ajouter les lignes comme ça tu auras autant de fichier en sortie qu'en entrée.

J'espère avoir pu t'aider.
__________________
bbl MeMa
bbl22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 09h20   #3
Candidat au titre de Membre du Club
 
Inscription : mai 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 13
Points : 10
Points : 10
Bjr,

Merci pour la réponse.
En fait je pense que c'est un peu plus compliqué que cela:
mon tfilelist iterate sur un batch de fichiers XML, chaque fichier XML contient dans son arborescence les indentation -évènement --sous_evenement_classe1 --sous_evenement_classe2...
En fait le principe que je décompose les XML en 4 fichiers en gardant une clé puis que je les reconstruis en une ligne pour une base relationnelle.

En l'état actuel j'arrive à faire un:
* un fichier temporaire "evenement" pour tout le batch XML (iterate sur tt le batch)
* un fichier temporaire "sous_evenement_classe1" pour tout le batch XML (iterate sur tt le batch)
* un fichier temporaire "sous_evenement_classe2" pour tout le batch XML (iterate sur tt le batch)...
* reconstitution de toutes les lignes du batch par jointure sur les fichiers temporaires
* Mise en base

Ça fonctionne mais je préfèrerai travailler fichier par fichier

* iterate sur fichier_1.xml
* un fichier temporaire "evenement" pour fichier_1.xml
* un fichier temporaire "sous_evenement_classe1" fichier_1.xml
* un fichier temporaire "sous_evenement_classe1" fichier_2.xml
(...)
* reconstitution de toutes les lignes de fichier_1.xml par jointure sur les fichiers temporaires
* Mise en base
* iterate sur fichier_2.xml

Ça serait plus performant (les jointures se font sur des fichiers plus petits) et plus propre (si par exemple plantage durant exécution).
FMIMF 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 12h59.


 
 
 
 
Partenaires

Hébergement Web