Scénario 6 : Mapping avancé avec rechargement de la base de référence à chaque ligne - 6.1

Composants Talend Guide de référence

EnrichVersion
6.1
EnrichProdName
Talend Big Data
Talend Big Data Platform
Talend Data Fabric
Talend Data Integration
Talend Data Management Platform
Talend Data Services Platform
Talend ESB
Talend MDM Platform
Talend Open Studio for Big Data
Talend Open Studio for Data Integration
Talend Open Studio for Data Quality
Talend Open Studio for ESB
Talend Open Studio for MDM
Talend Real-Time Big Data Platform
task
Création et développement
Gouvernance de données
Qualité et préparation de données
EnrichPlatform
Studio Talend

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 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. On a intentionnellement réduit le nombre d'entrées de cette table.

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

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 sur les métadonnées de connexion aux bases de données et les métadonnées de création de schémas des tables, consultez la section dédiée au sujet dans le Guide utilisateur du Studio Talend.

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

Construire le Job

  1. A 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. Déposez le schéma de base de donnée de référence à partir du nœud Metadata > Db Connections. 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 Db Connections dans le Repository dans l'éditeur graphique. Dans la boîte de dialogue [Components], 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. A 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 : faites un clic-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. Connectez le composant tMysqlInput au tMysqlCommit à l'aide d'un lien Trigger > OnSubjobOk.

Configurer les composants

  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) : ils y seront copiés.

    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 l'a souligné 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, l'expression est : "people.Age". Cliquez sur le bouton OK pour enregistrer les paramètres de mapping et retourner dans l'éditeur 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, entrez 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 ensuite sur le composant tMysqlOutput et vérifiez que le schéma correspond aux paramètres de mapping.

  13. Cochez la case Use an existing connection afin d'utiliser la connexion créée.

  14. Spécifiez dans le champ Table le nom de la table cible.

    Dans les listes Action on table et Action on data, sélectionnez les actions que vous souhaitez effectuer.

Exécuter le Job

  1. Appuyez sur les touches Ctrl+S afin de sauvegarder votre 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 dans l'éditeur graphique 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 vaut 40 ou 60, ainsi que les villes où ils sont allés.

Pour des exemples d'utilisation des schémas dynamiques avec le tMap, consultez :