Amélioration des chargements incrémentiels avec la capture de données modifiées
Dans SQL Server, la capture de données modifiées constitue une solution efficace au défi de l'optimisation des chargements incrémentiels de tables sources vers des mini-Data Warehouses et des entrepôts de données.
Qu'est-ce que la capture de données modifiées ?
Les tables sources changent au fil du temps. Un mini-Data Warehouse ou un entrepôt de données qui est basé sur ces tables doit refléter ces modifications. Toutefois, un processus qui copie périodiquement un instantané de la source entière consomme trop de temps et de ressources. D'autres approches, notamment des colonnes timestamp, des déclencheurs ou des requêtes complexes, nuisent souvent aux performances et accroissent la complexité. Un flux de données modifiées fiable est donc nécessaire, structuré de sorte que les consommateurs puissent facilement l'appliquer aux représentations cibles des données. La capture de données modifiées dans SQL Server offre cette solution.
La fonction de capture de données modifiées du Moteur de base de données capture les activités d'insertion, de mise à jour et de suppression appliquées aux tables SQL Server, et rend les détails des modifications disponibles dans un format relationnel simple à utiliser. Les tables de modifications utilisées par la capture de données modifiées contiennent des colonnes qui reflètent la structure de colonne des tables sources suivies, ainsi que les métadonnées nécessaires à la compréhension des modifications effectuées ligne par ligne.
Notes
La capture de données modifiées n'est disponible que dans SQL Server 2008, éditions Enterprise, Developer et Evaluation.
Pour plus d'informations, consultez Capture de données modifiées.
Fonctionnement de la capture de données modifiées dans Integration Services
Un package Integration Services peut facilement collecter les données modifiées dans les bases de données SQL Server pour effectuer des chargements incrémentiels efficaces dans un entrepôt de données. Toutefois, avant de pouvoir utiliser Integration Services pour charger des données modifiées, un administrateur doit activer la capture de données modifiées sur la base de données et les tables à partir desquelles vous souhaitez capturer les modifications. Pour plus d'informations sur la configuration de la capture de données modifiées sur une base de données, consultez Configuration de la capture des données modifiées.
Une fois qu'un administrateur a activé la capture de données modifiées sur la base de données, vous pouvez créer un package qui effectue un chargement incrémentiel des données modifiées. Le diagramme suivant montre les étapes à suivre pour créer un tel package qui effectue un chargement incrémentiel à partir d'une table individuelle :
Comme indiqué dans le diagramme précédent, la création d'un package qui effectue un chargement incrémentiel des données modifiées implique les étapes suivantes :
Étape 1 : Conception du flux de contrôle
Dans le flux de contrôle du package, les tâches suivantes doivent être définies :Calculer les valeurs datetime de début et de fin pour l'intervalle des modifications apportées aux données sources à récupérer.
Pour calculer ces valeurs, utilisez une tâche d'exécution SQL ou des expressions Integration Services avec des fonctions datetime. Vous stockez ensuite ces points de terminaison dans des variables de package pour une utilisation ultérieure dans le package.
Pour plus d'informations, consultez Spécification d'un intervalle de données modifiées.
Déterminer si les données modifiées pour l'intervalle sélectionné sont prêtes. Cette étape est nécessaire car le processus de capture asynchrone n'a peut-être pas encore atteint le point de terminaison sélectionné.
Pour déterminer si les données sont prêtes, commencez si nécessaire par un conteneur de boucles For pour différer l'exécution, jusqu'à ce que les données modifiées pour l'intervalle sélectionné soient prêtes. Dans le conteneur de boucles, utilisez une tâche d'exécution SQL pour interroger les tables de mappage du temps gérées par la capture de données modifiées. Utilisez ensuite une tâche de script qui appelle la méthode Thread.Sleep ou une autre tâche d'exécution SQL avec une instruction WAITFOR pour différer temporairement l'exécution du package si nécessaire. Utilisez éventuellement une autre tâche de script pour enregistrer une condition d'erreur ou un délai d'attente.
Pour plus d'informations, consultez Déterminer si les données modifiées sont prêtes.
Préparer la chaîne de requête qui sera utilisée pour rechercher les données modifiées.
Utilisez une tâche de script ou une tâche d'exécution SQL pour assembler l'instruction SQL qui sera utilisée pour rechercher les modifications.
Pour plus d'informations, consultez Préparation de la recherche des données modifiées.
Étape 2 : Configuration de la requête pour rechercher les données modifiées
Créez la fonction table qui recherchera les données.Utilisez SQL Server Management Studio pour développer et enregistrer la requête.
Pour plus d'informations, consultez Récupération et présentation des données modifiées.
Étape 3 : Conception du flux de données
Dans le flux de données du package, les tâches suivantes doivent être définies :Récupérer les données modifiées des tables de modifications.
Pour récupérer les données, utilisez un composant source pour interroger les tables de modifications à propos des modifications qui se situent dans l'intervalle sélectionné. La source appelle une fonction table Transact-SQL que vous aurez créée précédemment.
Pour plus d'informations, consultez Récupération et présentation des données modifiées.
Fractionner les modifications en insertions, mises à jour et suppressions à des fins de traitement.
Pour fractionner les modifications, utilisez une transformation de fractionnement conditionnel pour diriger les insertions, les mises à jour et les suppressions vers les différentes sorties pour un traitement approprié.
Pour plus d'informations, consultez Traitement des insertions, des mises à jour et des suppressions.
Appliquer les insertions, les suppressions et les mises à jour à la destination.
Pour appliquer les modifications à la destination, utilisez un composant de destination pour appliquer les insertions à la destination. Ensuite, utilisez des transformations de commande OLE DB avec des instructions UPDATE et DELETE paramétrables pour appliquer les mises à jour et les suppressions à la destination. Vous pouvez également appliquer les mises à jour et les suppressions en utilisant des composants de destination pour enregistrer les lignes dan des tables temporaires. Ensuite, utilisez des tâches d'exécution SQL pour effectuer les opérations de mise à jour en bloc et de suppression en bloc sur la destination à partir des tables temporaires.
Pour plus d'informations, consultez Application des modifications à la destination.
Utilisation des données modifiées en provenance de plusieurs tables
Le processus exposé précédemment fait référence à un chargement incrémentiel à partir d'une table unique. Pour effectuer un chargement incrémentiel à partir de plusieurs tables, le processus d'ensemble est le même. Toutefois, la conception du package doit être modifié pour prendre en charge le traitement de plusieurs tables. Pour plus d'informations sur la création d'un package qui effectue un chargement incrémentiel à partir de plusieurs tables, consultez Exécution d'un chargement incrémentiel de plusieurs tables.
Affichage d'un package de capture de données modifiées complet
Integration Services fournit deux exemples qui montrent comment utiliser la capture de données modifiées dans des packages. Pour plus d'informations, consultez les rubriques suivantes :
Ressources externes
Entrée de blog, Modèle de conception SSIS – Charge incrémentielle, sur le site sqlblog.com
|