Introduction à l’ETL Talend

Présentation du contexte

Dans ce post je vais présenter quelques fonctionnalités de Talend en me basant sur un exemple simple.

Il me permettra de parler de :

  • La création de metadonnées
  • La création d'un job
  • L'utilisation des tables
  • La transformation sur un champ
  • La jointure entre tables
  • L'insertion des données dans une table
  • Le lancement d'un job

Le but de l'exemple est de remplir une table contenant pour une zone de nom de domaine les informations sur son Top-Level-Domain, son continent et le nom de son pays si il y a lieu.

Nous possédons pour cet exemple :

  • une table « zone » contenant toutes les zones sur lesquelles nous souhaitons associer les informations
  • une table « zone_tld » avec pour chaque zone le top-level-domain correspondant
  • une table « continent_country » avec pour chaque code pays le continent correspondant et le noms du pays.

Nous souhaitons créer une table avec comme information : zon_id, zon_name, zon_tld, zon_extension, zon_country_name, zon_continent.

Creation des Metadonnées

Tout d'abord, il faut créer une connexion à la base de données comme indiqué sur l'image ci-dessous.

metadataConnection

Ensuite, il faut insérer les tables que nous souhaitons utiliser. Il suffit de sélectionner la base que nous venons d'ajouter et de cliquer sur "Retrieve Schema" afin de choisir les tables dans la liste qui est proposée.

metadataTable

Les tables ajoutées apparaissent dans l'arborescence de gauche.

Création d'un Job

Il est maintenant nécessaire de créer un job. Pour cela, rien de plus simple : sélectionnez "Job Design", clic droit puis "Create Job". Il ne vous reste plus qu'a indiquer le nom du job.

createJob

Insertion des tables à utiliser

Nous allons maintenant insérer dans le job les tables dans lesquelles nous souhaitons récupérer les informations.
Il suffit d'aller dans les metadata que nous avons créées et de glisser/déposer les tables à utiliser dans la zone de travail. Il faut ensuite sélectionner le type d'utilisation de la table, si c'est une entrée depuis cette table (Input) ou une sortie vers cette table (Output). En gros, Input pour faire des SELECT et Output pour des INSERT ou UPDATE.

insertTable

Dans notre cas, nous insérons les tables comme ci-dessous :

insertTable2

Transformation sur un champ

Dans la table zone_codump, il y a toutes les zones que nous souhaitons traiter. Les zones sont par exemple : FR, TM.FR, COM.FR, ASSO.FR, PRESSE.FR ... Notre but est de récupérer la dernière extension des zones pour l'indiquer dans le champ zon_extension de la table finale.

Pour cela, nous allons utiliser l'outil tMap afin de gérer cette transformation. Il suffit de sélectionner dans la liste de droite l'outil "tMap" de la catégorie "Processing" puis de le déposer dans l'espace de travail. Il faut ensuite créer le lien entre la table zone_codump et le tMap.

transforme1

Double cliquez sur le tMap afin de le configurer puis cliquez sur le "plus" de la colonne de droite pour ajouter une sortie. Il ne vous reste plus qu'a indiquer le nom de la sortie.

transforme2

Par de simples glisser/déposer, ajoutez les colonnes que vous souhaitez récupérer. Dans notre cas, nous prenons zon_id et zon_name, puis nous ajoutons un champ (en cliquant sur le + de l'encadré en bas à droite) afin de récupérer l'extension de la zone.

transforme3

Le champ zon_extension que nous venons de rajouter est pour le moment vide. En cliquant sur le bouton "..." de la cellule Expression de la ligne correspondant à notre champ, nous allons pouvoir inscrire du code java qui va nous permettre de récupérer l'extension.
Dans notre cas nous utilisons le code suivant :

row1.zon_name.lastIndexOf('.') != -1 ? row1.zon_name.substring(row1.zon_name.lastIndexOf('.')+1) : row1.zon_name

transforme4

Nous avons donc maintenant pour chaque ligne : zon_id, zon_name et zon_extension.

Jointure entre des tables

Afin de retrouver pour chaque zone le top-level-domain, le continent et le nom du pays, nous avons besoin de lier les tables entre elles.
Pour faire cette opération nous allons encore utiliser l'outil tMap. Procédez comme à l'étape précédente afin d'ajouter le composant puis liez le composant avec les différentes tables.

jointure1

Double cliquez sur le tMap afin de le configurer. Pour créer les jointures il suffit de prendre un champ et de le déposer dans la cellule Expr. Key. Les jointures ne sont pas des "inner join" par défaut, il est possible de paramétrer la jointure en utilisant le menu "Unique Match" et la case à choser "Inner Join". Une fois les jointures mises en place nous arrivons à l'état ci-dessous.

jointure2

Insertion des données dans une table

Nous allons maintenant gérer les données qui vont être insérées dans la table finale. Pour cela nous commençons par créer le lien de sortie du dernier tMap puis nous le lions avec la dernière table.
A la question "Do you want to get the schema of the target component ?" nous répondons "Yes", cela permet de pré-remplir les champs à insérer dans la sortie "Out" que nous avons créée.

insert1

Il ne nous reste plus qu'a glisser/déposer les informations que nous souhaitons insérer dans chaque champ.

insert2

Pour gérer le fait que toutes les zones n'ont pas forcement de continent ou de nom de pays associé nous mettons une petite condition sur ces deux champs afin de leur définir une valeur.
Nous pouvons par exemple faire pour le champ zon_continent :
row3.continent != null ? Row3.continent : "Non défini"

Lancement du job

Notre Job est maintenant terminé et ressemble à :

run1

Pour lancer le job il suffit d'aller dans l'onglet Run de l'encadré du bas et de cliquer sur "Run". Il est possible de faire quelques configurations comme cocher la case "Statistique" qui permettra d'afficher l'avancement du processus en indiquant le nombre de lignes traitées.

run2

4 commentaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.