TP Etl
TP Etl
TP Etl
Structure de l’organisation
Le siège social héberge la majeure partie des fonctions administratives, soit un nombre important d’employés, entre
600 et 800. Le siège social centralise aussi la gestion des stocks, la vente par catalogue, la vente par internet et
l’import - export. Néanmoins, certains employés gèrent aussi ces fonctions depuis les différentes filiales.
Les employés sont enregistrés dans la base de données selon cinq niveaux :
- Pays
- Compagnie
- Département
- Section
- Groupe
Les informations complémentaires sur les employés sont notamment :
- Date d’entrée et de départ de l’employé
- Date de début et de fin de contrat (pour certain contrat)
- Adresse
- Sexe
- Salaire
- Responsable hiérarchique
L’offre
La société propose environ 5500 références. Certaines ne sont pas vendues dans tous les pays, d’autres, de part les
volumes commercialisés, reflètent certaines particularités régionales, certains sports nationaux. Tous les noms sont
fictifs.
Les produits sont organisés selon 4 niveaux :
- Ligne de produit
- Catégorie de produit
- Groupe de produit
- Produit
Chaque produit a un coût et un prix de vente. Le système informatique gère tous les prix en dollars. En utilisant les
dates de début et de fin, ces prix varient en fonction du temps. Cet historique est sauvegardé. Le système gère aussi
les remises pour certains produits, à certaines périodes. Les prix sont généralement uniques de part le monde.
TP De Business Intelligence 10/03/2019
MASTERE Data Sciences pour l'Ingénierie Intervenant : Jonathan Fontanel
Les clients
Les clients sont repartis à travers le monde, notamment dans les pays où se trouvent des filiales, mais pas
uniquement. Les noms et adresses sont fictifs, même si les villes, régions/comtés et pays, sont réels. La base de
données enregistre environ 90 000 clients, pas tous actifs.
Les commandes
Chaque commande pointe vers le commercial qui a enregistré la vente. Environ 980 000 commandes sont
enregistrées, commandes qui reflètent notamment les saisonnalités. Chaque commande comprend une ou plusieurs
lignes, une ligne par produit.
Les fournisseurs
Chaque produit provient d’un fournisseur qui est basé dans un pays, mais toutes les commandes sont passées par le
siège social. Il y a 64 fournisseurs, mais un seul fournisseur par produit.
Ces tables sont stockées dans la base de données Microsoft Access nommée orion.mdb, hormis la table Staff stockée
dans le fichier Microsoft Excel nommé staff.xls. La base de données Microsoft Access a été exportée sous format
TXT.
4. Schéma de l’entrepôt
Voici le schéma en étoile de l’entrepôt de données :
TP De Business Intelligence 10/03/2019
MASTERE Data Sciences pour l'Ingénierie Intervenant : Jonathan Fontanel
Geography_Dim
Street_ID INTEGER
Continent VARCHAR(30)
Customer_Dim Country CHARACTER(2)
Customer_ID INTEGER State_Code CHARACTER(2)
Customer_Country CHARACTER(2) State VARCHAR(25)
Customer_Group CHARACTER(40) Region VARCHAR(30)
Customer_Type CHARACTER(40) Province VARCHAR(30)
Order_Fact County VARCHAR(60)
Customer_Gender CHARACTER(1) #Customer_ID INTEGER
Customer_Age_Group CHARACTER(12) City VARCHAR(30)
#Employee_ID INTEGER Postal_Code CHARACTER(10)
Customer_Age SMALLINT #Street_ID INTEGER
Customer_Name CHARACTER(40) Street_Name VARCHAR(45)
#Product_ID INTEGER
Customer_Firstname CHARACTER(20) #Order_Date DATE
Customer_Lastname CHARACTER(30) Product_Dim
#Order_ID INTEGER
Customer_Birth_Date DATE Product_ID INTEGER
Order_Type SMALLINT
Product_Line CHARACTER(20)
Delivery_Date DATE
Organization_Dim Product_Category CHARACTER(25)
Quantity SMALLINT
Employee_ID INTEGER Product_Group CHARACTER(25)
Total_Retail_Price DECIMAL(13,2)
Employee_Country CHARACTER(2) Product_Name CHARACTER(45)
Costprice_Per_Unit DECIMAL(13,2)
Company CHARACTER(30) Supplier_Country CHARACTER(2)
Discount DECIMAL(5,2)
Department VARCHAR(40) Supplier_Name CHARACTER(30)
Section VARCHAR(40) Supplier_ID INTEGER
Org_Group VARCHAR(40)
Job_Title VARCHAR(25) Time_Dim
Employee_Name VARCHAR(40) Date_ID DATE
Employee_Gender CHARACTER(1) Year_ID CHARACTER(4)
Salary DECIMAL(13) Quarter CHARACTER(6)
Employee_Birth_Date DATE Month_Name VARCHAR(20)
Employee_Hire_Date DATE Weekday_Name VARCHAR(20)
Employee_Term_Date DATE Month_Num SMALLINT
Weekday_Num SMALLINT
Implémenter la création des tables de l’entrepôt sous MySQL. Commencer par les tables Customer_Dim et
Product_Dim grâce aux scripts disponibles sur :
http://fc.isima.fr/~fontanel/BI/MASTERE_DATA_SCIENCE/EDC_TALEND/
Une bonne pratique est de créer un utilisateur spécifique pour votre ETL dans votre SGBD.
Maintenant que les tables de l’entrepôt sont créées, il faut réaliser les processus qui vont remplir ces tables à partir
des données sources.
- Créer un job nommé Job01_Customer_Dim
- Choisir les fichiers sources (Customer puis Customer_Type) et les importer dans le Design Workspace
- Choisir la table cible (Customer_Dim) et l’importer dans le Design Workspace avec l’option tMySQLOutput
ou TMSSqlOutput.
- A l’aide d’un tMap pour chaque fichier Customer et Customer_Type, modifier les types des colonnes :
o Pour la colonne Customer_Type_ID du fichier Customer_Type, modifier son type String en Int avec
les méthodes suivantes : Integer.parseInt, StringHandling.SUBSTR, indexOf(",")
o Pour le fichier Customer,
§ Modifier la date d’anniversaire avec la méthode TalendDate.parseDate pour que celle-ci
devienne une date
§ Modifier aussi le Customer_Type_ID pour que celui-ci soit aussi en INT
§ Modifier les colonnes Country et Gender avec la fonction StringHandling.SUBSTR pour que
les données extraites soient bien présents dans la table du datawarehouse
- Après ces premières transformations, ajouter le composant « tMap » pour faire le lien entre les données
sources et les données cibles.
o Faire une jointure entre les deux tables sources (Customer_Type et Customer).
o Relier les colonnes sources aux colonnes cibles en faisant les transformations nécessaires
o Créer une nouvelle variable avec l’âge des clients :
TP De Business Intelligence 10/03/2019
MASTERE Data Sciences pour l'Ingénierie Intervenant : Jonathan Fontanel
§ Expression :
Short.parseShort(String.valueOf(Mathematical.INT(TalendDate.formatDate("yyyy",Talend
Date.getCurrentDate()))-
Mathematical.INT(TalendDate.formatDate("yyyy",row11._Birth_Date_))))
§ Type : double
§ Variable : age
o La colonne cible CUSTOMER_AGE est égale à cette variable age.
o La colonne cible CUSTOMER_AGE_GROUP est définie de la façon suivante :
§ Var.age<30?"<30 years": Var.age<46?"30-45 years": Var.age<61?"46-60 years":
Var.age<76?"61-75 years": ">75 years"
o Utiliser les méthodes suivantes pour vérifier que les données ne dépassent pas dans la colonne de la
table du datawarehouse : Integer.parseInt, StringHandling.SUBSTR, .indexOf(",")
o Enfin, modifier la date d’anniversaire pour que celle-ci correspondent bien à la colonne attendue
dans le datawarehouse avec les méthodes suivantes : TalendDate.TO_DATE, TalendDate.formatDate
- Dans le Design workspace, vous afficherez un petit commentaire pour décrire le job à l’aide du composant
Misc / Note (à faire pour tous les jobs).
- Attention de bien supprimer les données dans le composant de sortie (option à sélectionner) afin de ne pas
avoir de doublon à chaque lancement du job.
- Lancer le job en cliquant sur Run.
- Attention il se peut qu’une des lignes du fichier Customer ne soit pas bonne et déclenche des erreurs dans
votre job. Dans le premier tMap, vous pouvez ajouter des filtres (Deuxième bouton)
- Ces filtres permettent de pouvoir filtrer en fonction de données attendues (les données ne correspondant
pas ne sont pas prises en compte).
- Servez-vous du filtre pour enlever la ligne vous posant problème