Compresser des fichiers et des dossiers en ZIP avec SSIS

Comment compresser des fichiers et des 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. Cependant plusieurs options sont offertes au développeur décisionnel pour compresser des fichiers. Il est utile par exemple de réduire la taille des dossiers contenant de fichiers textes, Excel ou encore des bases de données.

En effet, tous types de fichiers d’archives peuvent être compressés : des fichiers de données, entres autres types : .XLS, .XLSX, .CSV, .DOC, .TXT, .DOCX, .XML, .HTML, .PDF, .XLA, .ODS, etc.

Comment compresser des fichiers et dossier en ZIP avec SSIS?

Pour décompresser ou compresser des fichiers, il existe des solutions utilisant un outils tiers, par exemple le logiciel gratuit 7ZIP. Pour compresser ou décompresser des fichiers avec SSIS exécuter les étapes suivantes dans un package SSIS déjà créé dans une solution.

D’autre part, pour zipper le contenu d’un dossier entier avec SSIS, utiliser un outil tiers en passant par une ligne de commande. C’est à dire à travers le composant “Execute Task Component” de SSIS, tous les fichiers .bat comportant des commandes MS-DOS peuvent être appelés.

Commencer par télécharger et installer le logiciel open source 7zip depuis le site officiel ou encore depuis un site reconnu comme Clubic par exemple.

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

Premièrement, à 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

Deuxièmement, pour être plus flexible il est possible de zipper dynamiquement tous les fichiers d’un dossier. Ou encore de se baser sur l’extension du fichier source ou 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.

Tout d’abord, créer quatre variables SSIS de type String :

  • La Variable_Fichier_Source
  • Variable_Fichier_Compresse (basée sur le nom du fichier source + date et heure de compression).
  • Variable_Dossier_Travail
  • et enfin la variable 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 dernière variable Variable_Fichier_Source sera instanciée à partir du composant Foreachfile donc aucune valeur par défaut à renseigner.

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 troisième 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.

Le composant For Each File de SSIS permet de boucler de manière dynamique pour compresser les fichiers

Ouvrir ensuite 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.

Ajouter ensuite 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”

En conclusion, cet article explique comment compresser des fichiers et des dossiers en fichiers ZIP avec SSIS et Visual Studio. Il est aussi de gérer les packages SSIS en ligne de commande.

De plus, pour obtenir la liste complète 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