Accéder au contenu principal Passer au contenu complémentaire

Utiliser le mapping avancé avec rechargement de la base de référence à chaque ligne

Le scénario suivant décrit un Job permettant de récupérer certaines informations sur des personnes dans une base de données de référence, en se basant sur une jointure effectuée sur leur âge. Le flux principal des données source est lu à partir d'une table de bases de données MySQL appelée people_age contenant certains détails sur les personnes, comme leur identifiant (numérique), leur nom et prénom (alphanumérique) ainsi que leur âge (numérique), qui peut être soit 40, soit 60 ans. Le nombre d'entrées de cette table a été intentionnellement réduit.

Les informations de référence sont également stockées dans une table MySQL appelée large_data_volume. Cette table de référence contient un certain nombre d'entrées, dont le nom des villes dans lesquelles les personnes enregistrées dans la table principale sont allées. Le nombre d'entrées a été restreint pour plus de clarté mais, dans le cas d'une utilisation normale, le Job ci-dessous a des résultats plus significatifs quand on traite un gros volume de données de référence.

Pour optimiser les performances, un composant de connexion aux bases de données est utilisé au début de ce Job pour ouvrir une connexion à la base de données de référence afin de ne pas ouvrir et refermer une connexion à chaque ligne de la table de référence chargée.

Un filtre d'expression (expression filter) est appliqué à ce flux de référence, qui permet de ne sélectionner que les données des personnes dont l'âge est 60 ou 40 ans. Ainsi, seules les lignes pertinentes de la table de référence sont enregistrées pour chaque ligne du flux principal.

Ce Job présente donc comment, à partir d'un nombre limité de lignes de flux principal, on peut optimiser la base de données de référence pour n'enregistrer que les résultats correspondant à la clé d'expression (expression key).

Note InformationsRemarque :

En général, comme le chargement des références s'effectue pour chacune des lignes de flux principal, il est plus intéressant d'utiliser cette option quand on ne traite qu'un nombre limité de lignes de flux principal et un grand nombre de lignes de référence.

La jointure s'effectue au niveau du champ age. Les informations de la base de référence sont ensuite chargées pour chacune des lignes du flux principal en entrée, en utilisant l'option de chargement appropriée dans l'éditeur du composant tMap.

Dans cet exemple, les métadonnées ont été préparées pour le composant de connexion et les composants source. Pour plus d'informations concernant la configuration d'une métadonnée de schéma de connexion à une base de données, consultez Centraliser des métadonnées de base de données.

Le Job est formé de cinq composants, quatre composants de bases de données et un composant de mapping.

Relier les composants

Procedure

  1. À partir du nœud Metadata > Db Connections dans le Repository, glissez le schéma de base de données dans l'éditeur graphique. Dans cet exemple, la table source s'appelle people_age.
  2. Lorsque vous déposez le composant, une liste apparaît à l'écran : sélectionnez le composant tMysqlInput.
  3. Sélectionnez le tMysqlIput dans la liste qui s'affiche et déposez la table de connexion à la base de données de référence du nœud Metadata dans l'espace de modélisation graphique. Dans cet exemple, la table de référence s'appelle large_data_volume.
  4. De la même manière, glissez une connexion à la base de données du nœud Metadata dans l'espace de modélisation graphique. Dans la liste qui s'affiche, sélectionnez le composant tMysqlConnection. Ce composant crée une connexion permanente à la base de données de référence afin d'éviter que la connexion ne se referme au chargement que chaque ligne de référence.
  5. À partir de la Palette, déposez dans l'éditeur graphique le composant tMap (famille Processing) et les composants tMysqlCommit et tMysqlOutput (famille Database).
  6. Reliez maintenant tous les composants entre eux : cliquez-droit sur le tMysqlInput correspondant à la table people et maintenez le bouton enfoncé tout en déplaçant le curseur jusqu'au tMap.
  7. Relâchez le bouton lorsque vous êtes sur le tMap, le flux principal de lignes est créé automatiquement.
  8. Renommez le lien de type Main en people, pour pouvoir identifier plus facilement le flux de données principal.
  9. Effectuez la même opération pour connecter la table de référence (large_data_volume) au tMap et le tMap au tMysqlOutput.
  10. Une boîte de dialogue apparaît et vous devez donner un nom au lien de sortie. Dans cet exemple, le flux de sortie s'appelle people_mixandmatch.
  11. Renommez également le lien de connexion à la base de référence en large_volume pour pouvoir identifier plus facilement le flux de données.
  12. Connectez le tMysqlConnection au tMysqlInput via un lien de type OnSubjobOk.
  13. Reliez le composant tMysqlInput au tMysqlCommit à l'aide d'un lien Trigger > OnSubjobOk.

Configurer les composants

Procedure

  1. Double-cliquez ensuite sur le composant tMap pour ouvrir l'éditeur graphique de mapping.
  2. La table Output (qui s'est créée automatiquement quand vous avez lié le tMap au tMysqlOutput) sera composée des lignes concordantes du flux de référence (large_data_volume) et du flux principal (people_age).
    Sélectionnez les lignes du flux principal que vous voulez passer en sortie et faites-les glisser vers la table de sortie (dans le coin supérieur droit de l'éditeur de mapping) : elles y seront copiées.
    Dans cet exemple, la sélection des lignes du flux principal inclut les champs suivants : id, first_name, last_Name et age.
    Dans la table de référence, la colonne city est sélectionnée.
    Faites glisser les colonnes sélectionnées des tables d'entrée (people et large_volume) vers la table de sortie.
  3. Créez maintenant la jointure entre le flux principal et le flux de référence.
    Sélectionnez la colonne age dans la table du flux principal (en haut) et faites-la glisser vers la colonne age de la table du flux de référence (large_volume dans cet exemple).
    L'icône d'une clé apparaît à côté de l'expression liée dans la table de référence. La jointure est maintenant établie.
  4. Cliquez sur le bouton tMap Settings, puis sur le bouton [...] correspondant à Lookup Model et sélectionnez l'option Reload at each row dans la boîte de dialogue Options pour que la base de référence soit chargée à nouveau pour chaque nouvelle ligne traitée.
  5. De la même manière, paramétrez Match Model comme All matches dans la table de référence pour récupérer dans le flux de sortie toutes les occurrences de age qui correspondent.
  6. Implémentez ensuite le filtre, établi à partir de la colonne age, dans la table de référence. Le champ GlobalMapKey est créé automatiquement lorsque vous sélectionnez l'option Reload at each row. Vous pouvez donc utiliser cette expression pour filtrer les données de référence de manière dynamique, pour que seules les informations pertinentes soient chargées avec le flux principal.
    Comme précisé dans l'introduction de ce scénario, le flux de données principal contient uniquement les personnes dont l'âge est de 40 ou 60. Pour éviter de charger toutes les lignes de la table de référence, dont les âges sont différents de 40 et 60, vous pouvez utiliser la valeur âge du flux principal comme variable globale pour alimenter le filtre de référence.
  7. Glissez la colonne Age de la table de flux principal vers le champ Expr. dans la table de référence.
  8. Renseignez ensuite le nom de la variable dans le champ globalMap Key, en utilisant une expression. Dans cet exemple : "people.Age"
    Cliquez sur le bouton OK pour enregistrer les paramètres de mapping et retourner dans l'espace de modélisation graphique.
  9. Pour terminer l'implémentation du filtrage dynamique du flux de référence, vous devez maintenant ajouter une clause WHERE à la requête de la base de données d'entrée.
  10. A la fin du champ Query, juste après la commande Select, saisissez la clause de type WHERE suivante : WHERE AGE ='"+((Integer)globalMap.get("people.Age"))+"'".
  11. Assurez-vous que le type correspond à la colonne utilisée comme variable. Dans cet exemple, la donnée Age est du type Integer. Veillez aussi à utiliser la variable de la manière dont vous l'avez paramétrée dans le champ globalMap key de l'éditeur de mapping.
  12. Double-cliquez sur le composant tMysqlOutput pour définir ses propriétés.
  13. Cochez la case Use an existing connection afin d'utiliser la connexion créée.
    Définissez le nom de la table cible et les actions de la base de données à effectuer.

Exécuter le Job

Procedure

  1. Appuyez sur Ctrl + S afin de sauvegarder le Job.
  2. Cliquez sur l'onglet Run au bas de l'espace de modélisation graphique, afin d'afficher l'onglet d'exécution.
  3. Dans la vue Debug Run, cliquez sur le bouton Traces Debug pour voir la progression du traitement des données.
    Pour une meilleure visibilité, il est possible d'agrandir la vue du Job lors de l'exécution en double-cliquant simplement sur l'onglet portant le nom du Job.
    Les données de référence sont chargées à nouveau pour chaque ligne du flux principal qui correspond à la contrainte d'âge. Toutes les correspondances à la condition age sont récupérées à partir des lignes de la table de référence et regroupées dans le flux de sortie.
    Si vous vérifiez les données contenues dans la table people_mixandmatch nouvellement créée, vous y trouverez toutes les copies basées sur age correspondant aux différentes personnes dont l'âge est 40 ou 60, ainsi que les villes où elles sont allées.

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – faites-le-nous savoir.