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 04/01/2012, 15h43   #1
Invité régulier
 
Inscription : janvier 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 22
Points : 6
Points : 6
Par défaut Création d'un nom de fichier dynamiquement

Bonjour à tous,

Je vais essayer d'exposer au mieux mon problème qui me semblait "bâteau" à l'origine.

Je possède un fichier CSV qui contient 5 champs :
- project_id
- project_name
- release
- date
- nbre_pbm

Voilà un exemple de mon fichier
10086 blabla 4.9 27/03/2009 10
10086 blabla 4.9 30/03/2009 22
10086 blabla 4.9 31/03/2009 31
10086 blabla 4.9 01/04/2009 3
10086 blabla 4.9 06/04/2009 2
10086 blabla 4.9 02/06/2009 13
10086 blabla 4.9 03/06/2009 3
10086 blabla 4.9 04/06/2009 8
10086 blabla 4.9 09/06/2009 3
10086 blabla 4.9 10/06/2009 3
10086 blabla 4.9 11/06/2009 1


A partir de ce fichier, je souhaite faire une courbe cumulée (en fonction de la date sur le nbre_pbm) pour obtenir un graphique de type S-Curve.

J'ai donc, à partir de code Java, transformé mon fichier pour obtenir ceci :
10086 blabla 4.9 27/03/2009 10
10086 blabla 4.9 30/03/2009 32
10086 blabla 4.9 31/03/2009 63
10086 blabla 4.9 01/04/2009 66
10086 blabla 4.9 06/04/2009 68
10086 blabla 4.9 02/06/2009 81
10086 blabla 4.9 03/06/2009 84
10086 blabla 4.9 04/06/2009 92
10086 blabla 4.9 09/06/2009 95
10086 blabla 4.9 10/06/2009 98
10103 blabla2 1.0 16/01/2008 167
10103 blabla3 1.0 17/01/2008 216
10103 blabla4 1.0 18/01/2008 244
10103 blabla5 1.0 21/01/2008 269
10103 blabla6 1.0 22/01/2008 295
10103 blabla7 1.0 23/01/2008 314
10103 blabla8 1.0 24/01/2008 341
10103 blabla9 1.0 25/01/2008 352

Maintenant, ce que j'aimerai, c'est séparer ce fichier en sous fichier. Un fichier par version de projet.

Comment faire pour séparer mon fichier en sous fichier ?

L'autre solution que j'avais en tête c'était de créer plein de fichier. Un fichier par version de projet en passant dynamiquement le nom du fichier dans le composant.

Mon job ressemble à cela :

FichierCSV --> Code Java (transformation du fichier) --> FichierCSV Cumulé

Dans le code Java, j'aimerai initialisé le nom de mon fichier de sortie en fonction des données que je lis. Mais je n'arrive pas à mettre le nom du fichier que je souhaite. J'ai utilisé les variable de context pour ça!

Je sais pas si j'ai été clair.

Merci d'avance
Skycer666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 16h26   #2
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
L'idée qui me vient à la tête c'est de mettre dans le nom du fichier de sortie un truc du genre
Code :
"Monfichier" + row1.version
La partie "Nomfichier" étant statique et la partie row1.version étant dynamique et générée à partir de ton code JAVA et contenant la version de ton projet. Par exemple si on suppose les lignes suivantes :

10086 blabla 4.9 09/06/2009 95 ---> créera un fichier "Monfichier4.9"
10086 blabla 4.9 10/06/2009 98 ---> ne créera pas de fichier puisqu'il existe déjà, alors elle écrira à la fin du fichier "Monfichier4.9"
10103 blabla2 1.0 16/01/2008 167 ---> créera un fichier "Monfichier1.0"
10103 blabla3 1.0 17/01/2008 216 ---> ne créera pas de fichier puisqu'il existe déjà, alors elle écrira à la fin du fichier "Monfichier1.0"

J'éspère que j'étais clair et que ça marchera.
__________________
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
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 16h39   #3
Invité régulier
 
Inscription : janvier 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 22
Points : 6
Points : 6
Dans le principe je suis totalement d'accord.
La seule différence avec ta proposition c'est que je veux même ajouter le N° de projet donc ça serait "MonFichier_IdProject_IdVersion" .

Mais mon problème se trouve exactement là. Dans le composant tfileoutput, je n'arrive pas à créer "dynamiquement" le nom de mon fichier.
si je met row.release, il me met null. Si j'utilise une variable globale, pareil et encore pareil pour une variable de context.

à Quoi correspondont row1 pour toi ?

Merci en tous cas d'avoir pris le temps de lire !

Edit :
Si je met System.out.println(row1.release) dans mon composant Java, la valeur s'affiche correctement ! Est-ce que l'initialisation du nom du fichier se ferait avant mon code ?
Skycer666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 17h16   #4
Membre Expert
 
Avatar de haskouse
 
Homme Mustapha EL HASSAK
Ingénieur développement logiciels
Inscription : août 2009
Messages : 627
Détails du profil
Informations personnelles :
Nom : Homme Mustapha EL HASSAK
Âge : 26
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : août 2009
Messages : 627
Points : 1 514
Points : 1 514
Citation:
à Quoi correspondont row1 pour toi ?
C'est juste une façon de dire que ça arrive du flux précédent le tFileOutput.

Citation:
Si je met System.out.println(row1.release) dans mon composant Java, la valeur s'affiche correctement !
Pourquoi ne pas profiter de ceci. Dans ton tJava stocke le row1.release dans une variable global ne utilisant le code suivant :

Code :
globalMap.put("toto", row1.release)
que tu pourras après récupérer et mettre dans le champs correspondant au nom du fichier, comme ceci :

Code :
(String)globalMap.get("toto")
__________________
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
haskouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 17h23   #5
Invité régulier
 
Inscription : janvier 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 22
Points : 6
Points : 6
Ce qui me fait plaisir quand je vois tes réponses, c'est que j'ai exactement testé toutes ces solutions.

Il n'y a rien à faire,ça ne fonctionne pas

J'ai l'impression que l'initialisation du nom du fichier se fait avant tout traitement de mon job. donc si j'initialise pas mon nom de fichier avant mon job, ça ne marche pas... enfin c'est ce que j'en déduis.

Si quelqu'un pouvait me confirmer ça ou m'indiquer ou trouver les informations sur "l'initialisation des composants de Talend" !
Skycer666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 19h07   #6
Membre habitué
 
Etienne Menuet
Inscription : mai 2010
Messages : 75
Détails du profil
Informations personnelles :
Nom : Etienne Menuet
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2010
Messages : 75
Points : 103
Points : 103
Bonjour,

Dans Talend, le fichier est ouvert avant le début du traitement.
Donc il impossible de créer un fichier avec un nom dynamique en fonction des données sources ... sauf si on utilise un lien iterate pour "casser" le flux principale

Je te renvois a un post précédent avec la même problématique et la solution qui va bien

http://www.developpez.net/forums/d11...fichiers-flux/
emenuet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 09h14   #7
Invité régulier
 
Inscription : janvier 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 22
Points : 6
Points : 6
Bonjour Emenuet,

J'ai testé la solution que tu m'as indiqué.
Je confirme que cela fonctionne.

Juste une question. Il n'y a pas un autre composant que le TFlowToIterate qui existe ? Je trouve que ce composant lent.

En tous merci à toi et à haskhouse pour votre aide.
Skycer666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 10h24   #8
Membre habitué
 
Etienne Menuet
Inscription : mai 2010
Messages : 75
Détails du profil
Informations personnelles :
Nom : Etienne Menuet
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2010
Messages : 75
Points : 103
Points : 103
Bonjour,

La méthode que je t'ai donnée est la seul existante avec des composants Talend standard a ma connaissance.
Les performances sont inférieur car il y a plus d'ouverture et fermeture de fichier.

Pour optimiser ce genre de traitement, il faudrait effectivement créer son propre composant qui gerere le code java spécifique a son besoin. Mais cela est d'un autre niveau
emenuet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 11h00   #9
Invité régulier
 
Inscription : janvier 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 22
Points : 6
Points : 6
Merci pour ta réponse.

Je me permets de poster un nouveau message dans cette discussion.
J'ai regardé dans le forum et sur Internet, et plusieurs personnes rencontre le problème suivant : "For input string".

J'ai cette erreur sur mon champ "project_id" qui est un Integer.
Pourquoi cherche-t-il absolument à me le convertir en String.
Surtout que du coup, mon job ne s'éxecute pas correctement.
Mes fichiers sont correctements créés mais il est incapable de faire le filtre ! du coup je me retrouve avec des fichiers vides.
Skycer666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h58.


 
 
 
 
Partenaires

Hébergement Web