Les gens sont de plus en plus pressés. Ils veulent leurs données presque tout de suite. Et plus encore, les données deviennent de plus en plus volumineuses. Donc, vous ne pouvez pas utiliser de bonnes vieilles techniques parce qu'elles sont "assez bonnes". Il faut que ce soit rapide. Et les étapes ETL ne sont pas une exception. C'est là que la charge incrémentielle entre en jeu. Et si vous êtes sur cette page, vous recherchez probablement une charge incrémentielle dans SSIS.
Et c'est notre objectif dans cet article. Nous allons faire des comparaisons et des exemples pour expliquer étape par étape la charge de données incrémentielle dans SSIS. Et soyez assuré que cela ne vous fera pas craquer la tête.
Voici ce qui vous attend :
- Qu'est-ce qu'un chargement complet et un chargement incrémentiel dans ETL ?
- Qu'est-ce que le chargement de données incrémentiel dans SSIS ?
- Les différences entre le chargement complet et le chargement incrémentiel dans SSIS
- Chargement incrémentiel dans SSIS à l'aide de CDC ou de Change Data Capture
- Chargement incrémentiel dans SSIS à l'aide de colonnes DateTime
- Comment effectuer un chargement incrémentiel dans SSIS à l'aide de Lookup
- Le meilleur outil pour le chargement de données SSIS
Chaque section aura des sous-sections. Vous pouvez accéder directement au sujet dont vous avez besoin en cliquant sur les liens.
Avant de commencer avec les exemples, comparons la charge incrémentielle avec son contraire, la pleine charge.
Qu'est-ce que le chargement complet et le chargement incrémentiel dans ETL ?
Quels que soient les outils ETL que vous utilisez, les chargements complets et incrémentiels ont la même signification. Décrivons-les ci-dessous.
Chargement complet dans ETL
Comme son nom l'indique, Full Load dans ETL charge TOUTES les données de la source à la destination. Une table cible est tronquée avant de tout charger depuis la source. C'est pourquoi cette technique est également connue sous le nom de charge destructrice . Cette technique est également plus simple à réaliser. Et cela garantit également la plus haute intégrité des données. Mais la taille de vos données aujourd'hui est plus importante qu'hier. Donc, si vous l'utilisez sur des données en constante augmentation, le processus deviendra plus lent avec le temps.
Cas d'utilisation du chargement complet ETL
- La taille des données source est petite et n'augmentera pas de manière significative dans les années à venir. Les exemples incluent une liste de couleurs, quelques catégories/classifications, une liste de pays et de villes, et bien d'autres.
- Il est difficile de dire ce qui est nouveau ou modifié dans la source.
- Les données doivent être exactement les mêmes de la source à la destination
- L'historique des données n'est pas pertinent et est écrasé plus souvent
Chargement incrémentiel dans ETL
Pendant ce temps, la charge incrémentielle est également comme son nom l'indique. Seules les données modifiées seront chargées de la source vers la destination. Cela se fait progressivement dans le temps. Ceux qui n'ont pas changé resteront tels quels. C'est un peu difficile à faire. Vous devez vous assurer que toutes les modifications ont été rassemblées et chargées dans la destination. Mais cela fonctionnera plus rapidement que le chargement complet sur des données très volumineuses.
Cas d'utilisation de la charge incrémentielle ETL
- La taille des données est très importante et l'interrogation sera très lente pour les grands ensembles de résultats
- Les modifications sont faciles à interroger
- Les données supprimées doivent être conservées dans la destination, comme un système d'audit
Qu'est-ce que la charge incrémentielle dans SSIS
Les composants de base d'une charge incrémentielle dans SSIS sont illustrés à la figure 1.
Le chargement incrémentiel dans SSIS a tendance à être plus complexe en fonction de vos besoins. Mais la simple « fiche de recette » de la Figure 1 comprend ce dont vous avez besoin pour « cuisiner » les données par incréments. La capture des changements dans les données est la partie la plus difficile. Vous pouvez gâcher la destination si vous ne faites pas attention.
Dans les sections suivantes, vous verrez comment effectuer une charge incrémentielle dans SSIS avec des exemples. Celles-ci incluent l'utilisation de ChangeData Capture (CDC), les colonnes DateTime et les recherches. Vous verrez également comment cela se fait à l'aide des composants Devart SSIS.
Comparons la charge incrémentielle au chargement complet dans SSIS dans la section suivante.
La différence entre la charge complète et la charge incrémentielle dans SSIS
Vous avez déjà vu à quoi ressemble la charge incrémentielle dans SSIS (Figure 1). En attendant, voici comment cela se passe avec le chargement complet SSIS dans la figure 2 ci-dessous.
La différence entre la charge complète et la charge incrémentielle dans SSIS réside dans la conception du package. Une conception à pleine charge nécessite moins de composants glissés dans le package SSIS. C'est si simple qu'il y a peu de réflexion. C'est pourquoi, par fausse impression de productivité, certains développeurs ont tendance à recourir à cette technique la plupart du temps.
Mais l'exécution d'un package de conception à pleine charge chaque nuit n'est pas recommandée pour les données volumineuses, disons 15 To. Pensez-vous qu'il se terminera à temps avant que les utilisateurs n'arrivent le matin ? Cela ne se produira pas parce que vous essayez de réinsérer les enregistrements qui n'ont pas changé du tout. Si cela représente environ 70 % des données, vous avez besoin de plus de temps d'arrêt en fonction des ressources du serveur.
C'est inacceptable.
Ainsi, plus vous devez utiliser la charge incrémentielle sur ces scénarios. Dans les sections suivantes, vous apprendrez à charger des données plus rapidement à l'aide du chargement incrémentiel.
Chargement incrémentiel dans SSIS à l'aide de CDC
Considérons d'abord l'utilisation de Change Data Capture (CDC). Notez qu'à partir d'ici jusqu'aux 3 exemples suivants, nous allons utiliser des exemples simples. Ainsi, la conception de l'emballage ne brouillera pas l'objectif.
Avant de commencer avec l'exemple, cette section couvrira les points suivants :
- Tout d'abord, comment activer CDC dans une base de données et une table
- Ensuite, création du package SSIS pour le chargement incrémentiel SSIS à l'aide de CDC
- Enfin, exécuter et vérifier les résultats
La figure 3 montre les constituants de cet exemple.
Change Data Capture (CDC) enregistre les insertions, les suppressions et les mises à jour dans une table. Avant de pouvoir faire fonctionner cet exemple, vous avez besoin d'une base de données et d'une table configurées pour CDC.
Comment activer CDC dans une base de données et une table
Les paramètres de base de données et de table sont par défaut sans CDC. Pour rendre une base de données compatible CDC, voici la syntaxe T-SQL :
-- point to the database you need to CDC-enable
USE SportsCarSales
GO
-- this will enable CDC to the current database.
EXEC sys.sp_cdc_enable_db
GO
Ensuite, pour vérifier si CDC est bien activé, lancez ceci :
select name from sys.databases
where is_cdc_enabled=1
Si le nom de la base de données que vous avez activée pour CDC apparaît, vous êtes prêt à partir. Votre base de données est désormais compatible CDC.
Mais cela ne s'arrête pas là. Vous devez indiquer quelle table vous souhaitez suivre pour toute modification. La sp_cdc_enable_table fera l'affaire. Voici un exemple de cela.
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'sportsCarSales',
@role_name = NULL,
@supports_net_changes = 1
GO
L'exécution du code ci-dessus devrait entraîner des messages similaires ci-dessous :
Job 'cdc.SportsCarSales_capture' started successfully.
Job 'cdc.SportsCarSales_cleanup' started successfully.
Ces messages sont les 2 nouveaux travaux de l'Agent SQL Server créés après l'activation d'une table pour CDC. C'est pourquoi vous avez besoin de SQL Server Agent pour faire fonctionner CDC. Voir une capture d'écran dans la figure 4.
Faire des insertions, des suppressions et des mises à jour sur sportsCarSales table enregistrera automatiquement les modifications dans une autre table nommée cdc.dbo_sportsCarSales_CT . Ce tableau a des colonnes comme l'original. Voir une capture d'écran dans la figure 5.
L'_$opération colonne du tableau de gauche présente un intérêt particulier. Les valeurs possibles pour cette colonne sont 1 (Supprimer), 2 (Insérer), 3 et 4 (Mettre à jour). La mise à jour utilise 2 valeurs :une pour les valeurs de colonne avant la mise à jour (c'est 3). Et l'autre pour les valeurs de colonne après la mise à jour (c'est 4). Vous pouvez vérifier cette colonne lors de la vérification des valeurs avant d'exécuter votre package SSIS. La CDCSource et répartiteur CDC composants utilisent ce tableau lors de l'identification des modifications. Plus d'informations à ce sujet dans la section suivante.
Création du package SSIS pour la charge incrémentielle SSIS à l'aide de CDC
Voici les étapes de création du package SSIS avec chargement incrémentiel à l'aide de CDC. Cela suppose que vous avez déjà un blankpackage dans Visual Studio 2019. Notre objectif ici est de charger les lignes de sportsCarSales tabledans le FactSportsCarSales table de faits dans un entrepôt de données.
Voici le résumé des étapes :
ÉTAPE 1. Créer 2 gestionnaires de connexion à la base de données
ÉTAPE 2. Faites glisser 2 tâches de contrôle CDC vers le flux de contrôle
ÉTAPE 3. Faites glisser une tâche de flux de données et connectez-vous à la tâche de contrôle CDC
ÉTAPE #1. Créer 2 gestionnaires de connexion à la base de données
Nous avons besoin de 2 connexions à la base de données ici. L'une est la connexion ADO.Net qui doit pointer vers la base de données compatible CDC. Ensuite, créez une connexion OLE DB à un entrepôt de données comme destination. Les deux sont des bases de données SQL Server 2019. Voir les figures 6 et 7 en conséquence. Dans cet exemple, les deux bases de données se trouvent sur la même machine. Et nous utilisons l'authentification Windows pour nous connecter.
Ainsi, dans les Gestionnaires de connexion fenêtre, faites un clic droit et sélectionnez Nouvelle connexion ADO.Net . Ensuite, renseignez les paramètres du serveur, de l'authentification et de la base de données comme illustré à la figure 6 ci-dessous.
Ensuite, créez une connexion OLE DB à l'entrepôt de données. Dans la fenêtre Gestionnaire de connexions, cliquez avec le bouton droit de la souris et sélectionnez Nouvelle connexion OLE DB . Ensuite, remplissez le serveur, l'authentification et le nom de la base de données. Spécifiez l'entrepôt de données ici.
ÉTAPE #2. Faites glisser 2 tâches de contrôle CDC vers le flux de contrôle
Il y a 2 choses que nous devons faire après avoir fait glisser une tâche de contrôle CDC dans le flux de contrôle.
Marquer le début du CDC
Tout d'abord, nous devons configurer la tâche de contrôle CDC pour marquer le démarrage du CDC. Et ensuite, créez une table d'état CDC. Cela peut être fait dans une fenêtre de configuration. Voir Figure 8 ci-dessous.
En suivant les étapes numérotées de la figure 9, voici les détails.
- Sélectionnez la connexion ADO.Net que nous avons créée dans la figure 6.
- Ensuite, sélectionnez Marquer le démarrage du CDC .
- Cliquez sur Nouveau pour créer une variable d'état CDC. Ensuite, une fenêtre apparaîtra. Cliquez sur OK pour créer le nom de variable par défaut User::CDC_State .
- Sélectionnez la connexion ADO.Net afin que nous puissions stocker l'état CDC dans cette base de données.
- Cliquez sur Nouveau pour créer une table pour stocker l'état. Le script est déjà créé pour vous. Alors, cliquez simplement sur Exécuter sur la fenêtre suivante.
- Ensuite, sélectionnez CDC_State comme nom d'état.
- Enfin, cliquez sur OK .
Après avoir configuré cette tâche de contrôle CDC, exécutez le package. Vous ne verrez pas encore les enregistrements copiés dans l'autre base de données. Mais la table d'état (dbo.cdc_state ) sera rempli avec les valeurs initiales.
À partir de là, vous pouvez choisir de désactiver cette tâche de contrôle CDC ou de la remplacer à nouveau par de nouvelles valeurs dans la tâche suivante.
Obtenir la plage de traitement
Soit vous faites glisser une nouvelle tâche de contrôle CDC vers le flux de contrôle, soit vous écrasez la précédente. La configuration est la même que celle de la Figure 9, à l'exception du fonctionnement de la commande CDC (#2). Cette fois, sélectionnez Obtenir la plage de traitement . Ensuite, cliquez sur OK . Connectez-le à la tâche de flux de données à l'ÉTAPE 3 plus tard.
Marquer la plage traitée
Configurez l'autre tâche de contrôle CDC comme la première, sauf que cette fois, sélectionnez Marquer la plage traitée pour l'opération de contrôle CDC. Connectez-y la tâche de flux de données de l'ÉTAPE 3.
Étape 3. Faites glisser une tâche de flux de données et connectez-vous à la tâche CDCControl
Cette tâche de flux de données effectuera l'extraction et le chargement comme illustré à la figure 3 plus tôt. Avant de nous plonger dans les détails de chaque étape, voici un résumé :
A. Ajouter une source CDC
B. Ajoutez un séparateur CDC et connectez-le à la source CDC
C. Ajouter une commande OLE DB pour supprimer des enregistrements
D. Ajouter une destination OLE DB pour insérer des enregistrements
E. Ajouter une autre commande OLE DB pour mettre à jour les enregistrements
Maintenant, allons-y.
A. Ajouter une source CDC
Faites glisser une source CDC composant avec les paramètres indiqués dans la figure 9 ci-dessous.
En suivant les étapes numérotées de la figure 9, voici les détails :
- Tout d'abord, sélectionnez la connexion ADO.Net que nous avons créée dans la figure 6.
- Ensuite, sélectionnez la table compatible CDC sportsCarSales .
- Sélectionnez l'instance de capture dbo_SportsCarSales .
- Ensuite, sélectionnez Net pour le mode de traitement CDC. Cela ne renverra que les modifications nettes. Pour une description détaillée de chaque mode de traitement, consultez ce lien. Vous pouvez également cliquer sur Aperçu pour voir quelles lignes seront incluses.
- Sélectionnez la variable d'état CDC que nous avons créée précédemment (Figure 9).
- Enfin, cliquez sur OK .
B. Ajoutez un séparateur CDC et connectez-le à la source CDC
La seule exigence d'un répartiteur CDC est une source CDC le précédant. Alors, connectez la source CDC plus tôt à ce composant. Cela séparera les modifications apportées aux insertions, aux mises à jour et aux suppressions.
C. Ajouter une commande OLE DB pour supprimer des enregistrements
Tout d'abord, vous devez étiqueter ce composant comme Supprimer les enregistrements (voir la figure 3). Ensuite, connectez-le au répartiteur CDC. Lorsqu'une invite apparaît, sélectionnez Supprimer la sortie pour la sortie et cliquez sur OK .
Ensuite, configurez la commande OLE DB Gestionnaires de connexion languette. Voir Figure 10.
Ensuite, dans les Propriétés du composant , spécifiez la commande DELETE pour la SQLCommand biens. La commande devrait ressembler à ceci :
DELETE FROM FactSportsCarSales
WHERE SalesID = ?
Voir une capture d'écran dans la figure 11 ci-dessous.
Le point d'interrogation créera un paramètre pour SalesID . Chaque SalesID valeur provenant du CDCSplitter sera utilisé pour supprimer des lignes dans FactSportsCarSales tableau.
Ensuite, dans les mappages de colonnes , mappez le SalesID colonne du tableau au paramètre (Param_0 ) Voir Figure 12.
Enfin, cliquez sur OK.
D. Ajouter une destination OLE DB pour insérer des enregistrements
Tout d'abord, faites glisser une destination OLE DB . Ensuite, étiquetez-le Insérer des enregistrements . Connectez-le au répartiteur CDC . Ensuite, sélectionnez InsertOutput lorsqu'une invite de fenêtre apparaît. Voir Figure 14 pour les paramètres de base.
En suivant les étapes numérotées de la figure 13, voici les détails :
- Tout d'abord, sélectionnez la connexion OLE DB que nous avons créée à la figure 7.
Ensuite, sélectionnez le FactSportsCarSales table de faits. - Enfin, cliquez sur OK .
E. Ajouter une commande OLE DB pour mettre à jour les enregistrements
Faites glisser une autre commande OLE DB et étiquetez-le Mettre à jour les enregistrements. Ensuite, connectez-le au répartiteur CDC . Il choisira automatiquement le UpdateOutput production. Les gestionnaires de connexion le paramètre de tabulation doit être le même que dans la figure 11.
Mais le Propriétés du composantSQLCommand devrait avoir une valeur comme celle-ci :
UPDATE [dbo].[FactSportsCarSales]
SET [ClientID] = ?
,[SportsCarID] = ?
,[PurchaseDate] = ?
,[Quantity] = ?
,[UnitPrice] = ?
WHERE [SalesID]= ?
Le nombre de points d'interrogation dans le code ci-dessus vous indiquera combien de paramètres utiliser à partir de Param_0 .La position des paramètres de Param_0 à Param_5 est organisé en fonction de leur place dans le code. Donc, Param_0 est pour ClientID , Param_1 est pour SportsCarID , et ainsi de suite.
Consultez les mappages de colonnes dans la Figure 15.
Après avoir configuré CDC au niveau de la base de données et de la table, le moyen de tester si CDC fonctionne consiste à ajouter et à modifier des lignes. Alors, ajoutons quelques enregistrements à la table.
USE SportsCarSales
GO
INSERT INTO SportsCarSales (ClientID, SportsCarID, PurchaseDate, Quantity, UnitPrice)
VALUES (1, 1920, '02/03/2022', 1, 845000.0000),
(5, 1920, '01/22/2022', 1, 845000.0000),
(54, 1920, '01/15/2022', 1, 845000.0000),
(62, 1920, '02/04/2022', 1, 845000.0000);
GO
Pour voir si cela est enregistré dans CDC, interrogez le cdc.dbo_sportsCarSales_CT tableau.
SELECT * FROM cdc.dbo_sportsCarSales_CT;
Vérifiez les résultats dans la capture de données modifiées après la commande INSERT dans la figure 15.
Donc, il a enregistré les inserts. C'est bien.
Maintenant, essayez d'exécuter le package SSIS plus tôt. Le résultat devrait être identique à la figure 16 ci-dessous.
Figure 16 . Résultat d'exécution du package SSIS pour un chargement incrémentiel à l'aide de CDC.
Et enfin, interroger les résultats dans FactSportsCarSales table révèle le même ensemble de 4 enregistrements.
Chargement incrémentiel dans SSIS à l'aide de colonnes DateTime
La charge incrémentielle dans SSIS à l'aide de colonnes DateTime est un autre moyen de collecter des données par incréments. S'il vous arrive de faire ETL dans une table sans CDC, c'est votre prochaine option.
La table source peut avoir un Modifié ou Dernière mise à jour colonne comme celle de la figure 17.
Interroger les changements, c'est connaître le maximum de Modifiés valeur de colonne de la destination. Ensuite, interrogez tous les enregistrements de la source qui ont plus de Modifié valeur de colonne de la destination.
Les ingrédients typiques de cette technique sont illustrés à la figure 18.
Veuillez suivre les instructions sur la façon de cuire ce type de charge supplémentaire. Voici les sous-rubriques de cette section :
- Création du package pour effectuer un chargement incrémentiel SSIS avec des colonnes DateTime
- Résultats d'exécution du package
Création du package pour effectuer un chargement incrémentiel SSIS avec des colonnes DateTime
Notre objectif est de charger les SportsCars table dans dimSportsCars table de dimension dans une autre base de données. Voici un résumé des étapes :
ÉTAPE 1. Créer 2 gestionnaires de connexion OLE DB
ÉTAPE 2. Créer 2 variables de package
ÉTAPE 3. Ajouter une Tâche d'exécution SQL dans le flux de contrôle
ÉTAPE 4. Ajouter une tâche de flux de données
Commençons.
ÉTAPE #1. Créer 2 gestionnaires de connexion OLE DB
La première connexion OLE DB provient d'une base de données transactionnelle. Et les paramètres sont simples, comme le montre la figure 19.
Ensuite, créez une autre connexion OLE DB à l'entrepôt de données. Cela devrait être le même que dans la figure 7.
ÉTAPE #2. Créer 2 variables de package
La première variable contiendra la date de la dernière modification de dimSportsCars tableau des dimensions. Ensuite, le second contiendra la requête SQL personnalisée.
A. Créez la variable User::sportsCars_lastUpdate
- Dans les Variables fenêtre, cliquez sur Ajouter une variable .
- Nommez-le sportsCars_lastupdate .
- Définissez le type de données sur DateHeure .
B. Créez l'utilisateur ::variable sqlCommand
- Dans les Variables fenêtre, cliquez sur Ajouter une variable .
- Nommez-le sqlCommand .
- Définissez le type sur Chaîne .
- Cliquez sur le bouton points de suspension pour créer l'expression . Voir la figure 21 pour le créateur d'expression fenêtre et l'expression de chaîne réelle.
- Cliquez sur OK .
La chaîne SQL devrait ressembler à ceci :
"SELECT SportsCarID, StyleID, ManufacturerID, Model, UnitPrice, created, modified
FROM sportsCars
WHERE modified > '" + (DT_WSTR, 50) @[User::sportsCars_lastupdate] + "'
ORDER BY SportsCarID;"
Notez que nous définissons la clause WHERE sur Modifié supérieur à User::sportsCars_lastupdate .
Il y aura plus de détails sur la définition des 2 variables dans les étapes suivantes.
ÉTAPE #3. Ajouter une tâche d'exécution SQL dans le flux de contrôle
Cette tâche interrogera la table de destination pour obtenir le dernier Modifié valeur de date. Faites glisser une exécution de tâche SQL au flux de contrôle. Ensuite, étiquetez-le Get Last Modified Date from DW . Ensuite, consultez les paramètres de la Figure 21.
Les propriétés importantes à définir ici sont la Connexion , instruction SQL , et ResultSet propriétés.
Définir la Connexion propriété à la deuxième connexion OLE DB définie à l'ÉTAPE #1. Ensuite, définissez le SQLStatement propriété au code ci-dessous.
select max(modified) as LastUpdate from dimSportsCars
Ensuite, définissez le ResultSet propriété à une ligne unique .
Enfin, vous devez mapper la LastUpdate alias de colonne (voir code ci-dessus) à User::sportsCars_lastupdate variable. Voir une capture d'écran dans la Figure 22.
Enfin, cliquez sur OK pour enregistrer les nouveaux paramètres.
ÉTAPE #4. Ajouter une tâche de flux de données
Faites glisser une tâche de flux de données au flux de contrôle et connectez la Tâche d'exécution SQL à elle. Ensuite, étiquetez la tâche de flux de données Mettre à jour la dimension dimSportsCars . Ensuite, suivez les étapes pour ajouter des composants à la tâche de flux de données .
La tâche de flux de données comporte plusieurs étapes :
A. Ajouter une source OLE DB
B. Ajouter une transformation de recherche pour comparer la source à la destination
C. Ajouter une commande OLE DB pour mettre à jour les enregistrements
D. Ajouter une destination OLE DB pour insérer des enregistrements
Maintenant, commençons.
A. Ajouter une source OLE DB
Cette source OLE DB interrogera la table source pour les enregistrements modifiés. Voir les paramètres de la Figure 23.
Après les chiffres de la Figure 23, voici les détails :
- Premièrement, spécifiez la connexion OLE DB que nous avons créée. Voir Figure 20.
- Ensuite, définissez le mode d'accès aux données à la commande SQL de la variable .
- Ensuite, sélectionnez la variable User::sqlCommand que nous avons créée précédemment. Voir Figure 21.
- Enfin, cliquez sur OK .
B. Ajouter une transformation de recherche pour comparer la source à la destination
Maintenant, nous devons avoir un moyen de comparer les tables source et destination. Nous pouvons utiliser la recherche Composant de transformation pour ce faire. Cela effectuera une jointure entre les 2 tables.
Alors, faites glisser une recherche Transformation dans le flux de données et nommez-la Classifier la modification . Ensuite, connectez-le à la source OLE DB plus tôt. Double-cliquez dessus. Voir Figure 24 pour configurer le Général page.
Définissez le menu déroulant sur Rediriger les lignes vers une sortie sans correspondance comme le montre la figure 24. Cela signifie que nous allons utiliser les lignes qui n'ont pas de correspondance. Et dans ce cas, c'est pour détecter les lignes présentes dans la source mais pas dans la destination.
Ensuite, cliquez sur Connexion page dans le volet gauche de l'éditeur de transformation de recherche . Ensuite, reportez-vous à la Figure 25 pour savoir quoi définir.
Dans la figure 26, vous devez spécifier la connexion OLE DB pour la table cible. (Voir Figure 7). Et ensuite, définissez la requête SQL sur le code ci-dessous.
SELECT SportsCarID from dimSportsCars
Nous n'avons besoin que du SportsCarID colonne à comparer, nous avons donc utilisé une requête au lieu de toute la table.
Ensuite, cliquez sur les Colonnes page pour définir le mappage de la colonne de clé de requête source à la destination. Voir Figure 26 pour le mappage.
Comme le montre la figure 26, il devrait y avoir une ligne de la source à la destination en utilisant le SportsCarID colonne clé. Les deux colonnes clés seront utilisées pour la comparaison.
Enfin, cliquez sur OK .
C. Ajouter une commande OLE DB pour mettre à jour les enregistrements
Cette partie mettra à jour les enregistrements qui correspondent à SportsCarID valeurs clés de la recherche Transformation.
Faites donc glisser une commande OLE DB dans le flux de données et nommez-le Update dimSportsCars . Ensuite, connectez-le à la Recherche Transformation plus tôt. Lorsqu'une invite apparaît, définissez la Sortie à Lookup Match Output . Ensuite, cliquez sur OK .
Double-cliquez sur la commande OLE DB et définissez les propriétés dans les Gestionnaires de connexion languette. Voir Figure 27.
La figure 27 montre que vous devez définir le Gestionnaire de connexion à la base de données cible (voir Figure 8). Ensuite, cliquez sur Propriétés du composant languette. Voir Figure 28 pour les paramètres de propriété.
La propriété SQLCommand est définie sur :
UPDATE dimSportsCars
SET StyleID = ?, ManufacturerID = ? , MODEL = ? , UnitPrice = ? , modified = ?
WHERE SportsCarID = ?
Nous avons déjà fait quelque chose de similaire plus tôt. Les points d'interrogation sont des paramètres fictifs. Et si nous mappons la bonne colonne source, la colonne cible correspondante sera définie. Voir les mappages de la Figure 29.
Enfin, cliquez sur OK .
D. Ajouter une destination OLE DB pour insérer des enregistrements
Cette partie insérera de nouveaux enregistrements trouvés dans les SportsCars tableau dans dimSportsCars table de dimension.
Faites donc glisser une destination OLE DB composant et nommez-le Insert New Records in dimSportsCars. Double-cliquez dessus et définissez la connexion et la table cible. Voir Figure 30.
Comme illustré à la Figure 30, définissez la connexion à l'entrepôt de données (Figure 8) et sélectionnez dimSportsCars tableau des dimensions.
Ensuite, cliquez sur Mappings pagepour voir si les colonnes sont mappées en conséquence. Étant donné que les noms de colonne sont les mêmes dans la source et la cible, ils seront mappés automatiquement.
Enfin, cliquez sur OK .
Résultats d'exécution du package
Maintenant que le package est terminé, voici une capture d'écran du résultat dans la figure 31.
Le processus a mis à jour 8 lignes et inséré 1 nouvelle ligne dans dimSportsCars tableau des dimensions.
Chargement incrémentiel dans SSIS à l'aide de la recherche
Une autre méthode pour effectuer un chargement incrémentiel consiste à comparer la source à la cible pour voir ce qui doit être inséré, mis à jour et supprimé. Et c'est votre option s'il n'y a pas de colonne DateTime et pas de CDCon les deux tables. Une façon de le faire est d'utiliser Recherche Transformation.
Les ingrédients typiques de cette approche sont illustrés à la figure 32.
Notez que l'approche simple de la Figure 32 s'applique aux tables qui n'autorisent pas les suppressions définitives. Si des suppressions doivent être gérées, une jointure par fusion utilisant une jointure complète peut être applicable.
Il y a 2 sous-rubriques pour cette section :
Création du package SSIS pour la charge incrémentielle SSIS à l'aide de Lookup
Résultats d'exécution du package
Plongeons-y.
Création du package SSIS pour la charge incrémentielle SSIS à l'aide de la recherche
Notre objectif ici est de charger les lignes des Fabricants table dans les dimManufacturers table de dimension.
Cela suppose que vous avez un package SSIS vierge prêt.
Voici le résumé des étapes :
ÉTAPE 1. Créer 2 connexions OLE DB
ÉTAPE 2. Ajouter une tâche de flux de données
Commençons par l'exemple.
ÉTAPE #1. Créer 2 connexions OLE DB
Vous pouvez vous référer à la Figure 19 pour la source et à la Figure 7 pour la cible. Nous utilisons les mêmes gestionnaires de connexion ici.
ÉTAPE #2. Ajouter une tâche de flux de données
Faites glisser une tâche de flux de données dans le flux de contrôle et nommez-le Update Manufacturers Dimension Table. Double-cliquez dessus et suivez les étapes suivantes. Les étapes de la tâche de flux de données sont résumées ci-dessous. .
A. Ajouter une source OLE DB
B. Ajouter une recherche Transformation pour rechercher de nouveaux enregistrements
C. Ajouter une destination OLE DB pour insérer des enregistrements.
D. Ajouter une autre recherche Transformation pour rechercher les modifications
E. Ajouter une commande OLE DB pour mettre à jour la table cible
A. Ajouter une source OLE DB
Faites glisser une source OLE DB et étiquetez-le Fabricants . Définir le Gestionnaire de connexion comme le montre la Figure 33.
B. Ajouter une transformation de recherche pour rechercher de nouveaux enregistrements
Cette recherche La transformation recherchera les enregistrements qui n'existent pas dans la cible en fonction de l'ID du fabricant colonne clé. Et toutes les lignes non correspondantes sont candidates à l'insertion de tableau.
Faites glisser une recherche transformationet nommez-le Rechercher dimManufacturers. Ensuite, double-cliquez dessus.
Les paramètres de Général La page doit être la même que dans la Figure 24. Pendant ce temps, définissez la connexion à l'entrepôt de données et utilisez une requête pour les Connexions paramètres de la page. Voir Figure 34.
C. Ajouter une destination OLE DB pour insérer des enregistrements
Faites glisser une destination OLE DB et nommez-le Insérer de nouveaux enregistrements. Connectez-le à la recherche Transformation et sélectionnez Lookup No Match Output lorsqu'une invite apparaît. Double-cliquez dessus et définissez la connexion et la table cible comme illustré à la figure 35.
Les tables source et cible ont les mêmes noms de colonne et elles seront mappées automatiquement. Voir Figure 36.
Enfin, cliquez sur OK .
D. Ajouter une autre transformation de recherche pour rechercher les modifications
Contrairement à la précédente recherche Transformation, celui-ci recherchera les changements dans le Fabricant colonne. Et s'il y a des changements, ce sera un candidat pour la mise à jour de la table.
Faites glisser une autre recherche Transformez-la et nommez-la Rechercher les enregistrements qui ont changé. Connectez-le à la première recherche Transformation. Le Général La page pour cette recherche doit être la même que dans la Figure 24.
Pendant ce temps, la Connexion la page doit ressembler à la figure 37 ci-dessous.
Pendant ce temps, notez les mappages de la figure 38.
La figure 38 montre les mappages via Fabricant Nom. Si ce n'est pas égal, il y a un changement dans la source. Et il doit être copié dans la cible.
E. Ajouter une commande OLE DB pour mettre à jour la table cible
Les paramètres doivent être les mêmes que dans la Figure 29, à l'exception de SQLCommand . La commande UPDATE devrait ressembler à ceci :
UPDATE dimManufacturers
set manufacturer = ?
where manufacturerID = ?
Ajustez les mappages de colonnes aux paramètres en conséquence.
Résultats d'exécution du package
Fait? Ensuite, exécutez le package. Vous verrez les résultats d'exécution identiques à ceux de la Figure 39.
Le meilleur outil pour le chargement de données SSIS
Tous les exemples que nous avions précédemment utilisent les composants prêts à l'emploi fournis par Microsoft. Bien que cela suffise pour certains projets, que se passe-t-il si vous devez intégrer à la fois des sources cloud et de base de données via SSIS ?
C'est là que les composants Devart SSIS entrent en jeu. Ces composants SSIS sont pratiques à utiliser. Et ils offrent un chargement de données hautes performances à l'aide d'optimisations spécifiques à la source de données et d'une mise en cache avancée. Ils ont également plus de 40 sources de données, y compris les favoris RDBMS comme MySQL, PostgreSQL et Oracle. Sont également inclus des services cloud tels que Salesforce, HubSpot, Google Analytics et bien plus encore. Il vaut donc la peine d'essayer de charger des millions d'enregistrements dans SSIS à l'aide des composants Devart SSIS.
Pourquoi pas un exemple ?
Utilisation des composants Devart SSIS pour effectuer un chargement incrémentiel
Essayons de répliquer les dimManufacturers table dans MySQL et utilisez la recherche de Devart et Destination composants pour MySQL. La recette est illustrée à la Figure 40.
Commençons par ajouter un nouveau package SSIS à votre projet Visual Studio Integration Services. Ensuite, ajoutez une Data FlowTask et double-cliquez dessus. Ensuite, suivez les étapes ci-dessous.
Avant cela, voici un résumé des étapes :
ÉTAPE 1. Ajouter une source OLE DB
ÉTAPE 2. Ajouter un Gestionnaire de connexions Devart MySQL
ÉTAPE 3. Ajouter une recherche Devart MySQL rechercher de nouveaux enregistrements
ÉTAPE 4. Ajouter une autre recherche Devart MySQL Transformation pour analyser les modifications
ÉTAPE #5. Ajouter une destination Devart MySQL pour insérer des enregistrements
ÉTAPE #6. Ajouter une autre destination Devart MySQL to update records
STEP #1. Add an OLE DB Source
This will connect to the SQL Server database we had earlier. Please refer to Figure 8. Then, set the table to dimManufacturers .
STEP #2. Add a Devart MySQL Connection Manager
We need this connection for the destination database and table. So, in the Connection Managers window, right-click and select New Connection . Then, select the DevartMySQL Connection Manager type. Then, configure the database access as shown in Figure 41. Notice the simpler interface to connect. Though you can go to the Advanced tab and see more properties there.
I’m running MySQL 8 in my local machine and there’s a copy of the same database in SQL Server, but the rows are older.
STEP #3. Add a Devart MySQL Lookup Transformation to Scanfor New Records
Drag a Devart MySQL Lookup and name it Compare Source to Target . Then, connect it to the Devart MySQL Connection Manager earlier. Now, follow the configuration in Figure 42.
Following the numbers in Figure 42, the following are the details:
- First, select the Devart MySQL Connection Manager created in STEP #2.
- Then, select the dimmanufacturers table.
- In Lookup Columns , mark checked the ManufacturerID column.
- Then, in Input Columns , select ManufacturerID .
- Then, select ManufacturerID in Reference Columns .
- Finally, click OK .
NOTE :If you encounter a duplicate name error, go to Advanced Editor. And then, click Input and Output Properties . Rename either the Input or Output Column to a different name.
STEP #4. Add another Devart MySQL Lookup Transformation toScan for Changes
This second MySQL Lookup will scan forrecords that changed.
Drag another Devart MySQL Lookup andlabel it Get Records that Changed. Connect it to thefirst Devart MySQL Lookup . Then, choose Lookup Match Output .
The setup is the same as in Figure 42. But choose the Manufacturer column instead of ManufacturerID . Do this for Lookup Columns , Input Columns , and Reference Columns .
STEP #5. Add a Devart MySQL Destination to Insert Records
This step will insert records from thesource that have no match in the target.
So, drag a Devart MySQL Destination and label it Insert New Records. Connect it to the first Devart MySQL Lookup . Double-click it and configure the Connection Manager . See Figure 43.
In Figure 43, you need to set the connection to the MySQL connection manager we did in STEP #2. Then, click Component Properties . See the configuration in Figure 44.
After setting the TableName to dimmanufacturers ,click Column Mappings . Since both the source and target tables havethe same column names, the columns are automatically mapped.
Finally, click OK .
STEP #6. Add Another Devart MySQL Destination to UpdateRecords
Unlike the other Devart MySQLDestination , this will update records that changed from the source.
So, drag another Devart MySQL Destination and label it Update Existing. Connect it to the second Devart MySQL Lookup Transformation. And select Lookup No Match Output when a prompt appears. The setup is the same as in STEP #5 except for the Component Properties . See Figure 45 on what to change.
Using the Devart MySQL Destination is dead easy than using an OLE DB Command. There’s no need to map parameters to columns. It also works for a Delete operation. This is unlike an OLE DB Destination that works for inserts only.
Package Runtime Results
See the runtime results in Figure 46.
Conclusion
That’s it.
You learned 3 ways to do incremental load in SSIS by using the following:
- Change Data Capture
- DateTime Columns
- Lookup Transformation
You also learned how to do it using DevartSSIS Components.
Though our examples are simplified to makethe principle easier to understand as possible, there’s room for improvement.We didn’t use a staging table to store all changes, whether insert, update, ordelete. This is recommended for very large data, especially when the target isin another server. You can also add an executeprocess task in SSIS for special scenarios.
Anyway, if you like this post, please shareit on your favorite social media platforms.