Compresser des fichiers en ZIP avec SSIS et 7zip

Comment compresser des fichiers et des dossiers en archives au format 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.

Compresser des fichiers et des dossiers en ZIP dans un package Integration Services

D’une part, pour compresser ou décompresser des fichiers en ligne de commande et de manière automatisée, il existe des solutions utilisant des outils tiers, comme le logiciel gratuit et open source 7ZIP. Pour compresser ou décompresser des fichiers avec SSIS, exécuter les étapes suivantes dans un package SSIS déjà créé dans un projet.

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

Tout d’abord, télécharger et installer le logiciel open source 7zip depuis le site officiel ou encore depuis un site reconnu comme Clubic.com 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” depuis Visual Studio :

Le package SSIS utiliser un appel MSDOS pour compresser les fichiers et dossiers en ZIP. paramétrer la tâche d'exécution de processus pour appeler l'exécutable 7zip.
Le package SSIS utiliser un appel MSDOS pour compresser les fichiers et dossiers en ZIP

Note : Cette commande se sert de l’utilitaire 7zip, l’exemple peut également utiliser un autre outil utilisable depuis 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 compresser 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.

De plus, le dossier de travail et le nom du fichier compressé 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
Variables SSIS pour gérer les noms de fichiers et de dossiers à compresser en ZIP avec SSIS
Variables SSIS pour gérer les noms de fichiers et de dossiers à compresser en ZIP avec SSIS

Par ailleurs, la variable utilisée dans le 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.

De plus, la variable est paramétrée afin d’ajouter la date du jour en suffixe ainsi que l’extension .zip.

Le composant For Each File 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 les variables pour le dosser de travail et pour la sélection des fichiers
Mapper les variables pour le dosser de travail et pour la sélection des fichiers

Mapper maintenant 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 en cours de traitement contenu à l’intérieur de la variable SSIS Variable-Fichier_Source y sera utilisé. La boucle SSIS permet de compresser en ZIP un fichier ou un dossier complet après l’autre.

Ajouter la tâche d'exécution de processus dans le package SSIS pour compresser fichier et dossiers en archives ZIP
Ajouter la tâche d’exécution de processus dans le package SSIS

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

Paramétrer les arguments pour 7zip et le dossier de travail avec les variables
Paramétrer les arguments pour 7zip et le dossier de travail avec les variables

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

Liste des fichiers sources CSV et des fichiers ZIP compressés après exécution du package
Liste des fichiers sources CSV et des fichiers ZIP compressés après exécution du package

En conclusion, cet article explique comment compresser des fichiers et des dossiers en fichiers ZIP avec SSIS, Visual Studio et 7zip.

Il est aussi possible de gérer et déployer les packages SSIS en ligne de commande.

Liste de toutes les options 7zip

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 donc la liste de toutes les options 7zip :

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

https://www.7-zip.org/faq.html

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*