Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Talend Discussion :

Parcourir plusieurs fois un contextFile


Sujet :

Talend

  1. #1
    Membre habitué
    Parcourir plusieurs fois un contextFile
    ]Bonjour,

    J'ai réalisé un Job (TOS for ESB) qui peut s'appliquer sur différentes View et Table qui se correspondent.
    J'aimerai parcourir un fichier de context qui contient mes différentes variables pour que mon job s'exécute sur chacune des tables et vues renseignées.
    Pour l'exemple mon Job peut s'appliquer sur 3 tables et vues, j'aimerai donc qu'il s'exécute 3 fois : la 1ère sur la colonne B, la deuxième sur la colonne C et la troisième sur la colonne D de mon fichier CSV de context. Je lis donc en premier lieu mon fichier de context vie un tFileInputDelimited et un tContextLoad

    Mon fichier :



    Je ne sais pas trop comment m'y prendre, je peux utiliser un composant spécifique (tLoop) ? Un autre moyen ?
    Actuellement je possède un Job pour chaque Table et Vue correspondante (environ une dizaine, ce qui implique 10 Jobs et 10 fichiers de contexts).

    Merci d'avance.

    Ps : j'aimerai que le Job se poursuive même si il rencontre une erreur durant son exécution, c'est à dire que si il y a une erreur sur la colonne B, il passe à la colonne C.

  2. #2
    Membre éprouvé
    Salut,

    Pour itérer une action sur chaque ligne d'une source de données, il faut utiliser le composant tFlowToIterate.

    Nicolas

  3. #3
    Membre expérimenté
    Nico à raison mais le plus dur pour toi va être de renverser le CSV.
    Tu n'es pas dans une logique schema = column mais schema = ligne.
    Le plus simple est de le faire à la main mais c'est chiant
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  4. #4
    Membre habitué
    Citation Envoyé par supergeoffrey Voir le message
    Nico à raison mais le plus dur pour toi va être de renverser le CSV.
    Tu n'es pas dans une logique schema = column mais schema = ligne.
    Le plus simple est de le faire à la main mais c'est chiant
    Oui c'est sur mais le service veut tout automatiser et limiter les fichiers, les Jobs. Actuellement je transfère les fluxs atuels qui sont sous Genio vers Talend et j'ai comme consigne de faire ça ...

    En tout cas je prends note de vos conseils, merci !

  5. #5
    Membre expérimenté
    Renverser le CSV en java tu peux t'en sortir avec une routine et un tJavaFlex

    L'objectif est de transformer ton fichier en tableau à 2 dimensions puis de la parcourir en colonne.

    Cette stratégie fonctionne car ton fichier est assez petit ça ne fonctionnera pas avec un fichier de 10Go.

    Essaye de faire un job du genre

    tFileOutputDelimeted_1 -row1-> tJavaFlex_1 -onComponentOk-> tJavaFlex_2 -row2-> tFlowToIterate -iterate-> le reste de ton job


    tFileOutputDelimeted_1 :
    Parse ton fichier tu lui mets qu'une seule ligne dans ton schéma
    Il est juste la pour te mâcher le travail, ce qu'il t’intéresse vraiment dedans c'est le tableau qui représente ta ligne spliter.
    Ce tableau tu le réutiliseras dans le main du tJavaFlex1.
    Le nom de la variable du tableau tu pourras le trouver en cherchant
    Code java :Sélectionner tout -Visualiser dans une fenêtre à part
    row1.columnName =

    Oui c'est bisard. Mais ça marche !

    tJavaFlex_1 :
    Construit ton tableau
    A la fin du traitement tu le partage dans globalMap

    tJaveFlex_2 :
    lit ton tableau
    Dans le main tu dois commencer ton itération et alimenter en fonction row2 sans fermer les boucles
    Dans le code de fin fermer tes boucles
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  6. #6
    Membre habitué
    Citation Envoyé par supergeoffrey Voir le message
    Renverser le CSV en java tu peux t'en sortir avec une routine et un tJavaFlex

    Mon Job agit sur une vue et une table lui correspondant, je dois avoir une dizaine de fois à exécuter le job. Après c'est un fichier CSV contenant le nom tables/vues et les infos de connexion au server de bdd, donc c'est une fichier léger.
    A la limite je peux renverser le CSV à la main ça ne me prendra pas beaucoup de temps puisque j'ai assez peu de colonne (13 dont 12 contenant les valeurs et la première les nom des variables) sur 27 lignes.

    Je vais essayer dans un premier temps la méthode que tu m'as indiqué, ça me fera un bon exercice et si ça me prends trop de temps je le restructurerai à la main.

    En tout cas merci !

###raw>template_hook.ano_emploi###