Aller au contenu

Utiliser des scripts en langage naturel dans DataStage

29 septembre 2023

David Cross

En quoi consiste l’utilisation de scripts, et pourquoi les intégrer à DataStage?

DataStage (DS) est un outil d’extraction, de transformation et de chargement des données (ETC) extraordinaire. Le combiner à l’utilisation de scripts en langage naturel nous permet d’y ajouter une nouvelle fonctionnalité.
 
Dans cet article, nous vous présenterons plusieurs scénarios propices à cette approche ainsi qu’une liste d’exemples d’utilisation. Nous vous expliquerons également le processus complet étape par étape en décortiquant un cas simple pour faciliter votre compréhension.

Vous pouvez écrire vos scripts en Python ou en Perl, même à l’aide de simples lignes de commande Unix, lesquels seront exécutés au moment de l’étape ExecCommand. Nous allons vous montrer comment vous en servir, mais nous ne nous attarderons pas sur la manière de charger vos données et votre script sur le serveur.

Table des matières

  1. Exemples de script
  2. Exemple de script en langage naturel dans DataStage : script de décompression
  3. Script de décompression
  4. Configurer un travail parallèle
  5. Configurer un travail séquentiel
  6. Exécuter un travail

Exemples d’utilisation de script

  • Formatage personnalisé de courriels et de pièces jointes
  • Recherche de fichier
  • Exécution ou arrêt d’un travail en fonction d’un résultat
  • Création d’une instruction SQL dynamique
  • Manipulation de fichiers: compression, décompression, déplacement, archivage et suppression de fichiers
  • Vérification de date avant l’exécution d’un travail
  • Création de fichiers journaux personnalisés
  • Comptage des enregistrements

Nous allons maintenant vous aider à y voir plus clair en décrivant certains des exemples listés ci-dessus.

Formatage personnalisé de courriels et de pièces jointes

DS est doté d’une étape de notification et d’une étape de routine, particulièrement pratiques pour envoyer des courriels. Dans un de nos projets, nous avons eu besoin de personnaliser le corps et l’objet de courriels, ainsi que d’y ajouter une pièce jointe. Nous l’avons réalisé sans problèmes avec Python et la fonction SendMail.

Fichiers journaux personnalisés

Certains projets dans DS s’articulent autour de nombreuses étapes. Nous avons cherché un moyen de suivre les étapes exécutées et leur temps de traitement respectif. Pour ce faire, nous avons créé un script Perl dont la fonction est d’écrire une entrée de journal à chaque fois qu’une étape est exécutée, avec sa date de début et de fin. Ces données étaient ensuite jointes à un courriel une fois le travail complété.

Manipulation de fichiers

Les scripts en langage naturel/Unix sont idéaux pour manipuler des fichiers, notamment les déplacer, les supprimer, les archiver, les compresser ou les décompresser. Nous nous en sommes largement servis pour traiter les fichiers entrants.

Exemple de script en langage naturel dans DataStage : script de décompression

Typiquement, on déplace un fichier compressé à l’aide d’un protocole FTP. Ensuite, il est décompressé et extrait par DS via l’étape Sequential File. À l’aide de commandes Unix, le fichier ainsi extrait peut être compressé de nouveau et archivé dans un dossier prévu à cet effet. Il est également possible de consulter les dates associées au traitement du fichier, par exemple celles antérieures à 1 mois, que vous pourriez supprimer.

Comme décrit ci-dessus, décompresser un fichier entrant avant de traiter les données est une tâche fréquente. C’est pourquoi utiliser un script est la solution idéale. Reproduisons le processus en créant un travail dans DS (séquentiel et parallèle).

Le travail exécutera la séquence suivante :

  1. Déplacement du fichier compressé dans un dossier accessible à DS
  2. Lecture de notre script de décompression par l’étape ExecCommand
  3. Traitement du fichier par l’étape Sequential File
  4. Chargement du contenu dans le tableau cible par l’étape DB2 Connector

Script de décompression

Voici notre script Perl « unzip_example.pl », qui a pour fonction de décompresser le fichier entrant. Sauvegardez ce fichier dans un endroit accessible du serveur DS.

 

  • #!/usr/bin/perl -w
  • # -- EXEMPLE DE FICHIER DE DÉCOMPRESSION
  • # -- Le fichier à décompresser
  • my $file = 'testdata.zip';
  • # -- Le dossier dans lequel le fichier se trouve
  • my $specifiedDir = '/ds-shared/data/';
  • # -- La commande de décompression
  • my $rc = system("/usr/bin/unzip -jp $file -d $specifiedDir") or warn "$!\n";

 

Configurer un travail parallèle

1. Ouvrez DS Designer et créez un nouveau travail parallèle via Menu > File > New Parallel Job (Menu > Fichier > Nouveau travail parallèle). Cliquez sur OK.

2. Retournez dans le menu et naviguez vers View > Palette (Vue > Palette). Cette manipulation nous permet de glisser-déposer deux étapes sur notre fenêtre de travail.

3. Sélectionnez d’abord l’étape DB2 Connector, ou n’importe quel connecteur de base de données utilisé dans votre projet (Neteeza, Oracle, JDBC, ODBC, Informix, etc). Déplacez-le sur la droite de votre fenêtre de travail.

Étapes Sequential File

4.Ensuite, sélectionnez l’étape Sequential File et déposez-la à gauche.  

5. Cliquez de l’étape Sequencer vers le connecteur pour les relier. Ajoutez une note explicative au besoin. Cliquez ensuite sur chacune des étapes et donnez-leur un nom pertinent. Votre travail devrait ressembler à l’image ci-contre.

Enregistrement et Properties

6. Enregistrez votre travail dans le menu File > Save As (Fichier > Enregistrer sous). Nous nommerons ce travail LOAD_UNZIPPED_FILE

7. Configurons maintenant l’étape Sequencer « EXTRACT_UNZIPPED_CSV_FILE ». Faites un double clic pour l’ouvrir.

8. Dans l’onglet Properties (Propriétés), cliquez sur File (Fichier). Ensuite, sur le côté droit, cliquez sur le triangle noir et sélectionnez Browse for File (Rechercher un fichier). Naviguez vers le dossier dans lequel se trouve votre fichier compressé, à condition, une fois de plus, que vous ayez accès au dossier DS et que vous avez réussi à y ajouter le fichier.

Chemin et nom d'accès

9. Ajoutez le chemin d’accès et le nom du fichier « unzipped ». C’est une étape importante. Notre script va décompresser le fichier, mais le séquenceur traitera le fichier csv. Cliquez sur OK pour enregistrer.  

10. Faites un double clic sur l’étape DB2 connector pour la configurer.  Ajoutez le nom de votre base de données, votre identifiant d’utilisateur, votre mot de passe et votre tableau cible. Enregistrez ensuite l’étape, puis votre travail.

Configurer un travail séquentiel

1. Créez un nouveau travail séquentiel et déplacez les éléments ci-dessous sur la fenêtre de travail en les agençant de gauche à droite.

  • Étape ExecCommand
  • Étape Job Activity
  • Étape Notification

2. Connectez ces trois étapes et donnez-leur un nom pertinent. Enregistrez le travail. Dans notre cas, nous l’avons appelé SEQ_UNZIP_SCRIPT. Votre travail devrait ressembler à ceci : 

ExecCommand

3. Pour configurer l’étape ExecCommand, rendez-vous dans la section Command (Commande), ajoutez le chemin d’accès de votre fichier et le nom du script. 

Étape Activity

4. Pour configurer l’étape Activity, cherchez le nom de votre travail parallèle et entrez-le dans le champ Job name (Nom du travail). Dans notre cas, il s’agit de LOAD_UNZIPPED_FILE

Étape Notifications

5. Pour configurer l’étape Notification, entrez les métadonnées du courriel (serveur, destinataire, expéditeur, objet) et cliquez sur OK pour enregistrer. (Insérer capture d’écran 08)

6. Enregistrez les changements apportés au travail séquentiel SEQ_UNZIP_SCRIPT.

Exécuter un travail

Nous sommes maintenant prêts à exécuter le travail :

  1. Le travail SEQ_UNZIP_SCRIPT exécutera les commandes dans le script pl.
  2. Le fichier de données sera décompressé.
  3. Le travail parallèle LOAD_UNZIPPED_FILE sera exécuté. Il extraira les données du fichier et les importera dans un tableau de base de données.
  4. Enfin, une notification sera envoyée pour nous informer que le travail a été effectué.

Conclusion

Revenons sur notre exemple. Le script de décompression est simple, car nous avons délibérément ignoré les vérifications et les équilibrages typiquement ajoutés aux travaux. Il faudrait au moins y ajouter les étapes Variable et Nested Condition pour séparer les résultats de chaque action (ex : fichier non trouvé, données corrompues). Nous pouvons également utiliser des scripts pour créer des fichiers journaux et des notifications personnalisés.

Notre article ne présente que quelques exemples, mais votre projet vous amènera peut-être à développer de nouveaux moyens d’intégrer des scripts. Ils forment une excellente combinaison avec les fonctions d’ETC de DataStage.

VOUS AVEZ UN PROJET ?