Gestion des références - 6.5

Talend ESB Studio Guide utilisateur

EnrichVersion
6.5
EnrichProdName
Talend ESB
task
Création et développement
EnrichPlatform
Studio Talend

Lorsque vous implémentez une jointure (notamment Inner Join et Left Outer Join) dans un tMap, sur différentes sources de données, il y a toujours un flux principal (Main) et un ou plusieurs flux de référence (Lookup) connectés au tMap. Tous les enregistrements du flux de référence doivent être chargés avant de traiter chaque enregistrement du flux principal. Trois types de modèles de chargement de Lookup sont fournis, correspondants à différents besoins métier et besoins en performances : Load once, Reload at each row et Reload at each row (cache).

  • Load once : charge une fois (une fois seulement) tous les enregistrements du flux de référence, soit dans la mémoire, soit dans un fichier local, avant de traiter chaque enregistrement du flux principal, si l'option Store temp data est configurée à true. Cette configuration est celle par défaut et est l'option recommandé si vous avez un jeu d'enregistrements volumineux à traiter dans le flux principal, à l'aide d'une jointure entre les deux flux.

  • Reload at each row : charge tous les enregistrements du flux de référence pour chaque enregistrement du flux principal. Généralement, cette option augmente le temps d'exécution du Job, à cause du chargement répété des enregistrements du flux de référence à chaque enregistrement du flux principal. Cependant, cette option est recommandée dans les situations suivantes :

    • le flux de données de référence est constamment mis à jour et vous souhaitez charger les dernières données de référence pour chaque enregistrement du flux principal, pour obtenir les données les plus récentes après exécution de la jointure ;

    • les données sont peu nombreuses dans le flux principal et le flux de référence contient de nombreuses données d'une table de base de données. Dans ce cas, l'utilisation de l'option Load once peut causer une erreur de mémoire OutOfMemory. Vous pouvez utiliser des paramètres variables dynamiques comme une clause WHERE pour mettre à jour le flux de référence à la volée durant le chargement, avant traitement de la jointure du flux principal. Par exemple, consultez Recharger des données à chaque ligne.

  • Reload at each row (cache) : fonctionne comme le modèle Reload at each row, tous les enregistrements du flux de référence sont chargés pour chaque enregistrement du flux principal. Cependant, ce modèle ne peut être utilisé avec l'option Store temp data on disk. Les données de référence sont en cache dans la mémoire et, lorsqu'un nouveau chargement survient, seuls les enregistrements qui n'existent pas déjà dans le cache seront chargés, pour éviter deux fois les mêmes enregistrements. Cette option permet d'optimiser le temps de traitement et d'améliorer les performances de traitement du composant tMap. Notez que vous ne pouvez pas utiliser les options Reload at each row (cache) et Store temp data en même temps.

Notez que, lorsque votre référence est une table de base de données, la bonne pratique est d'ouvrir la connexion au début du Job, afin d'optimiser les performances.

Configurer le mode de chargement d'un flux de référence

Pour configurer le mode de chargement d'un flux de référence :

  1. Cliquez sur le bouton tMap settings en haut à droite de la table de référence, pour afficher les propriétés de la table.

  2. Cliquez sur le champ Value correspondant à l'option Lookup Model, puis cliquez sur le bouton [...] pour ouvrir la boîte de dialogue [Options].

  3. Dans la boîte de dialogue [Options] double-cliquez sur le mode de chargement souhaité, ou sélectionnez-le et cliquez sur OKpour activer l'option et fermer la boîte de dialogue.

Pour un exemple d'utilisation de ces options, consultez la documentation associée au composant tMap.

Recharger des données à chaque ligne

L'option Reload at each row est utilisée pour charger tous les enregistrements d'un flux Lookup pour chaque enregistrement du flux principal.

Lorsque le flux principal contient moins de lignes que le flux de référence (par exemple, avec un ratio de 1000 ou plus) et que l'entrée de référence est un composant de base de données, l'avantage de cette approche est qu'elle permet de gérer des données de références de plus en plus nombreuses, puisque vous pouvez exécuter des requêtes par rapport aux données du flux principal dans le composant de base de données, pour sélectionner uniquement les données de référence correspondant à chaque enregistrement du flux principal. Par exemple, ici, avec des données de référence d'une base de données MySQL.

Les schémas du flux principal, du flux de référence et du flux de sortie se présentent comme suit :

Dans la base de données MySQL, vous pouvez sélectionner uniquement les données correspondant aux valeurs de la colonne id du flux principal. Pour ce faire, procédez comme suit :

  1. Double-cliquez sur le composant tSetGlobalVar pour ouvrir sa vue Component.

  2. Cliquez sur le bouton [+] pour ajouter une ligne et, dans la colonne Key, saisissez id. Dans la colonne Value, saisissez row1.id.

  3. Double-cliquez sur le tMysqlInput pour ouvrir sa vue Component.

  4. Dans le champ Query, saisissez la requête pour sélectionner les données correspondant à la colonne id du flux principal. Dans cet exemple, la requête se présente comme suit :

    Select * from person where id="+(Integer)globalMap.get("id")

Pour plus d'informations sur les composants utilisés dans cet exemple, consultez la documentation associée.