Accueil / Blog / Métier / 2013 / Talend Tutoriel : comprendre les connexions iterate

Talend Tutoriel : comprendre les connexions iterate

Par Gaël Pegliasco publié 20/12/2013
Contributeurs : Anaël Boulier
Le lien iterate est décrit assez succinctement dans le manuel utilisateur de Talend (User Guide). Nous verrons dans ce tutoriel quelques exemples pratiques illustrant son fonctionnement.

Comprendre l'itération

Le lien iterate permet deux choses : 

  1. De répéter certaines actions qui n'acceptent pas de flux en entrée et sont donc des composants de début de sous-job comme, par exemple, la plupart des t<Quelque chose>Input : tInputFileDelimited, tMysqlInput, …
  2. D'exécuter des traitements en parallèle via l'option « Exécuter parallèlement » du lien « iterate »

C'est un lien qui ne transmet pas d'enregistrement, contrairement au lien « Main ». Il permet de boucler sur les éléments du sous-job auquel il est attaché.

Nous vous présenterons ci-dessous 3 versions de l'utilisation de ces connexions dans le cadre d'un exercice de consolidation de la liste des clients d'un entrepôt de données avec ceux des agences.

Les connexions iterate sont utilisées pour boucler sur le sous-job d'alimentation des clients dans l'entrepôt, et ce pour chaque agence. Le sous job n'a pas grande importance et n'est pas décrit. Seules les connexions iterate sont détaillées dans cet article.

Itération version 1 - tFlowToIterate

Cette version utilise le composant tFlowToIterate pour exécuter la lecture des clients de chaque agence.

Dans cette solution une fois la connexion à l’entrepôt réalisée, la table des agences de l'entrepôt est lue afin de retrouver les paramètres de connexion à la base de données de l'agence en cours de traitement.

select * from agence;

IDNOMPAYSHOSTDB_NAMEUSER_PASSLOGINPORT
1 Subway USA localhost agence_1 secret root 3306
2 Au bon petit déjeuner FRANCE localhost agence_2 secret root 3306

Talend

Le composant tFlowToIterate récupère chaque ligne en entrée et stocke dans la variable globalMap un couple « Clef, valeur » pour chaque colonne de la ligne reçue.

La clef étant par défaut le nom de la colonne de l'enregistrement traité.

Le composant tFlowToIterate est paramétré comme indiqué ci-dessous afin de permettre de définir nous-même les noms des clefs utilisées dans le globalMap :

Talend globalMap

Ensuite, le composant tFlowToIterate appelle le composant tMySQLInput qui va lire les clients de l'agence.

Ce dernier a été configuré pour définir lui-même ses paramètres de connexion à la base de l'agence à l'aide du globalMap :

Talend globalMap : paramètres de connexion

Dans ce premier exemple, l'on comprend que le lien tFlowToIterate permet de se connecter en série à plusieurs bases de données puis de boucler sur la lecture de la table des clients dans chacune de ces bases.

Vous n'auriez pas pu lire directement les informations de connexion aux agences de l'entrepôt via la table AGENCE de l'entrepôt en connectant directement la table "AGENCE" à la table "CLIENT_AGENCE" via un lien iterate: ces liens ne transmettant pas d'information vous n'auriez pas pu récupérer les informations de connexion à la base AGENCE dans la table "CLIENT_AGENCE".

Itération version 2 - tJavaFlex

Pour compléter la remarque précédente, on serait tenté de se demander en regard du composant tMySQLInput de la table"AGENCE" « Pourquoi utiliser un tFlowToIterate alors que l'on pourrait brancher le lien row1 de la table agence directement sur la table des clients de l'agence et récupérer ses colonnes pour paramétrer la connexion à l'agence dans tMySQLInput ? »

La réponse est « Parce que le composant tMysqlInput n'accepte pas de flux Main entrant ».

Dans cette seconde proposition pour boucler sur les agences de l'entrepôt, le tJavaFlex est utilisé pour positionner les paramètres de connexion dans le globalMap à la place du tFlowToIterate. Il n'apporte rien d'autre à cet exemple qu'une mise à jour via Java.

Talend tJavaFlex

Sa configuration est la suivante :

Talend tJavaFlex_1

Pourquoi utiliser le tJavaFlex et non pas le tJavaRow ou le tJava ? 

Dans ce cas de figure le tJava aurait pu remplacer le tJavaFlex sans problème.

Le tJavaRow n'aurait pas pû être utilisé car il ne propose pas de lien « iterate ».

A la différence de tJava, tJavaFlex permet de saisir 2 portions de code Java qui seront exécutées une unique fois dans le fonctionnement du composant : avant la réception des données (code initial) et après le traitement des dernières données (code final).

Le tJavaFlex accepte des flux entrants et sortants. Le tJava ne propose pas de flux sortant pour chaque ligne d'enregistrement reçue.

Au passage, pour connaître toutes les clefs disponibles dans la globalMap, vous pouvez exécuter le code suivant dans un tJava :

System.out.println("globalMap Content: " + (String)globalMap.toString());
globalMap Content : {agence_user_pass=secret, 
tMysqlConnection_2_SUBPROCESS_STATE=0,
tHash_Lookup_entrepot=org.talend.designer.components.lookup.memory.AdvancedMemoryLookup@a49e885,
agence_host=localhost,
agence_port=3306,
agence_login=root,
agence_db_name=agence_1,
tMysqlInput_3_SUBPROCESS_STATE=0,
tMysqlInput_2_QUERY=SELECT `client`.`ID`, `client`.`NOM`,
`client`.`ADRESSE`, `client`.`CODE_CLIENT` FROM `client`,
db_tMysqlConnection_2=entrepot, conn_tMysqlConnection_2=com.mysql.jdbc.JDBC4Connection@7a407909,
tMysqlInput_2_NB_LINE=20, tMysqlInput_3_QUERY=SELECT host as agence_host,
db_name as agence_db_name,
user_pass as agence_user_pass, login as agence_login, port as agence_port FROM agence,
concurrentHashMap={row21=1, entrepot0=1, row10=1}, tMysqlInput_2_SUBPROCESS_STATE=1}

Itération version 3 – tFileList

Cette version utilise le tFileList pour lire des fichiers .properties contenant les paramètres de connexion de chaque agence puis les charger dans le contexte d’exécution.

tFileList

Une fois les paramètres de contexte chargés pour chaque fichier, les connexions aux bases de données sont réalisées et le traitement lancé.

agence_1.properties
agences_Database=agence_1
agences_Server=localhost
agences_Port=3306
agences_Login=root
agences_Password=secret
numero_agence=1

Talend tFileList-1

Talend tFileList-2

Talend tFileList-3

Talend tFileList-4

Talend tFileList-4

 

ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
Makina Corpus devient partenaire Gold de Talend Makina Corpus devient partenaire Gold de Talend 12/05/2009

Préparez votre agenda de formation pour la rentrée ! Préparez votre agenda de formation pour la rentrée ! 21/12/2015

Drupal8, PostgreSQL, Python scientifique... Découvrez nos nouvelles formations et les dernières ...

Geocoder avec Talend Open Studio 22/05/2014

Mettre en place un job de geocodage d'adresses (depuis un fichier XLS) dans l'ETL Talend Open ...

Makina Corpus participe à la conférence mondiale sur OpenStreetMap Makina Corpus participe à la conférence mondiale sur OpenStreetMap 09/09/2019

Du 21 au 23 septembre se tient à Heidelberg, en Allemagne, la douzième conférence annuelle sur ...

Créer une carte avec Umap Créer une carte avec Umap 03/07/2019

[ Tuto ] créer une carte utilisant OpenStreetMap et y ajouter ou importer des données, puis ...