Table des matières 1 SSIS... 2 1.1 Management Studio... 2 1.2 dtswizard... 13 1.3 BIDS... 14 1.4 Exemple SSIS... 16 1.4.1 Introduction... 16 1.4.2 Création du package... 18 1.4.3 Paramétrage de la tâche SQL... 19 1.4.4 Configuration externe du package... 30 1.4.5 Écriture dans un fichier... 40 2011 Hakim Benameurlaine 1
1 SSIS SSIS, pour SQL Server Integration Services, est la méthode la plus robuste pour importer ou exporter des données. SSIS est le nouvel outil ETL de SQL Server 2008, et arrive en remplacement de DTS (Data Transformation Services), présent dans les versions précédentes. L emploi de SSIS est intéressant quand il s agit de transférer des données entre sources de données hétérogènes, et en plus, quand il faut leur appliquer des transformations. Il existe plusieurs façons d accéder à SSIS : 1.1 Management Studio Vous pouvez créer un package à partir de Management Studio en exécutant l assistant d import/export de données. Faire un clic-droit sur une base de données et choisir exporter ou importer des données, ensuite l assistant vous aide à la création d un package simple que vous pourrez ensuite exécuter. 2011 Hakim Benameurlaine 2
2011 Hakim Benameurlaine 3
2011 Hakim Benameurlaine 4
2011 Hakim Benameurlaine 5
2011 Hakim Benameurlaine 6
2011 Hakim Benameurlaine 7
2011 Hakim Benameurlaine 8
2011 Hakim Benameurlaine 9
2011 Hakim Benameurlaine 10
2011 Hakim Benameurlaine 11
2011 Hakim Benameurlaine 12
1.2 dtswizard A partir de l invite de commande, exécuter l utilitaire dtswizard.exe pour lancer l assistant précédent. 2011 Hakim Benameurlaine 13
1.3 BIDS A partir de Visual Studio ou de BIDS (BI Development Studio), vous permet accéder à toute la puissance de SSIS pour pouvoir créer des packages complets et fonctionnels. 2011 Hakim Benameurlaine 14
2011 Hakim Benameurlaine 15
1.4 Exemple SSIS 1.4.1 Introduction Dans cet exemple nous allons exporter les données de la base qui a le schéma suivant : USE FORMATION GO CREATE TABLE DEPARTEMENT (DeptID INT PRIMARY KEY, Nom VARCHAR(50), Location VARCHAR(50) ) CREATE TABLE EMPLOYE (EmpID INT PRIMARY KEY, Nom VARCHAR(50), Prenom VARCHAR(50), Salaire MONEY, DeptID INT REFERENCES DEPARTEMENT(DeptID) ) 2011 Hakim Benameurlaine 16
Pour chaque département nous allons générer un fichier de taille fixe contenant un entête décrivant le département et un corps contenant la liste des employés travaillant dans ce département. Pour accéder aux informations de la base de données nous avons créé deux procédures stockées : proc_dept : retourne la liste des départements. CREATE PROCEDURE proc_dept AS BEGIN SELECT DeptID, Nom, Location FROM Departement END proc_emp : retourne la liste des employés d un département donné. CREATE PROCEDURE proc_emp ( @DeptID int ) AS BEGIN SELECT EmpID, Nom, Prenom, Salaire FROM Employe WHERE DeptID = @DeptID END Dans le cas d'un échec elle aimerait que des informations soient loguées dans l'event log de Windows. 2011 Hakim Benameurlaine 17
1.4.2 Création du package Pour cela il suffit de lancer Visual Studio 2008 et de choisir un projet de type Integration Services : 2011 Hakim Benameurlaine 18
1.4.3 Paramétrage de la tâche SQL La première étape consiste à créer une tâche SQL pour récupérer la liste des équipes d'un projet donné (à terme les paramètres du projet cible seront fournis par un script externe). A partir du Toolbox ajouté une tâche Pour configurer cette tâche il suffit de sélectionner l'entrée Edit du menu contextuel : 2011 Hakim Benameurlaine 19
Le paramétrage consiste à : 1) Donner un nom 2011 Hakim Benameurlaine 20
2) Créer un alias sur la chaîne de connexion à la base de données en utilisant Connection Managers 2011 Hakim Benameurlaine 21
2011 Hakim Benameurlaine 22
Cliquer sur le bouton Test Connection pour tester la connexion : 2011 Hakim Benameurlaine 23
Une fois créée, celle-ci apparaît alors automatiquement dans la liste des gestionnaires de connexions au bas du designer : 3) Sélectionner la connexion à la base de données : 4) Préciser le nom de la procédure à appeler 5) Fournir l'identifiant du projet à la procédure stockée Pour cela nous avons besoin de créer une variable qui va stocké l'identifiant du projet cible : 2011 Hakim Benameurlaine 24
2011 Hakim Benameurlaine 25
2011 Hakim Benameurlaine 26
Cette nouvelle variable s'appelle DepartementID, est de type Int32 et a -1 pour valeur par défaut. 2011 Hakim Benameurlaine 27
6) Créer une variable pour accueillir les enregistrements retournés par la procédure stockée. La première chose à faire pour récupérer les enregistrements est de positionner l'entrée ResultSet du menu General à Full result set : Puis de créer dans l'entrée Result Set une variable nommée Empl de type Object : 2011 Hakim Benameurlaine 28
2011 Hakim Benameurlaine 29
1.4.4 Configuration externe du package Dans le paramétrage effectué jusqu'à présent la chaîne de connexion est «codée en dur» avec le nom de la machine et de la base cible. Pour déporter la valeur de certaines données dans un fichier de configuration externe il suffit de cliquer sur l'entrée Configurations du Package : 2011 Hakim Benameurlaine 30
Puis de choisir Enable package configurations et cliquer sur Add. Il suffit alors de se laisser guider par le wizard en choisissant une configuration de type XML Configuration File : 2011 Hakim Benameurlaine 31
2011 Hakim Benameurlaine 32
2011 Hakim Benameurlaine 33
Vous remarquerez que le fichier ne porte pas l'extension.config comme la plupart des projects.net mais.dtsconfig. La dernière étape du wizard consiste à sélectionner les variables à exporter dans le fichier de paramétrage. Dans notre cas le nom du serveur et du catalogue de la connection manager créée précédemment. 2011 Hakim Benameurlaine 34
La mise à jour de l'un de ces deux paramètres met automatiquement à jour la chaîne de connexion c'est pourquoi il n'est pas nécessaire de la mettre dans le fichier de configuration: 2011 Hakim Benameurlaine 35
Enfin vous aurez remarqué que le chemin qui pointe sur le fichier de configuration C:\SSIS\ProjetExport est codé en dur dans le package SSIS. Ceci est très gênant car le répertoire de la machine de développement et celui de la machine de production ne seront sûrement pas les mêmes. 2011 Hakim Benameurlaine 36
On va créer une variable d'environnement qui va pointer sur le fichier de configuration. Pour cela il suffit dans l'entrée Configurations des propriétés du package de demander la création d'une configuration de type XML «indirecte», pointée par une variable d'environnement : 2011 Hakim Benameurlaine 37
2011 Hakim Benameurlaine 38
Et voici le résultat final : 2011 Hakim Benameurlaine 39
1.4.5 Écriture dans un fichier Dans notre développement il manque l'étape qui juste avant l'exécution de la tâche SQL va générer l'entête du fichier de sortie. Les données de l'entête proviennent des paramètres fournis par le script qui orchestre l'export : Le nom du fichier de sortie L'identifiant du département Le nom du département La location du département Nous allons créer des variables pour accueillir les paramètres décrits cidessus. Pour voir la liste des variables du projet il suffit de sélectionner l'entrée Variables du menu contextuel : 2011 Hakim Benameurlaine 40
La liste apparaît au niveau de la Toolbox de Visual Strudio 2008, il suffit alors de créer les nouvelles variables comme suit : Pour la gestion de l'écriture des données dans un fichier nous allons utiliser un Data Flow Task qui va nous permettre de prendre les données à exporter, de les formater puis de les envoyer vers le fichier cible. Le choix de l'entrée Edit dans le menu contextuel du Data Flow Task nous emmène sur l'onglet Data Flow du designer. Ce dernier permet de gérer les flux de données. 2011 Hakim Benameurlaine 41
2011 Hakim Benameurlaine 42
A ce niveau nous allons ajouter un composant Script component de type Source, dont le rôle va être de créer la ligne à stocker dans le fichier : 2011 Hakim Benameurlaine 43
Le paramétrage de ce composant se fait par l'entrée Edit du menu contextuel. La configuration de l'enregistrement de sortie se fait comme présenté ci-dessous : 2011 Hakim Benameurlaine 44
2011 Hakim Benameurlaine 45
Puis il faut préciser les variables que l'on souhaite utiliser dans ce composant: Enfin il ne reste plus qu'à écrire le code de génération de la ligne de sortie. Pour développer ce code, on va utiliser VB.Net. Une variable <NomOutput>Buffer (dans notre cas Sortie0Buffer) est automatiquement créée et les variables que nous avons rendu visible à ce composant sont accessibles via la classe Variables qui est définit dans le fichier ComponentWrapper et qui en interne se contente d'appeler la méthode ReadOnlyVariables du composant. Public Class ScriptMain Inherits UserComponent Public Overrides Sub CreateNewOutputRows() ' 2011 Hakim Benameurlaine 46
' Add rows by calling AddRow method on member variable called "<Output Name>Buffer" ' E.g., MyOutputBuffer.AddRow() if your output was named "My Output" ' Me.Sortie0Buffer.AddRow() Me.Sortie0Buffer.AddRow() 'Me.Sortie0Buffer.Type = "P" Me.Sortie0Buffer.Nom = Me.Variables.DepartementNom Me.Sortie0Buffer.Location = Me.Variables.DepartementLocation End Sub End Class L'étape suivante consiste à envoyer ces données vers un fichier cible. Pour cela nous allons utiliser le composant Flat File Destination de la Toolbox. 2011 Hakim Benameurlaine 47
Faire le lien : Le paramétrage de ce dernier nécessite la création d'un File connection manager : Une fois que vous avez cliqué sur New choisissez le type Fixed width with row delimiter si vous voulez avoir un fichier avec des tailles fixes et qui va automatiquement à la ligne à chaque nouvel enregistrement (ce qui n'est pas le cas avec le type Fixed Width) : 2011 Hakim Benameurlaine 48
Ensuite il suffit de donner un nom de fichier (n'importe lequel pour le moment pourvu que le fichier existe) au file connection manager. 2011 Hakim Benameurlaine 49
2011 Hakim Benameurlaine 50
Enfin il ne reste plus qu'à faire le mapping entre les colonnes en entrée (provenant du Script Component) et en sortie (décrit par le File Connection Manager) : 2011 Hakim Benameurlaine 51