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 :

[TDQ 4.1.1] job générique (simuler schéma dynamique)


Sujet :

Développement de jobs

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut [TDQ 4.1.1] job générique (simuler schéma dynamique)
    Bonjour
    Comment parvenir à créer un job générique afin d'insérer dans n tables le contenu de n feuilles excel ?

    Ceci en respectant le fait que les noms et tailles de colonnes sont propres à chaque table (intégrent le nom de la feuille Excel)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE "REF2"."FP_REF_T1" (
            CODE_REF_T1 character varying (1),  
    	LIB_REF_T1 character varying(50), 
    	CONSTRAINT "PK_FP_REF_T1" PRIMARY KEY (CODE_REF_T1)) WITH (OIDS=FALSE);
    --
    CREATE TABLE "REF2"."FP_REF_T2" ( 
    	CODE_REF_T2 character varying (4),  
    	LIB_REF_T2 character varying(10), 
    	CONSTRAINT "PK_FP_REF_T2" PRIMARY KEY (CODE_REF_T2)) WITH (OIDS=FALSE);
    L'exemple de fichier en entrée est en PJ.

    Mon job actuel, fonctionne mais avec les tables créées comme ceci :
    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE "REF2"."FP_REF_T1" (
            CODE_REF character varying ,  
    	LIB_REF character varying, 
    	CONSTRAINT "PK_FP_REF_T1" PRIMARY KEY (CODE_REF)) WITH (OIDS=FALSE);
    --
    CREATE TABLE "REF2"."FP_REF_T2" ( 
    	CODE_REF character varying ,  
    	LIB_REF character varying, 
    	CONSTRAINT "PK_FP_REF_T2" PRIMARY KEY (CODE_REF)) WITH (OIDS=FALSE);

    D'avance merci de votre attention
    msomso
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut
    Bonjour,

    Une solution, qui n'est peut-être pas la meilleure serait d'utiliser un tBaseRow afin de coder une requête du genre insert into MaTable Values('Code', 'Libelle').

    En récupérant les valeurs de MaTable, Code et Libelle des feuilles excel.
    Ainsi il est possible de faire les insert sans spécifier le nom des colonnes.

    Nicolas

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut
    Bonjour
    J'y ai pensé un peu, mais cette solution ne permet pas gérer proprement les rejets/erreurs etc.
    Merci tout de même

    msomso

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut
    Bonjour
    J'avance en effet sur la solution avec tPostgresqlRow.
    Mais, je n'arrive pas à récupérer les erreurs d'insertion effectuées dans ce composant.
    Comment utiliser le lien "Reject" du composant tPostgresqlRow pour diriger la sortie vers un fichier ?
    Merci
    msomso

  5. #5
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par msomso Voir le message
    Comment utiliser le lien "Reject" du composant tPostgresqlRow pour diriger la sortie vers un fichier ?
    Il suffit de rediriger le lien de sortie Rejects du composant tPostgresqlRow vers un composant d'écriture dans un fichier.

    Nicolas

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut
    Non, malheureusement cela génère une erreur :

    Démarrage du job t2 a 08:47 27/01/2011.

    [statistics] connecting to socket on port 3661
    [statistics] connected
    Exception in thread "main" java.lang.Error: Problèmes de compilation non résolus :
    Iterate ne peut pas être résolu
    Iterate ne peut pas être résolu
    Le code java correspondant est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	} catch (Exception e) {
    		whetherReject_tPostgresqlRow_1 = true;
    		err = new errStruct();
    		err.CODE_REF = Iterate.CODE_REF;
    		err.LIB_REF = Iterate.LIB_REF;
    		err.errorMessage = e.getMessage()
    				+ " - Line: "
    				+ tos_count_tPostgresqlRow_1;
    	}
    C'est le problème de schéma, j'ai essayé tIterateToFlow mais sans sucés non plus ...
    Images attachées Images attachées  

  7. #7
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut
    J'ai fait un petit test rapide, et je n'ai pas d'erreur de compilation en utilisant un lien rejet après un lien iterate...

    J'ai regardé le code généré, en fait ça semble poser problème à partir du moment où tu définis un schéma au niveau du tPostgresqlRow.

    A priori, tu n'en as pas besoin. L'ordre sql que tu mets dans le tPostgresqlRow utilise les variables du tFlowToIterate, c'est bien ça ?

    Nicolas

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut
    Bonjour
    sql que tu mets dans le tPostgresqlRow utilise les variables du tFlowToIterate, c'est bien ça ?
    Oui, c'est ça.


    Après avoir supprimé le schema de tPostgresql Row l'erreur est :
    Démarrage du job t2 a 14:23 27/01/2011.

    [statistics] connecting to socket on port 3476
    [statistics] connected
    Exception in component tFileOutputExcel_1
    jxl.read.biff.BiffException: The input file was not found
    at jxl.read.biff.File.<init>(File.java:124)
    at jxl.Workbook.getWorkbook(Workbook.java:221)
    at jxl.Workbook.getWorkbook(Workbook.java:198)
    at rpd1.t2_0_1.t2.tForeach_1Process(t2.java:2621)
    at rpd1.t2_0_1.t2.runJobInTOS(t2.java:3853)
    at rpd1.t2_0_1.t2.main(t2.java:3594)
    Et le lignes: 123,124,125 du code java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (ITERATION != null) {
     
    	this.setProperty("ITERATION", ITERATION.toString());
    Quel est le schéma de fichier de rejets dans ton test ?

    msomso

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut résultat avec tFileOutputDelimited
    Bonjour
    en utilisant tFileOutputDelimited à la place tFileOutputExcel, je n'ai pas d'erreur de compilation/exécution.
    Mais le fichier trace contient juste ceci (cf. png en PJ):
    errorCode|errorMessage
    ""|"ERREUR: la transaction est annulée, les commandes sont ignorées jusqu'à la fin du bloc
    de la transaction - Line: 0"
    Alors que j'ai 6 ordres 'insert' en échec en raison de 'duplicate primary key'.

    Avec quel type de fichier as-tu testé Nicolas ?
    Arrives-tu à traces en détail les rejets (enregistrement et message d'errreur) ?

    msosmo
    Images attachées Images attachées  

  10. #10
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut
    Alors je ne suis pas allé jusqu'à l'exécution, j'avais juste essayé de compiler un job avec un lien iterate suivi d'un tPostgresqlRow avec un lien rejet.

    Mon lien rejet a les mêmes champs que toi :
    errorCode
    errorMessage

    Mais tu peux le compléter en ajoutant un tMap et en récupérant les valeurs qui ont posé problème, de la même façon que tu les as utilisées dans le tPostgresqlRow.

    Sinon, je n'ai effectivement jamais essayé de gérer des rejets sur un tBaseRow... Donc je ne te pourrai pas te garantir que cela fonctionne comme tu le souhaites.

    Nicolas

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut
    Bonjour
    Effectivement avec tMap j'arrive à tracer tous les enregistrements rejetés, mais le fichier doit être en ajout (a cause de "iterate") donc il faut y ajouter date, penser à le purger etc ...

    Est-ce que quelqu'un a testé les schémas dynamiques ?
    Comment ça marche ?

    Merci bien

Discussions similaires

  1. SAS DI 4.2 : Job de job générique
    Par persoonsa dans le forum Outils BI
    Réponses: 0
    Dernier message: 03/08/2011, 09h18
  2. simulation schéma électrique
    Par laurent.t dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 10/05/2010, 23h26
  3. Charger des schémas dynamiquement dans un job Talend
    Par coulio dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 05/04/2010, 00h04
  4. rendre un job générique
    Par f-mory dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 27/11/2009, 13h43

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