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 07/10/2011, 15h14   #1
Candidat au titre de Membre du Club
 
Monica
Inscription : novembre 2010
Messages : 23
Détails du profil
Informations personnelles :
Nom : Monica
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2010
Messages : 23
Points : 14
Points : 14
Par défaut Retrouver des fichiers en fonction du contenu d'une BDD et les copier sur un serveur distant

Bonjour à tous,


Je tente depuis quelques jours d'associer les tFlowToIterate, tFileList et autres tFTPPut pour effectuer le traitement suivant :

- J'ai dans une base de données en local une table DOCUMENT listant tous mes tableaux Excel : nom du fichier, répertoire, type de fichier, destinataire... et un flag Y/N me permettant de savoir si je dois copier le fichier ou non.
- Tous les fichiers se trouvent dans un répertoire réseau //SERVEURLOCAL/documents
- J'aimerais créer un job Talend parcourant la table DOCUMENT, et pour toutes les lignes ayant TRANSFERT à 'Y', copier le fichier sur mon serveur FTP.

J'ai déjà un job permettant de récupérer tous les fichiers se trouvant dans //SERVEURLOCAL/documents et de créer les lignes correspondantes dans la table DOCUMENT, mais j'ai un peu de mal à concevoir le traitement inverse : récupérer certaines lignes de DOCUMENT, et copier les fichiers vers un FTP.


Est-ce possible avec Talend Open Studio 4.2.2 ou est-ce que je m'échine pour rien ?
MNDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 15h23   #2
Membre du Club
 
Avatar de jnbarthas
 
Homme
Ingénieur développement logiciels
Inscription : août 2011
Messages : 49
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : août 2011
Messages : 49
Points : 64
Points : 64
si vous êtes à l'aise en java c'est possible en utilisant une variable globale de type ArrayList pour enregistrer tous les éléments à traiter (String nom); critère FLAG.
Ensuite, vous balayez la liste avec un tLoop et déclenchez une instruction de copie en code java, ligne de commande ou plus simplement via le composant adapté avec en paramètre une information stockée en ArrayList.

bonne continuation.
jnbarthas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 15h29   #3
Candidat au titre de Membre du Club
 
Monica
Inscription : novembre 2010
Messages : 23
Détails du profil
Informations personnelles :
Nom : Monica
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2010
Messages : 23
Points : 14
Points : 14
N'est-il pas possible de passer exclusivement par des composants Talend ? Lorsque nous avons choisi cet ETL, c'était justement pour ne plus avoir à coder...
MNDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 15h55   #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
A moins avis cela est possible sur Talend, sans avoir à coder quoi que ce soit. La question qui se pose maintenant c'est sur quoi tu bloques au juste ?
__________________
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 07/10/2011, 16h10   #5
Membre du Club
 
Avatar de jnbarthas
 
Homme
Ingénieur développement logiciels
Inscription : août 2011
Messages : 49
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : août 2011
Messages : 49
Points : 64
Points : 64
Pour déclencher l'instruction spécifique sur un ou plusieurs éléments du flux, c'est la première idée qui me vient.
Regardez du côté du composant tJavaFlex (préparation de la liste), puis tLoop.

Côté code, c'est très léger mais il faut se documenter un peu pour se lancer...


Cependant, vous pouvez faire SANS CODE en utilisant un lien ITERATE sur un composant du type tFlowToIterate (flux des éléments à traiter) pour ensuite appeler le tFtP qui convient.
Voir
http://www.developpez.net/forums/d89...terate-talend/
pour les exemples de préparation des données
jnbarthas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 16h47   #6
Candidat au titre de Membre du Club
 
Monica
Inscription : novembre 2010
Messages : 23
Détails du profil
Informations personnelles :
Nom : Monica
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2010
Messages : 23
Points : 14
Points : 14
Citation:
Envoyé par haskouse Voir le message
A moins avis cela est possible sur Talend, sans avoir à coder quoi que ce soit. La question qui se pose maintenant c'est sur quoi tu bloques au juste ?

J'imaginais le flux suivant :

tOracleInput : select * from document where flag='Y' (serveur local)
v (Main)
tMap : Output = nom du fichier, répertoire, id_destinataire
v (Main)
tFlowToIterate : Transformation du flux en Iterate
v (Iterate)
tFileExist : Si le fichier est présent dans mon répertoire réseau
v (If file exists)
tFTPPut : Alors on le copie sur le FTP
v (Main)
tMySqlOutput : Et on insère les informations dans une autre BDD (serveur distant)


J'ai du mal à transformer le flux d'informations (contenant entre autres l'emplacement de mon fichier) en action (prendre la colonne file_path en output du tMap et aller vérifier si le fichier concerné existe).


Je ne suis pas familiarisée avec les variables globales, encore moins avec Talend : est-ce le seul moyen de prendre une information du flux de données et de l'utiliser en entrée d'un tFileExist ?
MNDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 17h19   #7
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
En fait je ne pense pas que tu aies besoin d'utiliser des varibales globales. Si on suppose que le lien entre ton "tMap" et ton "tFlowToIterate" porte le nom "MaSortie" et que ta colonne contenant le chemin de ton fichier se nomme "file_path" alors dans ce cas là tu peux mettre directement dans le chemin de ton tFileExist la valeur suivante :

Sinon si ça ne marche pas tu utilises cette syntaxe :

Code :
(String)globalMap.get("MaSortie.file_path")
Et dans le lien RunIf pour savoir si le fichier existe ou non tu mets le code suivant :

Code :
((BOOLEAN)globalMap.get("tFileExist_1_EXISTS"))
Bonne chance.
__________________
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
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h17.


 
 
 
 
Partenaires

Hébergement Web