MERGE Integration Services, packages

S’applique à :SQL Server SSIS Integration Runtime dans Azure Data Factory

Dans la version actuelle de SQL Server Integration Services, l’instruction SQL dans une tâche Execute SQL peut contenir une MERGE instruction. Cette MERGE instruction vous permet d’accomplir plusieurs INSERTUPDATEopérations et DELETE opérations dans une seule instruction.

Pour utiliser l’instruction MERGE dans un package, procédez comme suit :

  • Créez une tâche de flux de données qui charge, transforme et enregistre les données sources dans une table temporaire ou intermédiaire.

  • Créez une tâche Execute SQL qui contient l’instruction MERGE .

  • Connectez la tâche Data Flow à la tâche d’exécution SQL et utilisez les données de la table intermédiaire comme entrée de l’instructionMERGE.

    Remarque

    Bien qu’une instruction MERGE nécessite généralement une table de transit dans ce scénario, les performances de l’instruction MERGE dépassent généralement celles de la recherche ligne par ligne effectuée par la transformation Lookup. MERGE est également utile lorsque la grande taille d’une table de recherche pourrait tester la mémoire mise à la disposition de la transformation de recherche pour mettre en cache sa table de référence.

Utilisation de MERGE

En règle générale, vous utilisez l’instruction MERGE lorsque vous souhaitez appliquer des modifications incluant des insertions, des mises à jour et des suppressions d’une table à une autre table. Avant SQL Server 2008 (10.0.x), ce processus nécessitait à la fois une transformation de recherche et plusieurs transformations de commande OLE DB. La transformation de recherche effectuait une recherche ligne par ligne pour déterminer si chaque ligne était nouvelle ou modifiée. Les transformations de commande OLE DB ont ensuite effectué les opérations INSERT, UPDATE et DELETE nécessaires. À compter de SQL Server 2008 (10.0.x), une seule MERGE instruction peut remplacer la transformation de recherche et les transformations de commande OLE DB correspondantes.

MERGE avec des charges progressives

Les fonctionnalités de capture des changements de données, nouvelles dans SQL Server 2008 (10.0.x), permettent d’effectuer de manière fiable des charges incrémentielles dans un entrepôt de données. En guise d’alternative à l’utilisation des transformations de commande OLE DB paramétrables pour effectuer les insertions et les mises à jour, vous pouvez utiliser l’instruction MERGE pour combiner les deux opérations.

Pour plus d’informations, consultez Appliquer les modifications à la destination.

MERGE dans d’autres scénarios

Dans les scénarios suivants, vous pouvez utiliser l’instruction MERGE en dehors ou à l’intérieur d’un package Integration Services. Toutefois, un package Integration Services est souvent requis pour charger les données à partir de plusieurs sources hétérogènes, puis pour associer et assainir ces données. Par conséquent, vous pouvez envisager d’utiliser l’instruction MERGE dans un package pour faciliter la maintenance et la commodité.

Assurer le suivi des habitudes d'achat

La table FactBuyingHabits incluse dans l'entrepôt de données indique la dernière date à laquelle un client a acheté un produit donné. La table se compose des colonnes ProductID, CustomerID et PurchaseDate. Chaque semaine, la base de données transactionnelle génère une table PurchaseRecords qui inclut les achats effectués pendant la semaine. L’objectif est d’utiliser une instruction unique MERGE pour fusionner les informations de la table PurchaseRecords dans la table FactBuyingHabits. Pour les paires product-customer qui n’existent pas, l’instruction MERGE insère de nouvelles lignes. Pour les paires produit-client qui existent, l’instruction MERGE met à jour la date d’achat la plus récente.

Assurer le suivi de l'historique des prix

La table DimBook représente la liste des livres dans l'inventaire d'un libraire et identifie l'historique des prix de chaque ouvrage. Cette table inclut les colonnes : ISBN, ProductID, Price, Shelf et IsCurrent. Cette table possède également une ligne pour chaque prix que le livre a eu. L'une de ces lignes contient le prix actuel. Pour indiquer la ligne qui contient le prix actuel, la valeur de la colonne IsCurrent est égale à 1 pour cette ligne.

Chaque semaine, la base de données génère une table WeeklyChanges qui contient les modifications des prix pour la semaine et les nouveaux livres qui ont été ajoutés pendant la semaine. À l’aide d’une instruction unique MERGE , vous pouvez appliquer les modifications de la table WeeklyChanges à la table DimBook. L’instruction MERGE insère de nouvelles lignes pour les livres nouvellement ajoutés et met à jour la colonne IsCurrent sur 0 pour les lignes de livres existants dont les prix ont changé. L’instruction MERGE insère également de nouvelles lignes pour les livres dont les prix ont changé et, pour ces nouvelles lignes, définit la valeur de la colonne IsCurrent sur 1.

Fusionner une table avec des données nouvelles par rapport à l'ancienne table

La base de données modélise les propriétés d’un objet en utilisant un « schéma ouvert », ce qui signifie qu’une table contient des paires nom–valeur pour chaque propriété. La table Properties a trois colonnes : EntityID, PropertyID et Value. Une table NewProperties qui est une version plus récente de la table doit être synchronisée avec la table Properties. Pour synchroniser ces deux tables, vous pouvez utiliser une instruction unique MERGE pour effectuer les opérations suivantes :

  • supprimer des propriétés de la table Properties si elles ne figurent pas dans la table NewProperties ;

  • mettre à jour les valeurs des propriétés dans la table Properties avec les nouvelles valeurs présentes dans la table NewProperties ;

  • insérer de nouvelles propriétés pour les propriétés présentes dans la table NewProperties mais qui ne figurent pas dans la table Properties.

Cette approche est utile dans les scénarios qui ressemblent à des scénarios de réplication, où l'objectif est de maintenir la synchronisation entre les données de deux tables sur deux serveurs.

Assurer le suivi du stock

La base de données Inventory possède une table ProductsInventory qui inclut les colonnes ProductID et StockOnHand. Une table Shipments dotée des colonnes ProductID, CustomerID et Quantity établit le suivi des livraisons de produits aux clients. La table ProductInventory doit être mise à jour quotidiennement en fonction des informations de la table Shipments. Une seule MERGE instruction peut réduire l’inventaire dans la table ProductInventory en fonction des expéditions effectuées. Si l’inventaire d’un produit a été réduit à 0, cette MERGE instruction peut également supprimer cette ligne de produit de la table ProductInventory.