1. #1
    Membre du Club
    Inscrit en
    avril 2013
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : avril 2013
    Messages : 133
    Points : 53
    Points
    53

    Par défaut Talend modifié flux iterate

    Bonjour à tous,

    je suis débutant sur Talend et j'ai besoin d'un peu d'aide.
    Je pars d'un flux qui récupère des données via une requete SQL, qui scinde ces données en plusieurs fichier CSV, et qui ensuite constitue 1 seul fichier JSON (à partir des CSV) qui est "récupéré" par des webservice afin d'être envoyé dans Eloqua.
    Voici le flux actuel:

    Nom : Capture.JPG
Affichages : 21
Taille : 89,5 Ko


    Aujourd'hui le JSON créé est trop lourd pour les webservices... J'aimerai donc modifié le flux pour qu'il boucle sur les CSV créé afin de créer autant de JSON est envoyer ces données au webservice.
    Comment modifié le flux (notamment la partie "iterate") pour qu'il boucle tant que des CSV sont créés via la requête ?

    Merci beaucoup !

  2. #2
    Membre éprouvé Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2010
    Messages
    560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2010
    Messages : 560
    Points : 1 129
    Points
    1 129

    Par défaut

    Excuse-moi mais c'est pas trop clair.
    Citation Envoyé par sasafca
    Je pars d'un flux qui récupère des données via une requete SQL
    Le tOracleInput (Contact) je suppose.
    Citation Envoyé par sasafca
    qui scinde ces données en plusieurs fichier CSV
    Si tu pars du tOracleInput vers le tFileOutputDelimeted (Contats), tu ne crées qu'un fichier !
    A moins que tu splites en plusieurs fichiers dans les paramètres avancès
    Citation Envoyé par sasafca
    et qui ensuite constitue 1 seul fichier JSON (à partir des CSV)
    tFileList -> importContact -> tFileOutputJson
    J'ai l'impression que tu as d'autres fichiers dans ton répertoire.
    Tu fais ça pour avoir un historique. C'est pas intuitif.
    Car si tu un seul fichier tu crée le json à la suite du tFileOutputDelimeted (Contats) et bingo c'est plus simple.
    Citation Envoyé par sasafca
    qui est "récupéré" par des webservice afin d'être envoyé dans Eloqua.
    C'est l'appel rest ?







    Dans tous les cas si tu souhaites avoir plusieurs appel il va falloir que tu agréges des données comme tu le souhaites pour créer plusieurs fichier CSV
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discutions 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

  3. #3
    Membre du Club
    Inscrit en
    avril 2013
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : avril 2013
    Messages : 133
    Points : 53
    Points
    53

    Par défaut

    salut supergeoffrey,

    Merci pour ton retour.
    Tu as parfaitement compris le flux.
    "Si tu pars du tOracleInput vers le tFileOutputDelimeted (Contats), tu ne crées qu'un fichier !" --> juste cette partie, le CSV (ici de la requête) est en effet splité en plusieurs dans les paramètres.
    "C'est l'appel rest ?" --> c'est en effet l'appel rest qui permet l'appel des webserices.

    "Car si tu un seul fichier tu crée le json à la suite du tFileOutputDelimeted (Contats) et bingo c'est plus simple." --> j'ai essayé de sortir qu'un seul CSV, mais le JSON créé fait environ 400M aujourd'hui (va continuer de grossire) et les webservices ne le supporte pas. A moins qu'on puisse paramétrer et augmenter le taille que les Webservices (oracle - Eloqua) puissent supporter ?

    "Dans tous les cas si tu souhaites avoir plusieurs appel il va falloir que tu agréges des données comme tu le souhaites pour créer plusieurs fichier CSV" --> du coup les CSV sont déjà splités, mais je ne sais pas trop où placé le iterate, pour qu'il fasse ça en gros:
    CSV splités --> boucle sur tous les CSV un part un pour à chaque fois --> créer un JSON --> appel aux webservices
    alors qu'actuellement le flux fait cela:
    CSV splité --> création d'un seul JSON à partir de tous les CSV--> appel aux webservices
    mais les webservices saturent (trop de données).



    Merci de m'indiquer l'ordre des composant pour faire cela si possible

  4. #4
    Membre éprouvé Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2010
    Messages
    560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2010
    Messages : 560
    Points : 1 129
    Points
    1 129

    Par défaut

    Utilise les basiles [ quote=utilisateur ] [/ quote ] pour citer !

    "Car si tu un seul fichier tu crée le json à la suite du tFileOutputDelimeted (Contats) et bingo c'est plus simple." --> j'ai essayé de sortir qu'un seul CSV, mais le JSON créé fait environ 400M aujourd'hui (va continuer de grossire) et les webservices ne le supporte pas. A moins qu'on puisse paramétrer et augmenter le taille que les Webservices (oracle - Eloqua) puissent supporter ?
    ça sert à rien après ton job va ne plus supporter la taille non plus et avoir des OutOfMemoryError .


    Quand je vois ton job j'ai l'impression qu'il doit fonctionner car dans tes paramètres avancés du tFileOutputDelimeted tu me dis qu'il split déjà en plusieurs fichier. Donc tu dois avoir plusieurs appel WS un par fichier CSV.
    Toutes les combiens de lignes fait-il le changement de fichier ? Peux-tu le baisser pour baisser la taille de tes appels ?
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discutions 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

  5. #5
    Membre du Club
    Inscrit en
    avril 2013
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : avril 2013
    Messages : 133
    Points : 53
    Points
    53

    Par défaut

    Actuellement mon job ne fait qu'un seul appel au webservice quand le JSON est entièrement constitué.
    D'ailleurs je vois bien le message d'erreur en débeugant sur le composant t_rest lorsque le fichier JSON fait 400M.
    J'aimerai constituer autant de JSON que de CSV (couper toutes les 50 000 lignes actuellement dans les paramètres, ce qui me fait 5 CSV), et faire autant d'appels au webservice.
    Mais étant mal à l'aise avec Talend, je ne comprends pas quels composants utilisés et où placer le iterate...

    merci encore de ton aide!

  6. #6
    Membre éprouvé Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2010
    Messages
    560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2010
    Messages : 560
    Points : 1 129
    Points
    1 129

    Par défaut

    Tu n'as pas besoin de changer ton iterate je pense.

    De ce que je comprend ton job split en plusieurs fichiers.
    Dis toi que les 400M sont proportionnel au 50000 ligne.
    Donnes-toi une taille max ideale pour un envoie web rest.
    et diminue le nombre de ligne pour avoir des appel rest plus leger et plus nombreux.

    Par exemple : si tu diminues à 1000 lignes tes appels rest feront 8M mais tu auras 250 appels Rest au lieu de 5
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discutions 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

  7. #7
    Membre du Club
    Inscrit en
    avril 2013
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : avril 2013
    Messages : 133
    Points : 53
    Points
    53

    Par défaut

    J'ai déjà essayé cette solution, mais toutes les lignes présentent dans mes CSV ne sont pas envoyées dans Eloqua.
    Il semble donc que l'appel aux webservices ne se fasse qu'une seule fois que le JSON est terminé, non ?

    J'ai fait les teste:
    Quand je splits mes CSV en plusieurs (toutes les 50 000 lignes ils font tous environ 30M), le JSON final fait 60M. --> cela passe niveau webservice, mais il manque des lignes pourtant présente dans les CSV (mais pas de le JSON).
    Quand je laisse un seul CSV, il fait 120M et le JSON final 400M. (je JSON contient toutes mes lignes, mais ça ne passe pas niveau webservice).

  8. #8
    Membre éprouvé Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2010
    Messages
    560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2010
    Messages : 560
    Points : 1 129
    Points
    1 129

    Par défaut

    Il semble donc que l'appel aux webservices ne se fasse qu'une seule fois que le JSON est terminé, non ?
    Sauf que toutes les déclencheurs sous le flux iterate sont appelés à chaque itération.
    Donc c'est bien construit.

    Pour le manque de produit ça peut etre liés à d'autre choses.
    FileMask dans tfileList
    Header/footer limite dans le tFileInputDelimeted, tu crées des fichiers json as-tu vérifié leur contenu?


    Ton WS remplace-t-il tous les produits ?
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discutions 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

  9. #9
    Membre du Club
    Inscrit en
    avril 2013
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : avril 2013
    Messages : 133
    Points : 53
    Points
    53

    Par défaut

    Citation Envoyé par supergeoffrey Voir le message
    Sauf que toutes les déclencheurs sous le flux iterate sont appelés à chaque itération.
    Donc c'est bien construit.
    je ne comprends pas trop comment fonctionne le flux iterate pour le coup je pense. Il ferait actuellement plusieurs appels au webservice ?
    Est-ce possible de créer autant de JSON que de CSV pour voir cela ? (si oui comment ? )

    Citation Envoyé par supergeoffrey Voir le message
    Pour le manque de produit ça peut etre liés à d'autre choses.
    FileMask dans tfileList
    Le fileMask est configuré comme ceci:
    Nom : tfilemask.JPG
Affichages : 6
Taille : 40,3 Ko

    Citation Envoyé par supergeoffrey Voir le message
    Header/footer limite dans le tFileInputDelimeted, tu crées des fichiers json as-tu vérifié leur contenu?
    Nom : tFileInputDelimeted.JPG
Affichages : 6
Taille : 48,0 Ko

    Citation Envoyé par supergeoffrey Voir le message
    Ton WS remplace-t-il tous les produits ?
    Le WS fait des inserts/update suite à la requête que je lui passe.
    Le problème apparait lorsque la requête renvoie trop de ligne. Lorsque que je "joue" avec des intervalles de date sur la requête pour limiter le nombre de ligne, toutes les données passes.
    Mais lorsque j'envoie tout d'un coup, certaines données sautent...

    merci de ton aide !

  10. #10
    Membre éprouvé Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2010
    Messages
    560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2010
    Messages : 560
    Points : 1 129
    Points
    1 129

    Par défaut

    Citation Envoyé par sasafca
    je ne comprends pas trop comment fonctionne le flux iterate pour le coup je pense. Il ferait actuellement plusieurs appels au webservice ?
    oui oui.
    ça génére du code du genre
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     public void tFileList_1Process(Map<String,Object> globalMap){
       // code de debut du tFileList
       Crée la liste de fichiers relative a la configuration;
       pour(1) chaque fichier de la liste
         // code main du tFileList : fait rien
         // code de debut du TfileOutputJson
         ouverture du fichier json en ecriture
         ajoute le header du fichier (ce qu''il y a avant ton élément de boucle) 
         // code de debut du tFileInputDelimited
         ouvertre du fichier CSV en lecture
         tant qu(1)''il a des lignes a lire
            charge row27 avec la ligne;
            // code main du tFileInputDelimited : fait rien
            // code main du tFileOutputJson
            ajoute au fichier le json de ton élément de double au fichier en fonction de row27;
          // code de fin du tFileInputDelimeted
            fermeture du fichier CSV
         fin tant que(1)
         // code de fin du tFileOutputJson
         ajoute le footer du fichier (ce qu''il y a après ton élément de boucle) 
         ferme le fichier json
         tFileInput_XProcess(globalMap) // qui est ta transition vers "Récupération du fichier JSON", tu peux t''apercevoir ici qu''on passe ici pour chaque fichier csv
       //Code de fin tFileList
      fin pour(1)
     }

    Citation Envoyé par sasafca
    Est-ce possible de créer autant de JSON que de CSV pour voir cela ? (si oui comment ? )
    tu ajoutes des tWarn avant et apres l'appel rest
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discutions 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

  11. #11
    Membre du Club
    Inscrit en
    avril 2013
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : avril 2013
    Messages : 133
    Points : 53
    Points
    53

    Par défaut

    Ok ,merci beaucoup pour ce détail !
    Le flux à l'air de fonctionner en limitant la taille des CSV à 10 000 lignes.

    Encore merci !

    Dernière question, je dois automatiser une picklist dans Eloqua, mais je n'ai pas trop d'idée comment faire. A priori passer par le SFTP et Talend, mais je ne sais pas trop d'où partir...

    Merci !

  12. #12
    Membre éprouvé Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2010
    Messages
    560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2010
    Messages : 560
    Points : 1 129
    Points
    1 129

    Par défaut

    [quote] A priori passer par le SFTP et Talend, mais je ne sais pas trop d'où partir...[quote]
    sasafca regarde les composants tFtpXXXXXXXXXXXXX
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discutions 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

Discussions similaires

  1. Modifier workspace de Talend
    Par imikado dans le forum Installation, migration et administration
    Réponses: 3
    Dernier message: 17/03/2009, 11h57
  2. Modifier une ligne dans un flux
    Par matteli dans le forum C++
    Réponses: 7
    Dernier message: 31/01/2008, 18h11
  3. [TALEND] fusion de 2 flux
    Par sleigh dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 23/09/2007, 21h10
  4. Filtre DirectShow qui modifie le flux MPEG-2
    Par epix444 dans le forum DirectX
    Réponses: 18
    Dernier message: 13/10/2006, 16h09
  5. [C#]Modifier l'image dans une PictureBox depuis un flux http
    Par f.colo dans le forum Windows Forms
    Réponses: 1
    Dernier message: 14/02/2006, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo