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 :

[tMap] "jointure" avec éléments absents


Sujet :

Développement de jobs

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 36
    Points : 31
    Points
    31
    Par défaut [tMap] "jointure" avec éléments absents
    Bonjour à tous,

    Je cherche à récupérer les valeurs de deux tables sources pour les insérer dans une table cible.
    Voici le détail de mon tMap.
    Nom : tMap.jpg
Affichages : 785
Taille : 179,3 Ko

    Plutôt simple. Je prends les éléments de row1 vers out et j'ai un Left Outer Join sur la colonne EAN pour matcher avec row2 et j'ajoute les statuts présents dans row2 dans l'output
    Le *hic* est que dans row1, la colonne EAN peut être nulle. Dans ce cas, je voudrais insérer dans les colonnes status de "out" la valeur 0.

    Actuellement, si je laisse comme l'image, j'obtiens l'erreur :
    Exception in component tMap_1
    java.lang.NullPointerException

    Avez vous une idée pour pouvoir bypasser ce cas pour :
    - insérer les éléments de row1 et row2 dans out si la jointure est valide
    - insérer les éléments de row1 et des statuts à 0 si la jointure est mauvaise du fait de l'absence de l'info ean dans row1

    Par avance merci pour votre aide.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    En attendant de savoir si il y a une manière plus propre, je le fais en deux passes :
    - une avec une clause where pour ne prendre que les lignes avec un ean non null et j'active la jointure avec row2
    - une seconde avec ean null sans jointure avec la table row2

    Mais si quelqu'un sait comment faire cela avec un seul tMap, ce serait mieux je pense.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur ETL & BI
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur ETL & BI
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Points : 51
    Points
    51
    Par défaut
    Une piste : une affectation ternaire dans la clé de jointure de ton row2 --> par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Relational.isnull(row1.EAN)?"0":row1.EAN
    Ce qui signifie que si EAN est null, tu récupères "0" comme ID, sinon tu récupères la valeur de l'ID.
    Dans ta table de référence (ici row2) tu ajoutes le cas EstNul définit par l'ID "0", avec les valeurs que tu veux (visiblement "0" dans toutes les colonnes).
    Voir grand, Mais démarrer petit ...

  4. #4
    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
    Option 2 : Tu rends nullable le (row2.ean) dans le schema

    Cette erreur est du au fait qu'il y a des ean qui ne sont pas dans le lookup
    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

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