Aller au contenu

Manipuler plusieurs tableaux avec des étapes Loop dans DataStage

29 septembre 2023

David Cross

Chaque composant de DataStage (DS) remplit une fonction particulière dans l’écosystème du logiciel. L’étape Loop, en revanche, peut considérablement accélérer les processus de développement et d’exécution (dans certains contextes). Lisez la suite pour savoir si cet outil est adapté à vos besoins. L’étape Loop peut traiter des chaînes de caractères ou des valeurs numériques. Elle accepte également différents séparateurs, comme la virgule ou l’espacement. Vous pouvez y associer un jour en particulier (« Lundi », « Mardi », « Mercredi »), un nom de fichier (« Fichier_de_paie01 ») ou, comme dans notre exemple, un nom de tableau.

Dans le présent article, nous n’aborderons que l’utilisation d’étapes Loop avec des tableaux. Imaginons que vous devez copier, tous les jours ou toutes les semaines, 20 tableaux ou plus depuis une base de données vers une autre.

Vous pourriez créer un travail pour chaque tableau. Une approche certainement chronophage si vous travaillez avec 20 tableaux ou plus. Par exemple, si vous devez modifier un travail, vous aurez probablement à modifier tous les autres aussi.

Heureusement, si vous avez accès à RCP (Run-time Propagation), qui définit le schéma de chaque tableau lors de l’exécution, le problème est réglé. Vous pouvez intégrer l’étape Loop en créant un seul travail auquel vous associerez une liste contenant le nom de vos tableaux.

L’étape Loop de DS facilite la copie de données à partir de plusieurs tableaux. Dans le présent article, nous vous montrons comment fonctionne l’intégration de cette étape dans un travail classique.

 

Table des matières

  • Créer un travail avec des étapes Loop
  • Créer un travail parallèle – A
  • Créer un travail séquentiel (Master) – B
  • Exécuter le travail créé

Créer un travail avec des étapes Loop

Pour faciliter la compréhension, nous allons utiliser un exemple d’utilisation de l’étape Loop. Nous avons une liste de tableaux, ainsi que les paramètres de configuration de la source et de la destination. Le but est de copier les données contenues dans les tableaux de la source vers la cible. D’abord, choisissez les noms de vos tableaux.

Voici les noms que nous avons choisis pour l’exemple :

  • TEST.TABLE1
  • TEST.TABLE2
  • TEST.TABLE3
  • TEST.TABLE4

Créer un travail parallèle – A

1. Créez un travail parallèle avec deux étapes DB2 Connector (le type de votre base de données pourrait être différent; choisissez l’étape appropriée : DB2, Neteeza, etc.). Le connecteur de gauche correspondra à votre base de données source, tandis que celui de droite correspondra à votre base de données cible.

2. Enregistrez ce travail sous le nom de votre choix. Gardez à l’esprit que tous les noms de travail dans les projets DS doivent être uniques et ne peuvent commencer par un chiffre. Nous avons choisi de nommer ce travail TEST_LOOP.

Paramétrages

3. Allez dans le menu. Dans « DS Designer», sélectionnez « Edit », puis « Job properties ».

4. La fenêtre de propriétés du travail s’affichera. Cliquez sur l’onglet « Parameters». Nous allons entrer un nom temporaire pour notre tableau. Entrez les paramètres ci-dessous, puis cliquez sur « OK » pour enregistrer.

Parameter name:  TABLE_NAME
Prompt:  TABLE_NAME
Type: String (dans le menu déroulant)

5. Votre travail TEST_LOOP devrait toujours s’afficher dans DataStage Designer. Faites un double clic sur le connecteur source pour en ouvrir la fenêtre de propriétés. Cliquez sur l’onglet « Properties ».

6. Entrez les identifiants de connexion de votre source (nom de la base de données, nom d’utilisateur, mot de passe) manuellement ou à l’aide des paramètres. Il est recommandé d’utiliser les paramètres pour un certain nombre de raisons, notamment le fait que si un mot de passe est amené à changer, vous n’aurez qu’à le modifier dans la section des paramètres. Tous les travaux dans lesquels vous avez utilisé ces paramètres seront mis à jour.

Changer la valeur et répéter

7. Changez la valeur du paramètre « Generate SQL » en « Yes ». Cliquez sur le bouton situé au bout de la ligne « Table name », puis sélectionnez votre nouveau paramètre nommé TABLE_NAME. C’est l’élément provisoire qui lira notre liste de tableaux, laquelle nous introduirons plus tard. Enregistrez les modifications en cliquant sur « OK ».

8. Répétez ces étapes pour le connecteur cible. Entrez les identifiants, changez la valeur du paramètre « Generate SQL » en « Yes », et ajoutez le paramètre TABLE_NAME. Dans la cible, nous devons aussi définir le mode écriture.

(« Insert », « Insert New Rows Only », « Update », « Delete », puis « Insert »…). Nous devons également définir l’action (« Table action ») (« Append », « Truncate », « Replace »). Cliquez maintenant sur « OK ».

Créer un travail séquentiel (Master) – B

Nous allons créer un travail séquentiel SEQ_LOOP. Ce sera notre travail principal (Master job). Les travaux séquentiels contrôlent les travaux parallèles. Dans notre cas, la boucle séquentielle va transmettre le nom du tableau au travail parallèle pour que ce dernier puisse copier le tableau.

Premières étapes

 

1. Une fois le nouveau travail « SEQ_LOOP » ouvert, allez dans le menu et sélectionnez « Edit », puis « Job properties ». Nous allons ajouter le paramètre TABLE_NAME dans la section « Properties ». Cliquez sur « OK » pour enregistrer.

2. Allez dans le menu et sélectionnez « View », puis « Palette ». Glissez-déposez les étapes ci-dessous sur votre fenêtre de travail et nommez-les.

Étape Start Loop : START_LOOP
Étape End Loop : END_LOOP
Étape Job Activity : GENERIC_JOB
Étape ExecCommand : EC_SLEEP

3. En commençant par START_LOOP, glissez-déposez vers GENERIC_JOB pour joindre les étapes. Répétez cette manipulation pour les autres. Votre travail devrait ressembler à ceci :

Propriétés

4. Faites un double clic sur START_LOOP pour accéder à ses propriétés. Configurez les paramètres comme suit :

  • Loop Type: List Loop
  • Delimiter: Comma
  • Delimited Values: TEST.TABLE1, TEST.TABLE2, TEST.TABLE3, TEST.TABLE4.
    (Vous remplacerez ces noms préliminaires par les noms de vos tableaux)

    Cliquez sur « OK » pour enregistrer.

Voici la liste de tableaux que nous allons copier. Dans le travail parallèle, chaque élément de la liste est représenté par le paramètre #TABLE_NAME#. Comme mentionné plus haut, les noms de vos tableaux seront différents. Ce travail lit chaque valeur et traite le tableau dans le travail parallèle.

La boucle est exécutée une fois pour chaque tableau ainsi traité. À chaque itération, le nom du tableau est envoyé à l’étape Job Activity.

Étapes finales

Dans l’étape Job Activity nommée GENERIC_JOB, nous définissons le travail parallèle. Dans notre cas, il s’agit du travail TEST_LOOP déjà créé. Le paramètre TABLE_NAME est déjà listé. Cliquez sur la ligne qui se trouve sous la boîte « Value Expression », puis cliquez sur le bouton carré affichant des points de suspension. Ensuite, cliquez sur « Activity Variable » et sélectionnez « Start_Loop.$Counter ». Enfin, cliquez sur « OK » pour enregistrer.

5. Passons à l’étape ExecCommand nommée EC_SLEEP. Nous ajoutons cette étape pour empêcher le travail de passer trop rapidement d’un tableau à un autre. Il arrive que des travaux plantent ou se figent lorsqu’on travaille avec des boucles dans DS. Pour éviter ces problèmes, nous allons ajouter une pause de 5 secondes dans les travaux.
Dans la console de commandes de l’onglet « ExecCommand», entrez la commande Unix « sleep 5».

6. L’étape End Loop nommée END_LOOP n’a pas besoin d’être paramétrée ni configurée.

Exécuter le travail créé

Nous sommes maintenant prêts à exécuter notre travail. Exécuter le travail SEQ_LOOP copiera chaque tableau de manière séquentielle. Vous pouvez utiliser DS Director pour que le travail soit exécuté tous les jours ou toutes les semaines, par exemple. Si vous avez besoin d’ajouter ou de retirer des tableaux, modifiez simplement la liste dans START_LOOP.

En plus de la méthode décrite ci-dessus, vous pouvez également conserver une liste des tableaux dans un fichier texte et le faire lire dans le paramètre TABLE_NAME. L’avantage de cette approche, c’est que vous pouvez utiliser une liste dynamique de vos noms de tableaux.

Conclusion

Nous avons vu comment utiliser l’étape Loop dans sa forme la plus basique. Gardez à l’esprit que cette étape permet de traiter des chaînes de caractères, des valeurs numériques, des paramètres et des variables.

Évidemment, il est possible de modifier ou de complexifier le travail décrit ici. Par exemple, la source pourrait être un fichier séquentiel au lieu d’une base de données. Nous pourrions aussi ajouter une étape de connexion ou de manipulation de fichier assez facilement. Il y a toutefois bien d’autres façons d’améliorer ce type de travail.

VOUS AVEZ UN PROJET ?