Tutoriel pour faire une jointure SSIS avec deux tables SQL Server avec le composant Merge Join.
Le composant SSIS Merge Join permet d’effectuer une jointure pour fusionner deux ou plusieurs sources de données à partir d’une clef commune. Autrement dit, le composant SSIS Merge Join permet de fusionner différentes sources hétérogènes ou non en une seule, par exemple des fichiers plats, des documents XML, des fichiers Excel ou encore des tables SQL Server.
Ce tutoriel SSIS explique comment utiliser le composant SSIS qui permet de fusionner 2 tables sources SQL Server dans une seule table cible. Avec SSIS, que ce soit pour les versions on-premises ou sur Le Cloud Microsoft Azure, le composant est utile pour gérer des tables distinctes et sans utiliser de code T-SQL ou .NET. Merge Join en Anglais, il est appelé Jointure de fusion en Français.
Table of Contents
1. Préparer les tables sources et la table cible avec SSMS
Depuis SSMS, exécuter le code SQL ci-dessous pour créer deux tables sources à fusionner dans une table cible. Les tables sources sont la table des table des ventes : dbo.Sales et la table des clients: dbo.Customers.
1.1 Créer la table source des ventes
La première table source est la table des ventes, elle sera enrichie dans un flux de données SSIS avec les données provenant de la table des clients, le prénom et le nom de famille.
La deuxième table source est celle des clients, qui permet de stocker le numéro de client, le prénom, le nom de famille, la ville et le pays. Elle contient 8 lignes.
-- Créer la table des clients
CREATE TABLE [dbo].[Customers](
[CustomerID] [int] NOT NULL,
[FirstName] [nvarchar](20) NULL,
[LastName] [nvarchar](20) NULL,
[City] [nvarchar](20) NULL,
[Country] [nvarchar](50) NULL,
CONSTRAINT [CustomersPrimaryKeyCustomerID] PRIMARY KEY CLUSTERED ([CustomerID] ASC)
);
GO
-- Insérer 8 lignes à exporter au format XML
INSERT INTO [dbo].[Customers] VALUES (1, N'Ali', N'Ahmed', N'Cairo', N'Egypt');
INSERT INTO [dbo].[Customers] VALUES (2, N'Johnny', N'John', N'Toronto', N'Canada');
INSERT INTO [dbo].[Customers] VALUES (3, N'John', N'Doe', N'Mexico City', N'Mexico');
INSERT INTO [dbo].[Customers] VALUES (4, N'Shu', N'Abbas', N'Paris', N'France');
INSERT INTO [dbo].[Customers] VALUES (5, N'Jeane', N'Raffin', N'Liushutun', N'China');
INSERT INTO [dbo].[Customers] VALUES (6, N'Legra', N'Leate', N'Błaszki', N'Poland');
INSERT INTO [dbo].[Customers] VALUES (7, N'Sullivan', N'Goadby', N'Xiaoguwei', N'China');
INSERT INTO [dbo].[Customers] VALUES (8, N'Tom', N'Ellams', N'Lop Buri', N'Thailand');
-- Créer la table des clients
CREATE TABLE [dbo].[Customers](
[CustomerID] [int] NOT NULL,
[FirstName] [nvarchar](20) NULL,
[LastName] [nvarchar](20) NULL,
[City] [nvarchar](20) NULL,
[Country] [nvarchar](50) NULL,
CONSTRAINT [CustomersPrimaryKeyCustomerID] PRIMARY KEY CLUSTERED ([CustomerID] ASC)
);
GO
-- Insérer 8 lignes à exporter au format XML
INSERT INTO [dbo].[Customers] VALUES (1, N'Ali', N'Ahmed', N'Cairo', N'Egypt');
INSERT INTO [dbo].[Customers] VALUES (2, N'Johnny', N'John', N'Toronto', N'Canada');
INSERT INTO [dbo].[Customers] VALUES (3, N'John', N'Doe', N'Mexico City', N'Mexico');
INSERT INTO [dbo].[Customers] VALUES (4, N'Shu', N'Abbas', N'Paris', N'France');
INSERT INTO [dbo].[Customers] VALUES (5, N'Jeane', N'Raffin', N'Liushutun', N'China');
INSERT INTO [dbo].[Customers] VALUES (6, N'Legra', N'Leate', N'Błaszki', N'Poland');
INSERT INTO [dbo].[Customers] VALUES (7, N'Sullivan', N'Goadby', N'Xiaoguwei', N'China');
INSERT INTO [dbo].[Customers] VALUES (8, N'Tom', N'Ellams', N'Lop Buri', N'Thailand');
1.3 Créer la table cible des ventes enrichie
La table cible est une table des ventes enrichie avec le nom et le prénom des clients : dbo.SalesEnriched. La table enrichie a exactement la même structure avec les deux colonnes suivantes en plus:
Dans un flux de données SSIS, ajouter les composants suivants, puis renommer les composants avec le nom des tables sources et cibles.
2 composants OLE DB Source
Un composant transformation Merge Join
Une destination OLE DB
Ajouter les composants SSIS OLE DB Source, Merge Join et la Destination OLE DB
Choisir la première table source de la jointure SSIS, c’est à dire la table gauche.
Sélectionner la première table source : Sales
De la même manière, sélectionner la deuxième able source, la table des clients.
Choisir la table à droite de la jointure SSIS
Relier enfin les sources à la transformation Merge Join SSIS, la fenêtre apparait alors. Choisir l’entrée gauche pour la table dbo.Sales.
Choisir l’entrée de jointure SSIS gauche pour la table des ventes
2.2 Paramétrer le tri des données sources
Le package affiche une erreur SSIS:
[Merge Join [2]] Error: « Merge Join.Inputs[Merge Join Left Input] » must be sorted. If possible, sort the data at the source and mark the data as sorted by setting the IsSorted and SortKeyPosition properties in the Advanced Editor. Otherwise, add a Sort Transformation to the path before the merge.
Le message est assez explicite, il suffit donc de trier les colonnes de jointure à l’aide des 2 propriétés suivantes, depuis l’éditeur avancé du composant.
IsSorted : pour indiquer que la source est triée.
SortKeyPosition : pour indiquer l’ordre des colonnes utilisées pour le tri.
Répéter ces opérations pour les deux tables sources.
Depuis les composants OLE DB Source:
Faire un clic-droit
Dans l’onglet Input and Output Properties
Sélectionner OLE DB Source Output
Changer la propriété IsSorted à True
Changer la valeur IsSorted dans l’éditeur avancé OLE DB
Toujours depuis l’éditeur avancé SSIS, sélectionner cette fois la colonne utilisée comme clef de jointure, ici c’est CustomerID, et modifier la propriété SortKeyPosition à 1. Dans une jointure avec des colonnes multiples, assigner les mêmes valeurs de tri aux colonnes correspondantes dans les 2 tables sources.
Assigner SortKeyPosition à 1 pour la colonne CustomerID
3. Configurer la jointure avec Merge Join SSIS
Ouvrir le composant de transformation Merge Join et configurer les options comme suit:
Choisir le type de jointure SSIS: Left outer join.
Sélectionner toutes les colonnes sources de la première table.
Sélectionner uniquement le prénom et le nom de famille de la deuxième table.
Configurer la jointure dans le composant SSIS Merge Join
4. Préparer la table cible pour stocker le résultat de la jointure
Configurer le dernier composant du flux de données et le faire pointer sur la table des ventes enrichies.
Choisir la table Sales_Enriched pour stocker le résultat de la jointure SSIS
Vérifier le mapping des colonnes depuis l’onglet Mappings. Les colonnes provenant des 2 tables sources sont bien mappés vers la table cible.
Mapping des données issues de la jointure SSIS à la table des ventes des ventes
5. Exécuter la jointure SSIS et vérifier les données dans la table
Exécuter enfin le package SSIS, Les 44 lignes de données de ventes sont bien intégrées dans la table enrichie sans erreur. Dans ce tutoriel simple, les lignes non enrichies ne sont pas gérées et donc non redirigées.
44 lignes sont intégrées et enrichies
Enfin cliquer sur Visualiser les données depuis le composant OLE DB Destination pour lire la table et vérifier que les deux colonnes sont bien enrichies avec les noms et prénoms des clients.
Les colonnes additionnelles sont bien enrichies par la jointure SSIS
Conclusion sur le composant SSIS Merge Join
La jointure SSIS permet de grouper les données de deux tables sans écrire une seule ligne de code. Le seul prérequis est de trier au préalable les données, directement depuis l’éditeur avancé ou avec le composant de tri.
Comment supprimer une base de données SQL Server avec un script T-SQL ? Comment supprimer une base SQL Server ainsi que tous les fichiers associés, soit les fichiers .mdf, .ndf, .ldf et aussi les fichiers de sauvegardes .bak ? …
Comment importer un fichier Excel dans une base de données SQL Server avec un package SSIS ? Tutoriel pour importer un fichier Excel avec SSIS, soit les données depuis un fichier xslx dans une base de données SQL Server, …
Comment supprimer un fichier Windows directement depuis l’invite de commande MS-DOS ? Pour supprimer un fichier dans Windows cmd, on utilise la commande batch del. La commande delete offre de nombreuses options utiles pour avoir le contrôle du processus …
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Toujours activé
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Soyez le premier à commenter