Introduction à Sql Server Integration Services (SSIS)


précédentsommairesuivant

5. Traitement du fichier de log

Le traitement du fichier de log se fera dans un composant particulier, que vous trouverez à côté du composant File System Task dans la boite à outils : le Data Flow Task. Déposez-en un sur l'espace de travail du panneau Control Flow :

Figure 12

Vous remarquerez sans doute que lui n'a pas le droit à la petite croix blanche. L'explication est simple : un composant Data Flow Task est un container, un peu comme le panel en WinForms, donc s'il est vide, cela signifie qu'il n'y a aucune action à réaliser. Pas très utile me direz-vous, mais cela ne constitue pas pour autant un manque de configuration. Double cliquez dessus pour l'éditer. Visual Studio bascule automatiquement sur l'onglet Data Flow du package. C'est la que nous allons spécifier les tâches que devra accomplir notre composant Data Flow Task. La boîte à outils change, et laisse apparaître 3 catégories de composants :

Figure 13
  • Les sources
  • Les transformations
  • Les destinations

Je ne vais pas entrer dans les détails, mais dans Data Flow Sources et Data Flow Destination vous retrouverez les composants permettant respectivement d'obtenir et de sauvegarder les données.

Dans transformations vous retrouverez les composants pour manipuler les données : conversions, fusion, …

Passons maintenant à la première étape, la lecture des données de notre fichier de log

5-1. Lecture du fichier de log

Comme je vous en ai déjà parlé pour la copie du fichier, SSIS travaille avec des connexions pour accéder aux supports " physiques ". La première chose à faire est donc d'ajouter une connexion à notre fichier de log.

5-1-1. La connexion au fichier de log

Si vous jetez un oeil en bas du panneau Data Flow, vous verrez un espace nommé Connection Managers dans lequel vous retrouverez les deux connections utilisées pour la copie du fichier de log :

Figure 14

Un petit clic droit laissera apparaître le menu suivant dans lequel vous choisirez New Flat File Connection… :

Figure 15

L'écran suivant apparaît dans lequel nous allons configurer notre connexion :

Figure 16

Je ne vais pas tout détailler, je pense que l'écran est assez clair pour que vous puissiez le remplir seul. Voici quand même à quoi il doit ressembler :

Figure 17

Passez maintenant à la section Columns, c'est la que nous allons enfin voir le contenu de notre fichier de log en le configurant comme suit :

Figure 18

Pour Column Delimiter, spécifiez bien un espace (désolé, c'est pas très visible sur la capture !).

Dans la section Advanced, il est possible de définir les options avancées des colonnes que nous venons de voir :

Figure 19

Il est donc possible de modifier chaque colonne, de lui donner un nom compréhensible - par la suite, vous verrez que ça peut se révéler très utile - son type de sortie, très pratique. Voici à quoi cette section ressemble après configuration :

Figure 20

Pour la taille des colonnes de sortie, donnez la même taille que pour la taille du champ correspondant dans la table de la base. Validez : notre connexion est prête. Il ne nous reste plus qu'à visualiser nos données dans le Data Flow.

5-1-2. Flat File Source

Maintenant que nous avons configuré notre connexion au fichier de log, il faut rendre accessible ces données au package. C'est la qu'intervient le composant Flat File Source. Comme son nom l'indique, c'est une source de données.

Figure 21

Comme vous pouvez le constater, l'objet est en erreur. Si on y réfléchi deux secondes, c'est logique : son rôle est de rendre accessible des données au reste des composants du Data Flow. Mais quelles données ? Comme il n'est pas configuré, il ne sait pas lui-même où sont les données qu'il doit présenter. Un double clic sur le composant vous permettra d'accéder à son écran de configuration :

Figure 22

L'assistant détecte automatiquement la connexion appropriée au type de notre composant. Un composant Flat File Source prend logiquement une connexion de type Flat File. Si vous regardez la section Columns de cet écran de configuration, vous verrez qu'il intègre bien les colonnes définies dans la connexion :

Figure 23

Terminons la configuration, sans rien modifier, en cliquant sur OK.

Figure 24

Notre composant n'est plus en erreur. Passons à la suite.

5-1-3. Création de la colonne DateTime

Si vous avez été bien attentif, vous avez sans doute remarqué que pour les informations de date et d'heure, la structure du fichier de log nous renvoie 2 colonnes et que la structure de notre table nous propose une unique colonne de type DateTime.

Nous allons donc devoir transformer les informations fournies pas notre source afin de créer une nouvelle colonne de type DateTime à partir de deux colonnes de type Texte.

L'opération est la suivante :

Concaténer " jj/mm/aaaa " et " hh :mm :ss " en une chaine " jj/mm/aaaa hh :mm :ss " et la convertir en date.

Rassurez-vous, rien de bien compliqué là-dedans.

Ce genre d'opération est réalisé par un composant de type Data Flow Transformation : Derived Column. Déposez donc un composant Derived Column sur l'espace de travail.

Figure 25

Pour pouvoir créer une colonne à partir d'un autre, il faut bien sur qu'il sache les colonnes qu'il a à sa disposition. Pour cela, nous allons relier notre composant Flat File Source à notre composant Derived Column.

Cette opération est très simple et valable pour tous les composants qu'utilise SSIS, aussi bien dans un Control Flow que dans un Data Flow. Commencez par sélectionner le composant Flat File Source. Un flèche verte apparaît en dessous, c'est celle la qui nous intéresse. Elle représente le flux de données. La rouge représente le flux d'erreur. Nous ne nous en servirons pas ici. Pour connecter deux composants donc, il faut faire glisser la flèche verte du composant source sur le composant de destination. Vous devriez obtenir quelque chose qui ressemble à ceci dans notre cas :

Figure 26

Dans un Data Flow, cette flèche signifie que le composant d'où part la flèche fournit des données au composant pointé par la flèche. Après ces quelques petites précisions, voyons maintenant comment créer notre date pour l'exploiter par la suite. Double cliquez sur le composant Derived Column. L'écran de configuration suivant apparaît :

Figure 27
Il se divise en trois parties :
  • Les sources de données (nous mettrons de côté Variables qui dépassent le cadre de ce didacticiel)
  • Les opérations : mathématiques, sur les dates et ... oh ben tiens, de conversion
  • Les colonnes dérivées

Nous allons créer une colonne dérivée qui sera le résultat de Expression. Notez que vous pouvez créer plusieurs colonnes dérivées en une seule fois.

Ici nous allons créer la colonne dérivée " dateandtime " qui sera le résultat de l'expression suivante " (DT_DBTIMESTAMP)(DT_DATE)(date + " " + time) "

L'expression reprend la syntaxe du C#, on concatène les colonnes date et time avec un espace entre les deux, et on converti successivement le résultat en type DT_DATE puis DT_DBTIMESTAMP.

Figure 28

Nous disposons maintenant d'une colonne supplémentaire dans nos données, appelée dateandtime et de type DT_DBTIMESTAMP qui sera parfaite pour la colonne dateandtime de notre table en base.

Passons à la conversion des données.

5-1-4. Conversion des données

Pourquoi convertir les données ?

Si vous regardez bien la connexion au fichier de log, vous apercevrez une option Unicode, qui est décochée. Si maintenant vous regardez bien la structure de notre table, vous verrez que les champs de type text sont de type nvarchar, donc Unicode. Comme SSIS est assez pointilleux au niveau des types de données, nous allons devoir convertir les données non Unicodes de notre fichier texte en données Unicodes pour pouvoir les insérer en base. Mais encore une fois, SSIS nous propose un composant qui va se charger de réaliser la conversion pour nous, c'est le composant Data Conversion qui intervient :

Figure 29

Comme pour le composant Derived Column, pour savoir ce qu'il peut convertir, nous devons lui fournir des données. Nous allons donc relier la sortie de notre composant Derived Columns (flèche verte) à notre composant Data Conversion :

Figure 30

Comme d'habitude, ouvrez l'éditeur du composant Data Conversion :

Figure 31

Toutes les colonnes qui seront affectées par cette conversion sont les colonnes de type texte. Sélectionnez-les dans les colonnes Available Input Columns : elles apparaîtront dans la liste en dessous. Modifiez le Data Type en Unicode String [DT_WSTR]. Faîtes bien attention que la longueur de la chaîne corresponde bien à la taille du champ dans la table de la base. Une fois terminé, vous devriez obtenir ceci :

Figure 32

Terminez l'édition en validant.

Nous allons maintenant passer à l'insertion en base.

5-2. Ecriture en base

Comme nous utilisons une base SQL Server, nous utiliserons le composant SQL Server Destination. Vous pouvez bien sur utiliser d'autres destinations, comme un fichier texte, ou un autre SGBD, mais ceci n'est pas notre cas de figure actuel.

Figure 33

Le composant est en erreur. Normal, il ne sait pas oû il doit se connecter pour écrire. Qu'à cela ne tienne, on va lui fournir une connexion. Mais avant, nous allons quand même lui fournir les colonnes de sortie du composant de conversion :

Figure 34

5-2-1. Une connexion à la base

Dans le Connexion Manager que nous avons vu tout à l'heure, ajoutez une nouvelle connexion ADO.Net.

Figure 35

L'assistant vous propose une liste des connexions disponibles. Si vous n'en avez pas, ce qui est sûrement le cas, créez-en une nouvelle :

Figure 36

Validez le tout. Nous avons donc maintenant notre connexion à notre serveur SQL Server.

5-2-2. Liaison de nos données à la base

Maintenant que nous avons tout préparé, nous allons associer notre connexion à notre composant et vérifier que tout est bon. Double cliquez sur le composant SQL Server Destination :

Figure 37

Si vous avez plusieurs connexions, choisissez celle qui correspond. Spécifiez ensuite la table de destination, ici logiis. Nous allons maintenant mapper les colonnes fournies depuis le fichier avec les colonnes de la table :

Figure 38

L'assistant est un minimum intelligent. Il associe par défaut les colonnes sources et les colonnes de destination ayant le même nom. A nous de faire le reste.

Figure 38

Id n'est associé à aucune colonne source puisque c'est une colonne auto incrémentée. Attention aussi à bien utiliser les colonnes résultant de la conversion de données et non pas celles d'origine, leur format n'est pas correct.

Une fois le mappage réalisé sur toutes les colonnes de destination … on va tenter d'exécuter notre Data Flow.

5-3. Première tentative d'exécution du Data Flow

Cette étape va nous permettre de faire une petite analyse de notre Data Flow et de voir si tout se déroule correctement.

Toujours dans le panneau de travail du Data Flow, ouvrez le menu contextuel du Data Flow et choisissez la commande Execute Task.

Et là, drame. Erreur dès la première étape. Ne vous inquiétez pas, c'est normal. Quand je vous disais que SSIS était pointilleux … Si vous regardez dans l'onglet Progress, vous obtiendrez une liste très détaillée de ce qu'à fait SSIS lors de l'exécution du package et surtout les erreurs qu'il a rencontré :

Figure 39

Vous voyez qu'il y a quelques erreurs. Rien de dramatique, et surtout pas réellement une erreur.

Le souci est que lors de la lecture du fichier, SSIS suspecte un tronquage des données. Comme nous avons bien étudié la question avant, nous savons que c'est peu probable. Nous allons donc forcer SSIS à passer outre cette erreur. Editez le composant Flat File Source (double clic), et rendez-vous dans la section Error Output :

Figure 40

Cette section de configuration va spécifier le comportement du composant en cas d'erreur. Ici, vous voyez qu'en cas de tentative de tronquage des données, SSIS considère que le composant est en erreur et que l'exécution ne peut pas continuer. Nous allons donc dire à SSIS d'ignore l'erreur dans ce cas et pour toutes les colonnes :

Image non disponible

Validez et retentez d'exécuter le Data Flow. Cette fois-ci une erreur lors de la création de la colonne dateandtime dans le composant Derived Column. Même opération que pour le Flat File Source. Nous allons ignorer l'erreur.

Cette fois-ci, tout se passe bien :

Figure 42

Nous avons lu et écrit 472 lignes de log. Petite vérification des données dans la table :

Figure 43

Notre Data Flow est maintenant prêt, il ne nous reste plus qu'à terminer notre Control Flow.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2007 Olivier Delmotte. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.