IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Développement de jobs Discussion :

Lecture par itération


Sujet :

Développement de jobs

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut Lecture par itération
    Bonjour,

    Dans talend, je lis un fichier excel.
    Pour chaque ligne du fichier excel, j'insère la ligne dans une table postgres "out" et pour cela je lis la valeur de l'index de la table "t_index" pour cette ligne dans une table spéciale "t_index".
    Dans cette table j'ai le dernier id utilisé, je veux donc le lire, insérer ma ligne dans la table "out" avec cet id puis incrémenter mon id dans la table "t_index".

    Comment faire pour réaliser ce traitement ligne par ligne ?

    J'ai mis le fichier excel en input et liaison main et un "t_postgressqlInput" reprenant la table t_index en input liaison lookup.

    ces deux composants vont vers un t_map

    puis en sortie je mets à jour mon id dans "t_index" et j'insère ma ligne dans ma table "out".

    Mais si je fais ça, il me lit la valeur de l' id, et me met cette valeur pour toutes les lignes de mon fichier excel dans la table "out", au lieu de relire la valeur de l'id à chaque ligne....


    Merci


    Charlotte

  2. #2
    Membre averti Avatar de bouvda
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 252
    Points : 318
    Points
    318
    Par défaut
    Bonjour,

    voici une façon de procéder. Elle n'est pas très performante mais elle fonctionne :

    - Creer un job principal et un sous job.
    - dans les 2 jobs créer des paramètres : un pour chaque champ du schéma du fichier Excel
    par ex : dans le job principal :
    - relier le tFileExcelInput à un tJavaRow.
    - dans le tJavaRow affecter les valeurs aux paramètres du job
    par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    context.setProperty("param1",row1.champ1);
    context.setProperty("param2",row1.champ2);
    -relier le tJavaRow à un tRunJob qui appelle le sous job en lui passant les paramètres :
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    param1 | (String)context.getProperty("param1")
    param2 | (String)context.getProperty("param2")
    dans le sous job :
    -utiliser un tPostgresqlInput pour obtenir la valeur de l'index
    -relier à un tPostgresqlRow qui a pour requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update dbo.t_index set mon_index = mon_index +1
    -relier à un tMap dans lequel mapping pour l'index et utilisation des paramètres pour les champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    context.getProperty("param1")
    - insérer dans la base grâce à un tPostgresqlOutput

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Alors j'essaye ta solution ce matin, pour le job principal je comprend bien par contre pour le sous job je suis un peu perdue.


    c'est la fin où je suis perdue:

    relier à un tMap dans lequel mapping pour l'index et utilisation des paramètres pour les champs :
    Code :
    context.getProperty("param1")

    - insérer dans la base grâce à un tPostgresqlOutput



    Je joins une image de ce que j'ai compris.
    que dois je faire dans le t_map? où puis utiliser le "param1" ?

    en sortie du t_PostgresqlRow je n'ai plus que des infos sur la valeur de l'index, j'ai perdu les infos de mon fichier excel d'entrée.
    il doit me manquer une liaison quelque part....


    merci

  4. #4
    Membre averti Avatar de bouvda
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 252
    Points : 318
    Points
    318
    Par défaut
    Bonjour,

    les données du fichier Excel sont passées ligne par ligne en paramètres au tRunJob dans le job principal (pour cela il ne faut pas oublier de passer les paramètres dans l'onglet Properties pour le tRunJob, propriété Context Param).

    Dans le sous job voici à quoi doit ressembler le tMap :
    Nom : tMap.png
Affichages : 556
Taille : 30,1 Ko

    Comme tu peux voir tu récupères pour l'index tous les paramètres qui contiennent les données de ton fichier Excel.

    J'ai oublié de préciser qu'il ne faut utiliser que des liens Main.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    merci c'est plus clair pour moi,

    par contre je n'arrive pas à mettre les paramètres dans mon trunjob, lorsque je veux créer un nouveau paramètre je ne peux mettre qu'une valeur et pas de nom à mon paramètre.
    Il y a une liste vide qui s'ouvre pour le nom.
    dois je déclarer la liste de mes variables quelque part ?


    je te joins une image de mon t_javarow et de mon trunjob

  6. #6
    Membre averti Avatar de bouvda
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 252
    Points : 318
    Points
    318
    Par défaut
    Citation Envoyé par lolotte35
    merci c'est plus clair pour moi,

    par contre je n'arrive pas à mettre les paramètres dans mon trunjob, lorsque je veux créer un nouveau paramètre je ne peux mettre qu'une valeur et pas de nom à mon paramètre.
    Il y a une liste vide qui s'ouvre pour le nom.
    dois je déclarer la liste de mes variables quelque part ?
    En effet, il faut également déclarer les variables dans le contexte du sous job comme tu l'as fait pour le job principal.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    Alors dans mon job principal je déclare les variable dans un t_javarow :
    avec comme code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    context.setProperty('param1',row1.TIERS);

    dans mon sous job je dois aussi ajouter un t_jararow?
    et dedans je dois mettre quoi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    context.getProperty("param1")
    ou alors est ce qu'il faut que je crée un context dans l'onglet context avec toutes mes variables déclarer ?

  8. #8
    Membre averti Avatar de bouvda
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 252
    Points : 318
    Points
    318
    Par défaut
    Citation Envoyé par lolotte35
    ou alors est ce qu'il faut que je crée un context dans l'onglet context avec toutes mes variables déclarer ?
    Oui il faut, dans les 2 jobs, créer un contexte avec toutes les variables.
    Il n' y a pas besoin de tJavaRow dans le sous job, celui dans le job principal est utilisé afin d'affecter les valeurs aux variables.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    alors j'avance pas mal!

    j'ai créé un context avec mes 38 paramètres, j'ai affecté ce context à mon job et mon sous job.

    par contre j'ai une erreur :

    Exception in component tJavaRow_1
    java.lang.NullPointerException
    at java.util.Hashtable.put(Unknown Source)
    at java.util.Properties.setProperty(Unknown Source)
    at infocentre_eurica.tier_distributeur_onetoone.tier_distributeur_onetoone.tFileInputExcel_1Process(tier_distributeur_onetoone.java:571)
    at infocentre_eurica.tier_distributeur_onetoone.tier_distributeur_onetoone.main(tier_distributeur_onetoone.java:829)


    je joins deux image de mon context et des variables de mon t_runjob, peux être verras tu où est l'erreur...

  10. #10
    Membre averti Avatar de bouvda
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 252
    Points : 318
    Points
    318
    Par défaut
    L'erreur est que parfois, une valeur nulle est affectée à un paramètre dans le tJavaRow. Pour éviter que cela ait lieu, il faut éviter d'insérer ces valeurs.
    Je vois 2 solutions :
    - soit remplacer par des chaînes vides les valeurs qui posent problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    context.setProperty('param1',row1.champ1==null?"":row1.champ1);
    - soit éviter d'affecter les valeurs nulles en laissant les paramètres par défaut du contexte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(row1.champ1 != null)
        context.setProperty('param1',row1.champ1);
    if(row1.champ2 != null)
        ...
    [EDIT] la seconde solution n'est pas bonne. Car à chaque enregistrement si une valeur est nulle c'est la valeur de l'enregistrement précédent qui sera de nouveau utilisée.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    ah j'aime bien quand ça change de message d'erreur, ça veut dire que j'avance...

    alors j'ai mis dans le t_javarow la première de tes 2 solutions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    context.setProperty("param1",row1.TIERS==null? " " : row1.TIERS);
    par contre j'ai une nouvelle erreur:

    Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    Syntax error, insert ")" to complete Expression
    Syntax error, insert ")" to complete Expression
    Syntax error, insert ")" to complete Expression

    at infocentre_eurica.tier_distributeur_onetoone.tier_distributeur_onetoone.tFileInputExcel_1Process(tier_distributeur_onetoone.java:583)
    at infocentre_eurica.tier_distributeur_onetoone.tier_distributeur_onetoone.main(tier_distributeur_onetoone.java:823)

    j'ai essayé de mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    context.setProperty("param1",(row1.TIERS==null? " " : row1.TIERS));
    ou alors de remplacer les doubles quote de param1 en simples quote mais rien ne fonctionne...

  12. #12
    Membre averti Avatar de bouvda
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 252
    Points : 318
    Points
    318
    Par défaut
    Il faut bien des double quote, j'avais fait une erreur d'inattention...
    Par contre je viens de créer 2 jobs afin de tester et tout fonctionne.
    Donc il manque probablement une parenthèse quelque part dans le tJavaRow.
    As-tu regardé à la ligne 583 du code pour savoir quelle instruction empêche la compilation ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    je desinstalle et réinstalle mon talend depuis ce matin pour mon problème d'export de job, donc dès que je l'ai réinstallé je regarde la ligne 583.

    dis moi juste pour info, lorsque tu exportes tes jobs, dans le fichier .jar de ton job, est qu'il n'y a qu'un répertoire avec un ficheir MANIFEST.MF ?

  14. #14
    Membre averti Avatar de bouvda
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 252
    Points : 318
    Points
    318
    Par défaut
    Citation Envoyé par lolotte35
    je desinstalle et réinstalle mon talend depuis ce matin pour mon problème d'export de job, donc dès que je l'ai réinstallé je regarde la ligne 583.
    Ok

    Citation Envoyé par lolotte35
    dis moi juste pour info, lorsque tu exportes tes jobs, dans le fichier .jar de ton job, est qu'il n'y a qu'un répertoire avec un ficheir MANIFEST.MF ?
    Ah non ce n'est pas normal tu dois avoir des fichiers .class sinon le job ne s'exécutera jamais. C'est pour cela que tu as l'erreur NoClassDefFound.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    nickel en voulant effacer des espaces, j'avais effacé des parenthèses...
    donc voilà, mes exports de job fonctionne, ce job fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture par octet
    Par eclesia dans le forum Langage
    Réponses: 7
    Dernier message: 19/02/2007, 13h22
  2. lecture par blocs dans un fichier avec marqueur
    Par cheikh_tk dans le forum C
    Réponses: 3
    Dernier message: 06/06/2006, 16h39
  3. Réponses: 3
    Dernier message: 14/04/2006, 09h57
  4. CFile et lecture par ligne d'un fichier ...
    Par basnifo dans le forum MFC
    Réponses: 11
    Dernier message: 10/03/2006, 17h54

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