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 :

Différence entre l'opérateur de jointure et la requête SQL


Sujet :

SSIS

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Points : 120
    Points
    120
    Par défaut Différence entre l'opérateur de jointure et la requête SQL
    Bonjour,

    J'ai 2 tables SQL Server issues de différentes transformations SSIS que je souhaite joindre. La première a plus de 2.500.000 enregs et la deuxième 8000.
    Lorsque j'utilise l'opérateur de jointure SSIS j'obtiens 53000 enregs.
    Lorsque je fait une requête SQL (inner join) j'obtiens les 2.500.000 enregs de la première table ce qui est conforme à mes attentes.
    À votre avis, d'où vient la différence entre ces résultats? Y'a t'il un moyen de voir la requête générée par SSIS?

    Merci,
    Jean

  2. #2
    Membre averti Avatar de arnaudvoisin
    Homme Profil pro
    Consultant BI chez WAISSO
    Inscrit en
    Janvier 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant BI chez WAISSO

    Informations forums :
    Inscription : Janvier 2007
    Messages : 156
    Points : 361
    Points
    361
    Par défaut
    Bonjour jpclabaux,

    Tu parles d'une opération de rapprochement via l'opérateur SSIS Merge Join.
    Ce composant nécessite que les 2 flux upstream soient triés. Il est possible que via les propriétés amont tu aies défini les colonnes de jointure du merge en tant que colonne trié ce qui t'a permis d'utiliser le composant alors qu'en réalité les données ne sont pas triées.
    Au final ton opération de jointure ne donne pas le résultat attendu.

    Je commencerais à ta place par vérifier mes tris.

    Arnaud VOISIN
    Consultant BI chez WAISSO | MCITP - SQL SERVER 2008 BI
    http://arnaudvoisin.blogspot.fr/
    http://www.waisso.com/
    Arnaud VOISIN
    Consultant BI chez WAISSO
    * MCITP - SQL SERVER 2008 BI
    * MCSE - SQL SERVER 2012 Business Intelligence
    http://arnaudvoisin.blogspot.fr/
    http://www.waisso.com/

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Points : 120
    Points
    120
    Par défaut
    Bonjour Arnaud,

    Merci de t'intéresser à ma question!
    J'utilise effectivement le Merge Join. Pour m'assurer que les données soient triées de la même manière j'utilise pour chaque table l'opérateur Sort.
    Sais-tu si on peut accéder au code sql généré par ssis?

    Jean

  4. #4
    Membre averti Avatar de arnaudvoisin
    Homme Profil pro
    Consultant BI chez WAISSO
    Inscrit en
    Janvier 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant BI chez WAISSO

    Informations forums :
    Inscription : Janvier 2007
    Messages : 156
    Points : 361
    Points
    361
    Par défaut
    Je pense que pour identifier ton problème de jointure dans ton package, tu devrais poser des dataviewers sur les flux amonts de ton Merge Join afin de comprendre.

    SSIS n'est pas une générateur de code SQL, mais un ETL. Les données sont montées en mémoire dans ce qu'on appelle un pipeline. Les données sont transformées dans cette espace. Je ne pense pas que tu puisses transposer le fonctionnement de ton DataFlow sur le plan d'exécution d'une requête.

    Maintenant si tu veux visualiser les interactions de ton package sur le moteur, tu peux utiliser le Profiler.

    Arnaud VOISIN
    Consultant BI chez WAISSO | MCITP - SQL SERVER 2008 BI
    http://arnaudvoisin.blogspot.fr/
    http://www.waisso.com/
    Arnaud VOISIN
    Consultant BI chez WAISSO
    * MCITP - SQL SERVER 2008 BI
    * MCSE - SQL SERVER 2012 Business Intelligence
    http://arnaudvoisin.blogspot.fr/
    http://www.waisso.com/

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Points : 120
    Points
    120
    Par défaut
    Je vais essayer ça et je te reviens.

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2010
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 304
    Points : 579
    Points
    579
    Par défaut
    Ton merge join est bien configuré en inner join ?

  7. #7
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : BI Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 485
    Points : 2 883
    Points
    2 883
    Par défaut
    Gaffe aussi à la collation: SSIS est case sensitive sur les chaînes, pas SQL en Latin1_CIAS par exemple.
    François JEHL
    BI Engineer | MVP SQL Server
    http://fjehl.wordpress.com
    Pour me contacter, par MP ou ici, mais pas pour des questions techniques.

    /*
    Avant de poster cherchez dans la FAQ et utilisez la fonction "Rechercher" du forum.
    Au moment de poster, posez votre question dans le bon sous-forum (Débuter, SSAS, SSRS, SSIS), en utilisant les TAGs prédéfinis ([2K], [2K5], [2K8], [2K8R2]).
    */

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Points : 120
    Points
    120
    Par défaut
    Salut d.joubert,

    oui c'est bien inner join.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Points : 120
    Points
    120
    Par défaut
    Salut Arnaud,

    Je n'ai pas trouvé d'opérateur DATAVIEWER. Comment faut il l'implémenter?

    Salut François,

    Piste intéressante mais après vérification ne semble pas aboutir.

    C'est à n'y rien comprendre!!!
    Dans ma table DTICKETPRODUCT j'ai le produit 10100A1L, je l'ai également dans ma table PRODUCTMASTER, avec la même casse, mais quand je les joins avec le merge join il ne le trouve pas.
    Si je fais une requête SQL dans management studio ou dans un SQL task dans SSIS ma jointure se fait bien.

    Ça remet fortement en question ma confiance de SSIS.
    Quelqu'un a une idée???

  10. #10
    Membre averti Avatar de arnaudvoisin
    Homme Profil pro
    Consultant BI chez WAISSO
    Inscrit en
    Janvier 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant BI chez WAISSO

    Informations forums :
    Inscription : Janvier 2007
    Messages : 156
    Points : 361
    Points
    361
    Par défaut
    Pour ce qui est du dataviewer, tu peux l'implémenter en cliquant droit sur ta contrainte précédente. Après pour le reste celà me semble assez intuitif.

    Je pense qu'avec nos conseils, sur les tris, sur la collation, sur le type de jointure sélectionné, tu devrais pouvoir venir à bout de ton problème.

    Maintenant si vraiment tu n'y arrives pas tu peux toujours joindre tes données au moment de l'extraction, c'est à dire dans l'OLEDB Source (ou ADO). A ce moment là tu passes en mode SQL Commad et tu y met ta requête.

    L'avantage à cette méthode, c'est que d'une part tu épargnes 2 tri, d'autre part tu vas pouvoir utiliser la puissance du moteur pour joindre des données, notamment grâce aux indexes et statistiques.

    Je ne suis pas un grand fan de la jointure MERGE JOIN, mais dans certain cas elle peut s'avérer nécessaire ou la meilleur méthode.

    Tiens nous au courant de ton avancement, mais le problème ne vient pas de l'outil mais de ton design.

    Arnaud VOISIN
    Consultant BI chez WAISSO | MCITP - SQL SERVER 2008 BI
    http://arnaudvoisin.blogspot.fr/
    http://www.waisso.com/
    Arnaud VOISIN
    Consultant BI chez WAISSO
    * MCITP - SQL SERVER 2008 BI
    * MCSE - SQL SERVER 2012 Business Intelligence
    http://arnaudvoisin.blogspot.fr/
    http://www.waisso.com/

  11. #11
    Membre confirmé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2010
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 304
    Points : 579
    Points
    579
    Par défaut
    Tu n'aurais pas des espaces dans le noms de tes produits par hasard?

  12. #12
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : BI Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 485
    Points : 2 883
    Points
    2 883
    Par défaut
    Sachant (c'est pour vérifier hein) que, rassure moi, tu n'as pas mis les metadata du pipeline à "trié" (IsSorted avec la SortKeyPosition sur la clé de jointure) sans avoir réellement trié dans les sources avec un ORDER BY?
    François JEHL
    BI Engineer | MVP SQL Server
    http://fjehl.wordpress.com
    Pour me contacter, par MP ou ici, mais pas pour des questions techniques.

    /*
    Avant de poster cherchez dans la FAQ et utilisez la fonction "Rechercher" du forum.
    Au moment de poster, posez votre question dans le bon sous-forum (Débuter, SSAS, SSRS, SSIS), en utilisant les TAGs prédéfinis ([2K], [2K5], [2K8], [2K8R2]).
    */

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Points : 120
    Points
    120
    Par défaut
    @François,

    J'ai bien utilisé l'opérateur de tri.

    @David,

    Je vais vérifier

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Points : 120
    Points
    120
    Par défaut
    @David,
    Tu avais raison!!!!
    J'ai créé un champ dérivé en faisant un rtrim sur mon champ de clé et la jointure se fait bien

    Un gros merci à tous pour le temps que vous avez consacré à mon problème.
    Bonne journée,
    Jean

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

Discussions similaires

  1. Différences entre les algorithmes de jointure
    Par kochfet dans le forum Optimisations
    Réponses: 0
    Dernier message: 11/06/2013, 10h18
  2. Différences entre les types de jointures
    Par Age_of_Aquarius dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/04/2013, 03h55
  3. Réponses: 2
    Dernier message: 18/09/2012, 14h14
  4. [AC-2010] Calculer la différence entre deux dates, en jour, dans une requête
    Par Just-Soft dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/10/2010, 02h19
  5. Plusieurs jointures dans une requête sql
    Par Pero dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/09/2005, 20h59

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