Compresser des fichiers et dossiers en ZIP avec SSIS

La compression de fichiers en .zip (ou .gz ou .7z ou tout autre format de compression) n’existe pas nativement dans les différents composant SSIS purs de SSIS 2008, cependant plusieurs options sont offertes au développeur décisionnel pour compresser des fichiers. Par exemple des dossiers contenant de fichiers textes, excel ou encore des bases de données ou simplement, des fichiers de données, entres autres types : .XLS, .XLSX, .CSV, .DOC, .TXT, .DOCX, .XML, .HTML, .PDF, .XLA, .ODS, etc. 

Pour décompresser ou compresser des fichiers, il existe des solutions utilisant un outils tiers, par exemple le logiciel gratuit 7ZIP. Pour zipper ou dé-zipper des fichiers avec SSIS 2008 exécuter les étapes suivantes dans un package SSIS déjà créé dans une solution. Nous allons donc voir comment zipper le contenu d’un dossier avec SSIS, pour cela utiliser un tiers outil en passant par une ligne de commande à travers le composant « Execute Task Component » de SSIS, tous les fichiers .bat comportant des commandes MS-DOS peuvent être appelés.

Pour commencer télécharger et installer 7zip.

 

Première solution pour zipper des fichiers avec SSIS sans paramètres dynamiques

A travers une commande MS-DOS, écrire directement les paramètres en dur à l’intérieur du composant SSIS « Tâche d’exécution de processus » sous BIDS:

Note : Cette commande se sert de l’utilitaire 7zip, l’exemple peut également utiliser un autre outil appelable à travers les lignes de commandes MSDOS. Bien entendu, les options sont paramétrables et vous avez la possibilité de choisir le mode de compression et le format.

 

Deuxième solution pour compresser tous les fichiers d’un dossier avec SSIS

Pour être plus flexible et zipper dynamiquement tous les fichiers d’un dossier, il faut se baser sur le type d »extension du fichier source et un filtre sur le nom des fichiers à prendre en compte. Le dossier de travail et le nom du fichier compresse final sont également dynamiques et stockés dans des variables.

Il vous faut créer 4 variables SSIS de type String :

  • Variable_Fichier_Source
  • Variable_Fichier_Compresse (basée sur le nom du fichier source + date et heure de compression)
  • Variable_Dossier_Travail
  • Variable_FileSpec

Il faut noter que la variable du composant Foreach File de SSIS a pour nom Variable_FileSpec qui nous permet de choisir le filtre de sélection des fichiers à énumérer.

La variable Variable_Fichier_Source sera instanciée à partir du composant Foreachfile donc aucune valeur par défaut n’est à donner.

Ensuite, paramétrer la variable Variable_Fichier_Compresse comme suit (afin d’afficher la fenêtre d’édition des paramètres, sélectionner la variable puis presser la touche F4).

La variable Variable_Dossier_Travail contient le dossier cible ayant les fichiers à compresser au format ZIP. Paramétrage de la Variable_fichier_compresse. La variable est paramétrée afin d’ajouter la date du jour en suffixe et l’extension .zip.

Ouvrir le composant ForEach File et y renseigner les propriétés suivantes:

  • FileSpec avec la variable Variable_FileSpec
  • Directory avec la variable Variable_Dossier_Travail

 

Mapper le nom du fichier scanné à l’intérieur de la variable Variable_Fichier_Source.

 

Il vous faudra ensuite ajouter le composant d’exécution de processus à l’intérieur de la boucle ForEach File. Le nom du fichier contenu à l’intérieur de la variable Variable-Fichier_Source y sera utilisé.

 

Maintenant, paramétrer le composant d’exécution de processus dans le but de fonctionner de façon dynamique avec le contenu des variables.

 

Ainsi les fichiers commençant par 2010* avec l’extension « .csv » sont compressés en fichiers « .zip »

 

Pour obtenir la liste des commandes ainsi que les options de 7z en ligne de commande, il vous suffit de taper 7z-h à intérieur d’une fenêtre MS-DOS.
Voici la liste :

7-Zip 4.42 Copyright (c) 1999-2006 Igor Pavlov 2006-05-14

Usage: 7z […] […]
[<@listfiles…>]

a: Add files to archive
d: Delete files from archive
e: Extract files from archive (without using directory names)
l: List contents of archive
t: Test integrity of archive
u: Update files to archive
x: eXtract files with full paths

-so: write data to stdout
-t{Type}: Set type of archive
-v{Size}[b|k|m|g]: Create volumes
-u[-][p#][q#][r#][x#][y#][z#][!newArchiveName
-ai[r[-|0]]{@listfile|!wildcard}: Include archives
-p{Password}: set Password
-r[-|0]: Recurse subdirectories
-scs{UTF-8 | WIN | DOS}: set charset for list files
-sfx[{name}]: Create SFX archive
-si[{name}]: read data from stdin
-slt: show technical information for l (List) command]: Update options
-w[{path}]: assign Work directory. Empty path means a temporary directory
-x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames
-y: assume Yes on all queries
-ax[r[-|0]]{@listfile|!wildcard}: eXclude archives
-bd: Disable percentage indicator
-i[r[-|0]]{@listfile|!wildcard}: Include filenames
-m{Parameters}: set compression Method
-o{Directory}: set Output directory

 

Soyez le premier à commenter

Laisser un commentaire