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

SSIS Discussion :

[SSIS] [2K8] Lookup update or insert


Sujet :

SSIS

  1. #1
    Membre habitué

    Inscrit en
    Août 2008
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 177
    Points : 125
    Points
    125
    Par défaut [SSIS] [2K8] Lookup update or insert
    Bonjour à tous,

    je débute avec Integration Services et je dois mettre à jour des modifications de dimension dans mon dw.

    Si quelqu'un pouvait m'indiquer la marche à suivre pour monter un "update or insert" à commencer par le nom du lookup en version française 2008...

  2. #2
    Membre éclairé
    Avatar de patriceharel
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 466
    Points : 884
    Points
    884
    Par défaut
    Bonjour,

    En français Lookup c'est Recherche. Sur la version 2008, SSIS simplifie les "upsert". Dans la majorité des cas, il faut rediriger les lignes à insérer vers la sortie "No match output" et les lignes à "mettre à jour" vers la sortie "Match output".

  3. #3
    Membre habitué

    Inscrit en
    Août 2008
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 177
    Points : 125
    Points
    125
    Par défaut
    Merci pour ta réponse,

    cépendant, mes lignes s'insèrent par bloc provoquant des violations de contraintes pour l'insertion.
    Pour la sortie avec correspondance, j'ai aussi une erreur, apparemment la stratégie de "mise à jour" n'est pas définie...

  4. #4
    Membre éclairé
    Avatar de patriceharel
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 466
    Points : 884
    Points
    884
    Par défaut
    Si des violations de contraintes d'intégrités persistent, c'est peut être qu'il manque des lookups?
    En ce qui concerne la mise à jour, plusieurs méthodes existent (et je ne sais pas laquelle tu auras choisi )

  5. #5
    Membre habitué

    Inscrit en
    Août 2008
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 177
    Points : 125
    Points
    125
    Par défaut
    pour être plus clair, j'ai un fichier Excel en entrée,

    je dois alimenter à la volée ma table de fait et une table de dimension dim1
    (avec une clé unique et un attribut).

    Le problème est qu'au premier passage toutes mes lignes vont dans le chemin d'insertion (y compris les redondances de la clé de dim1 sur laquelle je fais ma jointure), ce qui à le mérite d'insérer les nouvelle ligne mais qui provoque des erreurs et l'arrêt du flux.

    Quand je relance le package, toutes les lignes vont dans le chemin de mise à jour, mais là encore, mais là encore j'ai des erreurs de violation de contrainte (alors que je voudrais quelque chose simple comme mettre à jour l'attribut seulement, un truc qui ne plante pas).

    Je cherche donc d'un côté à insérer les lignes une à une, mais même en métant l'option "sans cache" dans la recherche et en mettant des lots de ligne et des tailles d'insertion de 1 dans les sortie OLE-DB ça ne marche pas.

    D'un autre côté à mettre en place une stratégie de "mise à jour" pour l'autre sortie. Est-ce qu'il faut rajouter une "commande OLE DB" ? Si oui, quelle est la syntaxe correcte pour mettre à jour l'attribut ?

  6. #6
    Membre éclairé
    Avatar de patriceharel
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 466
    Points : 884
    Points
    884
    Par défaut
    Tu pourrais déjà faire un data flow pour la dimension et un autre pour la table de fait... ça règlera le problème de redondance dans les lignes, ça permettra d'avoir un contol flow un peu plus clair et ça facilitera l'ajout de nouvelles dimensions en cas de besoin.
    Tu pourras ainsi avoir 2 logiques distinctes d'alimentation entre les dimensions (3 possibilités de gestion des mises à jour : voir SCD) et les faits (annule et remplace, mise à jour ...). Ce qui devrait aussi régler le problème de violation de contrainte dans les mises à jour.
    D'ailleurs en ce qui concerne les mises à jour, à titre personnel j'utilise un OLEDB Command dans 90% des cas. Soit tu tapes la requête directement dans le composant,soit tu passes par une procédure stockée.

  7. #7
    Membre habitué

    Inscrit en
    Août 2008
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 177
    Points : 125
    Points
    125
    Par défaut
    Avec une OLEDB Command il n'y a plus d'erreur lorsqu'il s'agit de mise à jour et qu'il n'y en a pas à faire, mais dès que dois insérer ou modifier les données, ça plante (même si ça inscrit bien les données en base).

    Le message dit qu'il s'agit de contrainte, mais le problème est que les lignes s'insèrent en bloc, il faudrait qu'elles s'insèrent une à une et configurer le control flow pour lire les modifications (j'ai essayer en mode 'readuncommitted' sans succès).

  8. #8
    Membre éclairé
    Avatar de patriceharel
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 466
    Points : 884
    Points
    884
    Par défaut
    Tu pourrais mettre à dispo un screen shot du package au moment de l'insertion et de la mise à jour parce que je ne vois pas ce qui cloche.
    Et je ne comprends pas pourquoi tu souhaites que les lignes soient insérées une à une?

  9. #9
    Membre habitué

    Inscrit en
    Août 2008
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 177
    Points : 125
    Points
    125
    Par défaut
    Voilà 3 screenshots...

    Le fichier en source ne contient qu'une seule valeur à inserer dans la dimension qui se répète 152 fois avec le même attribut.

    Le premier, quand la table est vide, insère bien la donnée.

    Le deuxième, quand je change de valeur un attribut en milieu de liste et que je lance le package une première fois, change la donnée une seule fois (il devrait la rechangée pour revenir à la valeur originale).

    Le troisième, quand après avoir changé la valeur de l'attribut je relance une deuxième fois le package, réinscrit la valeur de début.


  10. #10
    Membre éclairé
    Avatar de patriceharel
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 466
    Points : 884
    Points
    884
    Par défaut
    Plusieurs choses.
    Pourquoi avoir choisi un composant SCD (Dimension changeante)? Un lookup ne suffisait pas?
    L'ID est le même pour les 152 lignes du fichier Excel? Si oui et si tu réutilises la clé primaire du fichier Excel en tant que clé dans la dimension, alors c'est normal que ça plante (unicité de la clé). Il faut faire un Select Distinct dans la requête de sélection des données ou mettre une valeur de clé différente, ou alors supprimer la contrainte de clé primaire dans la base de données. Donc à la fin de la 1ère exécution, une ligne est insérée et le package plante, ce qui est normal.
    Pour le second Screen Shot, tout es normal aussi. Il n'y a qu'une ligne qui a changé donc une seul ligne à mettre à jour (je suppose toujours que l'ID est le même pour toutes les lignes). Cette ligne sera '30' 'titi', on ne reviens donc pas à la valeur 'toto' initiale car les lignes avec 'toto' sont hors de la sélection du composant SCD . Par contre je ne vois pas à quoi sert le OLEDB Destination après le OLEDB Command?
    Pour le 3ème, 151 lignes diffèrent de celle qui est en base (151 'toto' et 1 'titi') donc 151 mises à jour seront réalisées sur une seule et même ligne. On reviens donc avec la valeur toto. Et si tu réexécutes une 4ème fois le package, la valeur repassera à 'titi' et ainsi de suite Et encore une fois, je ne vois pas à quoi sert le OLEDB destinnation de la fin.
    Mais dans tous les cas (et toujours sur l'hypothèse que ID vaut 30 pour toutes tes lignes), une seule ligne sera insérée dans la base.

  11. #11
    Membre habitué

    Inscrit en
    Août 2008
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 177
    Points : 125
    Points
    125
    Par défaut
    En effet, enlever le OLEDB Destination résould le pb 2 et 3.

    Pour le 1er pb un "select distinct" ferait bien l'affaire s'il ne s'agissait pas d'un fichier Excel en entrée, les requêtes générées provoquent une erreur de lecture...
    N'y aurait-il pas une autre solution ?

    Même problème avec un lookup.

  12. #12
    Membre éclairé
    Avatar de patriceharel
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 466
    Points : 884
    Points
    884
    Par défaut
    Je voulais savoir ce que tu entendais par erreur de lecture? Parce que le distinct est possible sur un fichier Excel.

  13. #13
    Membre habitué

    Inscrit en
    Août 2008
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 177
    Points : 125
    Points
    125
    Par défaut
    En fait après redémarrage, ça marche bien. :p

    Merci à toi.

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

Discussions similaires

  1. [SSIS] [2K8] Lookup - Insertion clé primaire duppliquée
    Par maxime.linux dans le forum SSIS
    Réponses: 12
    Dernier message: 15/02/2011, 18h46
  2. [SSIS] [2K8] Utilisation mémoire des lookups
    Par Jinroh77 dans le forum SSIS
    Réponses: 2
    Dernier message: 15/01/2011, 14h44
  3. Réponses: 1
    Dernier message: 06/05/2010, 15h56
  4. Réponses: 3
    Dernier message: 19/03/2010, 23h45
  5. Réponses: 2
    Dernier message: 25/09/2009, 13h12

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