Comment charger plusieurs fichiers textes avec SSIS?

Comment charger plusieurs fichiers textes de type csv ou txt dans une table avec une boucle automatique SSS ?

Ce tutoriel SSIS explique comment charger plusieurs fichiers textes à la fois avec SSIS. Pour commencer, tous les fichiers textes (.txt, .csv, etc…) doivent se trouver dans le même dossier. Cette intégration automatique utilise des variables dynamiques et permet d’intégrer de nombreux fichiers avec la même structure en même temps. Pour charger plusieurs fichiers plats de manière dynamique, utiliser une boucle SSIS, c’est à dire le composant SSIS Foreach Loop Container.

Ce package utilise les mêmes composants que le package du tutoriel précédent pour importer un seul fichier plat dans une table SQL. C’est donc le même data flow utilisé avec des variables dans le chemin dynamique du fichier.

1. Télécharger les fichiers à charger et créer la table de destination

Tout d’abord, télécharger les trois fichiers d’exemple:

Les fichiers sont stocker par exmple comme ceci:

  • C:\Data
    • Customers_Data_1.csv
    • Customers_Data_2.csv
    • Customers_Data_3.csv

Ensuite, créer la table de destination. La table utilise la même structure que le tutoriel pour charger un fichier plat, et remplit une colonne avec le chemin complet du fichier.

IF NOT EXISTS (
   SELECT * FROM sys.objects 
   WHERE object_id = OBJECT_ID(N'[dbo].[Customers_with_filename]') 
      AND type in (N'U')
)
CREATE TABLE [dbo].[Customers_with_filename](
   [CustomerID] [int] NOT NULL,
   [FirstName] [nvarchar](20) NULL,
   [LastName] [nvarchar](20) NULL,
   [City] [nvarchar](20) NULL,
   [Country] [nvarchar](50) NULL,
   [filename] [nvarchar](50) NULL,
   CONSTRAINT [CustomerswithFileNamePKCustomerID] 
      PRIMARY KEY CLUSTERED ([CustomerID] ASC)
)
GO

2. Créer une boucle SSIS pour charger les fichiers textes

Premièrement, utiliser une boucle depuis l’onglet control flow. Sélectionner ensuite le conteneur dynamique Foreach Loop Container et le faire glisser sur l’espace de travail.

Utiliser le composant Foreach Loop pour charger plusieurs fichiers textes à la fois avec SSIS
Utiliser le composant Foreach Loop pour charger plusieurs fichiers textes à la fois avec SSIS

3. Créer une variable dynamique SSIS pour gérer le nom des fichiers textes à importer

Créer une variable nommée FlatFilePath de type String au niveau du package. Pour afficher les variables, cliquer sur le package et appuyer sur F4 ou faire un clic-droit dans le flux de données.

Créer une variable SSIS pour stocker les noms de fichiers textes de manière dynamique
Créer une variable SSIS pour stocker les noms de fichiers textes de manière dynamique

Paramétrer la connexion au fichier plat comme détaillé dans ce tutoriel avec un flux de données pour charge un fichier plat. C’est le même principe mais cette fois le flux de données permet de charger plusieurs fichiers textes avec un seul package SSIS.

Importer un fichier texte dans une base SQL Server avec SSIS

Modifier ensuite l’expression ConnectionString utiliser la variable dynamique au lieu du chemin en dur.

Modifier les propriétés de la connexion au fichier plat
Modifier les propriétés de la connexion au fichier plat

Utiliser la variable créée avant pour qu’a chaque passage dans la boucle, le nom de fichier soit dynamique.

Mapper la variable FlatFilePath à la propriété ConnectionString
Mapper la variable FlatFilePath à la propriété ConnectionString

4. Configurer le conteneur de boucle Foreach File SSIS

Double-cliquer ensuite sur la séquence Foreach Loop Container. Dans l’onglet Collection :

  1. Choisir le dossier dans lequel se trouvent les fichiers plats : C:\Data
  2. Indiquer ensuite le nom des fichiers plats à charger avec SSIS : Customers_Data*.csv
  3. Choisir le nom complet du fichier avec le chemin : Fully qualified
Paramétrer le dossier et le filtre pour sélectionner les fichiers textes à charger avec SSIS
Paramétrer le dossier et le filtre pour sélectionner les fichiers textes à charger avec SSIS

Puis, dans l’onglet Variable Mappings, relier la variable FlatFilePath à l’index 0. Cette liaison transmet de manière dynamique le nom du fichier en cours à la variable et donc à la connexion au fichier.

Relier la variable dynamiquement au nom de fichier en cours de traitement
Relier la variable dynamiquement au nom de fichier en cours de traitement

5. Ajouter le nom du fichier CSV dans une colonne dérivée

Ajouter les deux colonnes dérivées suivantes pour:

  1. Ajouter le numéro de client au format Entier
  2. Ajouter le nom du fichier source depuis la variable dynamique

6. Exécuter le package SSIS et charger plusieurs fichiers textes

Maintenant, lancer le chargement. Le package SSIS charge les fichiers plats dans la base de données n par un, soit un flux de données exécuté par fichier détecté dans le dossier source.

Exécuter la boucle SSIS pour charger plusieurs fichiers textes
Exécuter la boucle SSIS pour charger plusieurs fichiers textes

En cliquant dans le data flow, on note que 16 lignes sont intégrées à chaque itération.

Lignes intégrées dans le flux de données Integration Services
Lignes intégrées dans le flux de données Integration Services

7. Vérifier les données des fichiers importés depuis SSIS avec SSMS

Vérifier enfin les résultats avec les 2 requête SQL suivantes. Le résultat est donc cohérent avec 16 lignes intégrées pour chaque fichier source, sans erreurs.

SELECT [Filename], COUNT(*)
  FROM [dbo].[Customers_with_filename]
  GROUP BY [Filename]; 

SELECT * 
  FROM [dbo].[Customers_with_filename];
Exécuter la requête SQL dans SSMS pour contrôler les données dans la table.
Exécuter la requête SQL dans SSMS pour contrôler les données dans la table.

Conclusion sur le package SSIS pour importer plusieurs fichiers textes avec SSIS

Pour importer des fichiers dans une table de manière automatisée et pour éviter les erreurs, d’une manière générale, il est primordial de contrôler l’encodage des fichiers textes à intégrer.

Autres tutoriels sur le sujet de l’import et l’export de données avec SSIS

Détecter le type de données Excel avec SSIS

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut