SSIS et les UPSERTs

L’UPSERT est une fonctionnalité couramment utilisée dans les ETL à mis chemin entre l’instruction INSERT et UPDATE. Elle consiste à insérer une ligne de données si celle-ci n’existe pas en base, ou sinon à la mettre à jour. Le SQL « officiel », ainsi que SQL Server ne proposent pas d’opérateur dédié à cette opération. Il semblerait que SQL Server 2008 ait ce type d’opérateur en gestation, mais ce n’est pas l’objet de ce post.
Les méthodes de réalisation d’UPSERT font régulièrement l’objet d’analyse sur le web. Après moult lectures, et essais, voici ma méthode, efficace dans la grande majorité des cas.
L’exemple fait référence à mon précédent article sur « SSIS et les mises à jour de masse ».
Le principe est de disposer d’un flux de données réalisant
• l’insertion de masse des lignes adéquates,
• l’insertion en table temporaire des lignes à modifier
Puis une requête SQL pour réaliser la mise à jour par jointure (voir mon article « SSIS et les mises à jour de masse).
Voici le flux de contrôle :
img1.jpg

Voici le flux de données associé :

img2.jpg

On retrouve la « recherche » du nom et prénom. Il est important de noter que la gestion des erreurs de cette recherche est configurée sur « Ignorer l’échec » de la façon suivante:

img3.jpg

Cela signifie que si la recherche de la clé primaire n’aboutie pas, celle-ci est positionnée à la valeur NULL dans le flux de données.
Dès lors, il est possible de départager les lignes à insérer ou à mettre à jour avec un composant de « Fractionnement conditionnel » de la sorte :

img4.jpg


Commentaires

5 réponses à “SSIS et les UPSERTs”

  1. Bonjour,

    Pour le chargement des dimensions, pourquoi ne pas tout simplement utiliser la technique du Slowly changing dimension. IL suffit de déclarer une seule colonne en « Modification » et le tour est joué.

    Reste par contre à savoir comment gérer cela au niveau des faits, mais je pense que l’on peut utiliser le même principe même si normalement il s’agit bien d’un traitement destiné aux dimensions et non aux faits.

    voila !

  2. Merci pour votre remarque. Je vous invite à vous reporter à mon article http://mayeur.com/wordpressfr/?p=21
    Cordialement!

  3. Avatar de Yannick Thiessoz
    Yannick Thiessoz

    Une autre possibilité est montrée dans l’article suivant :
    http://www.clt-services.com/blog/post/Upserts-avec-SSIS.aspx#continue
    sans utilisation du fractionnement conditionnel.
    a+

  4. Woah! I’m really enjoying the template/theme of this website. It’s simple, yet effective. A lot of times it’s hard to get that « perfect balance » between usability and visual appeal. I must say you’ve done a amazing job with this. In addition, the blog loads super fast for me on Internet explorer. Excellent Blog!

  5. […] See SSIS et les mises à jour de masse and SSIS et les UPSERTs […]

Répondre à Nicolas Mayeur Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.