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 :

Mettre des paramettres de context dans une clause where d'un job qui extrait une table dans un fichier csv.


Sujet :

Développement de jobs

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 11
    Points
    11
    Par défaut Mettre des paramettres de context dans une clause where d'un job qui extrait une table dans un fichier csv.
    j'ai 3 paramètres défini dans un contexte talend. une date, un statut et un numéro d'établissement. Je voudrait appliquer ce filtre en fonction de l'établissement saisi dans le fichier de paramétrage des contexte. Si etablissment = E1 (exemple), alors applique filtre sur date et statut, si <> E1, il extrait toute la table.

    Je voudrais que ça soit le même job pour tous les établissement avec certain qui souhaite n'extraire que certaine donnée...je voudrai que ça soit le même job dont la clause where du sql du job soit paramétrable à la demande.

    Merci pour votre aide.

  2. #2
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 : 795
    Points : 1 685
    Points
    1 685
    Par défaut
    Ta requete est une chaîne de caractère java, tu peux utiliser la concaténation à intérieurement.

    Il faut juste faire attention que la fin de ligne soit bien dans des guillemets car Talend les remplaces par des \n.

    avec ce genre d'expression tu pourras surement faire ton job

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    "Select ...
    From ...
    Where 
    " + ! "E1".equals(context.status) ? "
     status = " + context.status + " AND date < "  + TalendDate.formatDate("yyyyMMdd",context.date)  : "
    1 < 2"
    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

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Merci pour le proposition de solution. Je vais la tester et revenir vers toi.

    Cdt

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    je viens de faire le test mais j'ai l'impression que ma requête n'est pas bonne... requête ci-dessous : est ce qu'il manque quelque chose ou est ce la requête est mal codée?
    -------------
    variables de contexte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    logipren2_filtre_date                       order_set.ordered_date          2018-12-01
    logipren2_filtre_PrescriptionValid          order_set.history_status        VALIDATED
    logipren2_etablissement                     integer                         1   (variable par défaut : mais imaginons que c'est l'établissement dont les données sont filtrées)
    Code : 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
    "SELECT 
      common_order_history.id, 
      common_order_history.label, 
      common_order_history.order_control, 
      common_order_history.order_status, 
      common_order_history.order_validity_status, 
      common_order_history.start_date, 
      common_order_history.start_time, 
      common_order_history.end_date, 
      common_order_history.end_time, 
      common_order_history.urgent, 
      common_order_history.warning, 
      common_order_history.common_order_id, 
      common_order_history.order_set_id, 
      common_order_history.common_order_group_history_id, 
      common_order_history.version, 
      common_order_history.created_date, 
      common_order_history.last_modified_date
    FROM 
    common_order_history
    INNER JOIN order_set ON common_order_history.order_set_id = order_set.id
    INNER JOIN patient ON patient.id = order_set.patient_id
    WHERE 
    " + ! "logipren2_etablissement".equals(context.logipren2_filtre_PrescriptionValide) ? "
    order_set.history_status = " + context.logipren2_filtre_PrescriptionValide + " AND order_set.ordered_date >= " + TalendDate.formatDate("yyyyMMdd",context.logipren2_filtre_date)  : "
    1 > 2"

    voila le message d'erreur :
    Nom : Capture.JPG
Affichages : 294
Taille : 41,3 Ko

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    je viens de faire qq modification mais ça ne fonctionne toujours pas....
    La requête sql :

    Code : 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
    "SELECT 
      common_order_history.id, 
      common_order_history.label, 
      common_order_history.order_control, 
      common_order_history.order_status, 
      common_order_history.order_validity_status, 
      common_order_history.start_date, 
      common_order_history.start_time, 
      common_order_history.end_date, 
      common_order_history.end_time, 
      common_order_history.urgent, 
      common_order_history.warning, 
      common_order_history.common_order_id, 
      common_order_history.order_set_id, 
      common_order_history.common_order_group_history_id, 
      common_order_history.version, 
      common_order_history.created_date, 
      common_order_history.last_modified_date
    FROM 
    common_order_history
    INNER JOIN order_set ON common_order_history.order_set_id = order_set.id
    INNER JOIN patient ON patient.id = order_set.patient_id
    WHERE 
    " + context.logipren2_etablissement_filtre == context.logipren2_etablissement ? "
    order_set.history_status = " + context.logipren2_filtre_PrescriptionValide + " AND order_set.ordered_date >= " + TalendDate.formatDate("yyyyMMdd",context.logipren2_filtre_date)  : "
    1 > 2"
    les contextes en pièces jointes avec nouveau message d'erreur
    Nom : VariableContext.JPG
Affichages : 314
Taille : 36,7 Ko
    Nom : messageErreur.JPG
Affichages : 294
Taille : 38,8 Ko

    Si tu as une idée de la bonne syntaxe ça serait super....

  6. #6
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Bonjour HBA_BO,

    est ce je n'arrive pas a comprendre ce que tu veux faire.

    Est ce que tu peux écrire ta requête directement ?? CAD avec les vrai valeurs, sans utiliser les variables de contexte.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour sovo,

    voila ce que je veux faire dans le composant de la table source....

    Code : 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
    "SELECT 
      common_order_history.id, 
      common_order_history.label, 
      common_order_history.order_control, 
      common_order_history.order_status, 
      common_order_history.order_validity_status, 
      common_order_history.start_date, 
      common_order_history.start_time, 
      common_order_history.end_date, 
      common_order_history.end_time, 
      common_order_history.urgent, 
      common_order_history.warning, 
      common_order_history.common_order_id, 
      common_order_history.order_set_id, 
      common_order_history.common_order_group_history_id, 
      common_order_history.version, 
      common_order_history.created_date, 
      common_order_history.last_modified_date
    FROM 
    logipren_2.common_order_history
    INNER JOIN extraction.temp_order ON common_order_history.order_set_id = temp_order.id
    INNER JOIN logipren_2.patient ON patient.id = temp_order.patient_id
    WHERE 
    temp_order.etablissement = " + ! "temp_order.etablissement.equals (context.logipren2_etablissement)? "
    temp_order.history_status = '" + context.logipren2_filtre_PrescriptionValide + "' and temp_order.ordered_date >= " + TalendDate.formatDate("yyyyMMdd",context.logipren2_filtre_date) : "
    1>2"
    Erreur produite par la requête sous talend :
    Nom : erruer.JPG
Affichages : 316
Taille : 42,2 Ko


    je voudrai variabiliser les contextes pour mutualiser les jobs dont le but est de faire des extractions de tables vers des fichiers csv. En fonction de chaque établissement, certains souhaitent qu'on extrait des données à partir d'une date donnée et à un status donné. D'ou ma question de créer 3 contextes qui sont les suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    logipren2_filtre_date                       order_set.ordered_date          2018-12-01
    logipren2_filtre_PrescriptionValid          order_set.history_status        VALIDATED
    logipren2_etablissement                     integer                         1   (variable par défaut : mais imaginons que c'est l'établissement dont les données sont filtrées)
    il faut qu'à partir de ces contextes je puisse activer ou pas le filtre dans la clause WHERE en fonction des établissements qui demanderont d'extraire des données qu'à partir d'une date données et d'un statut donné. Ces contextes de filtrage de données, je pourrai les modifier une fois dans le fichiers de propriété des contextes une seule fois et non dans tous les jobs...

    dans la requête fourni ci-dessus, j'ai encore des erreurs types java que je n'arrive pas à résoudre...

    Est ce que mon explication t'éclaire sur mon besoin?
    Merci pour ton aide

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    je viens de résoudre partiellement mon problème de requête.... ci dessous la requête ou le code java généré par talend ne détecte pas d'erreur au niveau de la requête

    Code : 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
    "SELECT 
     logipren_2.common_order_history.id, 
     logipren_2.common_order_history.label, 
     logipren_2.common_order_history.order_control, 
     logipren_2.common_order_history.order_status, 
     logipren_2.common_order_history.order_validity_status, 
     logipren_2.common_order_history.start_date, 
     logipren_2.common_order_history.start_time, 
     logipren_2.common_order_history.end_date, 
     logipren_2.common_order_history.end_time, 
    logipren_2. common_order_history.urgent, 
     logipren_2.common_order_history.warning, 
     logipren_2.common_order_history.common_order_id, 
     logipren_2.common_order_history.order_set_id, 
     logipren_2.common_order_history.common_order_group_history_id, 
     logipren_2.common_order_history.version, 
     logipren_2.common_order_history.created_date, 
     logipren_2.common_order_history.last_modified_date
    FROM 
    logipren_2.common_order_history
    INNER JOIN extraction.temp_order ON  logipren_2.common_order_history.order_set_id = extraction.temp_order.id
    INNER JOIN logipren_2.patient ON  logipren_2.patient.id = extraction.temp_order.patient_id
    WHERE 
    extraction.temp_order.etablissement = " +  ! temp_order.etablissement.equals(context.logipren2_etablissement) ? "extraction.temp_order.history_status = ' "
    + context.logipren2_filtre_PrescriptionValide + " ' and extraction.temp_order.ordered_date >= " + TalendDate.formatDate("yyyyMMdd",context.logipren2_filtre_date) :"
    1>=2"


    Par contre maintenant le soucis, il me met le message erreur suivant :

    Nom : erruer.JPG
Affichages : 302
Taille : 39,7 Ko

    et dans le code généré par talend, c'est une ligne vide qu'il souligne...

    Nom : erreur2.JPG
Affichages : 310
Taille : 25,8 Ko

    j'ai l'impression qu'il ne trouve pas la table temp_order ...j'utilise des jointure avec table d'un schéma 1 avec la table temp_order qui est dans un autre schéma....
    serait ce un problème de user talend qui n'arrive pas à lire dans les deux schéma? c'est une idée...
    Merci pour votre aide...

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    j'ai enfin résolu mon soucis en utilisant un case when... voici la requête qui fonctionne dans mon cas qui posait problème

    Code sql : 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
    "SELECT 
     logipren_2.common_order_history.id, 
     logipren_2.common_order_history.label, 
     logipren_2.common_order_history.order_control, 
     logipren_2.common_order_history.order_status, 
     logipren_2.common_order_history.order_validity_status, 
     logipren_2.common_order_history.start_date, 
     logipren_2.common_order_history.start_time, 
     logipren_2.common_order_history.end_date, 
     logipren_2.common_order_history.end_time, 
     logipren_2. common_order_history.urgent, 
     logipren_2.common_order_history.warning, 
     logipren_2.common_order_history.common_order_id, 
     logipren_2.common_order_history.order_set_id, 
     logipren_2.common_order_history.common_order_group_history_id, 
     logipren_2.common_order_history.version, 
     logipren_2.common_order_history.created_date, 
     logipren_2.common_order_history.last_modified_date
    FROM 
    logipren_2.common_order_history
    INNER JOIN extraction.temp_order ON common_order_history.order_set_id = temp_order.id
    INNER JOIN logipren_2.patient ON patient.id = temp_order.patient_id
    WHERE 
    case when temp_order.etablissement != " + context.logipren2_etablissement + " then 2  else temp_order.history_status = '"+ context.logipren2_filtre_PrescriptionValide + "' 
    and temp_order.ordered_date >=" + TalendDate.formatDate("yyyyMMdd",context.logipren2_filtre_date) + " end"

    ça pourra servir à d'autre...
    Merci à bientôt

  10. #10
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    et surtout le ! dans la chaîne de caractères

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

Discussions similaires

  1. script pour convertir une table HTML en fichier CSV (ou excel)
    Par whitespirit dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 20/08/2008, 08h30
  2. [Macro]exporter une table vers un fichier.csv
    Par samca dans le forum IHM
    Réponses: 2
    Dernier message: 24/04/2007, 21h25
  3. Réponses: 1
    Dernier message: 26/01/2007, 08h15
  4. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46

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