Gestion des références
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ée 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. Pour un exemple, consultez Recharger des données à chaque ligne.
Notez que l'option Reload at each row dans un Job Spark Streaming est supportée uniquement par les composants Lookup Input, comme le tMongoDBLookupInput.
-
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 l'option Reload at each row (cache) dans un Job Spark Streaming est supportée uniquement par les composants Lookup Input, comme le tMongoDBLookupInput.
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.