Académique Documents
Professionnel Documents
Culture Documents
(par la pratique...)
https://www.insee.fr/fr/statistiques/4991205
Récupérer les
fichiers CSV des
années 2018,
2019, 2020.
Pour les postes
salariés, A17
normalisation
Détail du PIVOT :
Données normalisées
Données dénormalisées
dénormalisation
© 2023 Atol Conseils et Développements Page 13 / 70
Le cas d’usage à traiter
3ème étape – définir l’algorithme du traitement de préparation des données
Tout traitement de préparation de données correspond à l’implémentation d’un algorithme
Il est possible d’implémenter cet algorithme avec un outil ETL, un script python (ou R), du code JAVA, ou
des fonctionnalités propres à un outil de dataviz => par exemple Power Query dans Power BI
Détaillons l’algo pour notre besoin de préparation de données :
1. Définir le fichier CSV comme flux source
2. Extraire les données et récupérer les colonnes utiles
3. Extraire l’information concernant le département
4. Filtrer les données pour ne conserver que les départements de la France métropolitaine (donc
exclure les départements 971, 972, 973, 974)
5. Pivoter les données afin de constituer un data-set normalisé adapté au besoin :
➢ Code Geo (donc Dpt) / Année / Code Activité A17 / Tranche effectif / Nb salariés
L’ETL Pentaho Data Integration nous permet de répondre facilement au besoin, car il dispose de toutes les
étapes de traitement nécessaires
Aucune ligne de code ne sera écrite pour effectuer le traitement !
Traitement à exécuter
Exemple: intégration d'un fichier plat en base de
données
« Kettle Engine » :
Moteur de transformation de données (lib. Java)
PDI nécessite l'installation d'une machine virtuelle JAVA : soit un JRE (Java Runtime
Environment), soit un JDK (Java Development Kit).
PDI 8 nécessite Java 8
Une variable d'environnement JAVA_HOME (ou PENTAHO_JAVA_HOME) doit être définie
dans le système d'exploitation, sous Windows depuis les « propriétés système » :
REPERTOIRES de KETTLE
Job (Tâche)
Transformation
Une transformation est un traitement de données Un job permet d'effectuer des tâches
qui peut toujours être représenté par l'acronyme ETL : d'administration et de séquencement non liées à un
extraction(s), transformation(s), chargement(s) traitement ETL de flux de données comme ceux gérés
dans une transformation.
Des liens ("hops") entre les étapes ("steps")
permettent la circulation de flux de données sous Un job permet d'effectuer des tâches de
forme de lignes ("records") récupération et d'envoi de fichiers, d'exécution
conditionnelle, de notification par mail, de copie,
Chaque ligne comporte toujours un nombre défini d'archivage, de vérification d'existence d'objets
de champs ("fields") dans un ordre donné et avec un (fichiers...), de lancement de scripts SQL ou shell...
type précis (String, Integer, Date...)
Un job possède un fonctionnement séquentiel. Les
L'exécution d'une transformation s'appuie sur le étapes d'un job sont toujours traitées l'une après
parallélisme. Il n'est donc par exemple pas possible de l'autre (un job possède donc un début et une fin et
définir dans une transformation un ordre de commence toujours par une étape "START")
chargement préférentiel lorsqu'il y a plusieurs cibles
La séquentialité d'un job est toujours employée pour
enchaîner des transformations dans un ordre précis.
Cet ordre est souvent déterminé par des règles métiers
(contraintes de clées étrangères entre les tables par
exemple) ou d'autres facteurs.
Installation de Kettle
Dézipper l'archive et créer un raccourci sur le bureau
Dans le répertoire extrait, double-cliquer sur Spoon.bat pour lancer le client de
conception graphique :
Le langage Java utilise des types de données de référence qui correspondent aux types
manipulés par les SGBD :
Chaînes de caractères : String
Nombres entiers: Integer
Nombres décimaux: Number et BigNumber
Booléens (vrai/faux) : Boolean
Dates et Heures : Date et TimeStamp
Données binaires : Binary
Données de type Date Exemple de format de sortie pour la date « 25 Décembre 2010 » :
3
dd/MM/yyyy : 25/12/2010
yyyy-MM-dd : 2010-12-25
Référence complète dans l'API java de Oracle :
https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/text/SimpleDateFormat.html
NB : pour le traitement, on
prendra le fichier CSV de 2020
Lancer les 2 commandes suivantes pour vérifier la présence de 4 tables dans la base de
données « agrosup » (il s’agit des tables du modèle en étoile qui va stocker les données) :
\c agrosup
\dt
Page 40 / 70
© 2023 Atol Conseils et Développements
La modélisation multidimensionnelle
Clients
Table de faits:
●
Ventes
Tables de
dimensions:
Magasins Produits ●
Clients
●
Produits
Ventes ●
Temps (qui passe..)
●
Secteurs commerciaux
●
Magasins
Réseaux
Temps
commerciaux
Chez Atol CD, nous conseillons l'usage exclusif du modèle en étoile (éventuellement
avec une ou plusieurs dimensions floconnées pour certains cas de figures)
Ce concept est particulièrement utile car il permet de suivre l'évolution des données descriptives des
données de la table de faits au fil du temps, particulièrement lorsque ces données ne sont pas
historisées dans les systèmes sources.
Le principe des dimensions à variation lente est de conserver un historique des changements de
valeurs des attributs d'une dimension, plutôt que de simplement les mettre à jour lorsqu'une nouvelle
valeur est disponible. Ceci permet ainsi d'avoir une vue plus complète de l'évolution des données au
fil du temps.
Au début de l’année 2011 il quitte la Côte-d'Or (21) pour aller habiter dans les Alpes-Maritimes (06).
Afin que les résultats stockés dans la table de faits soient corrects, la dimension “client” doit stocker 2
lignes pour ce client, afin de conserver son historique d’adresse (soit 2 versions de ce client dans la
dimension) :
➔
une ligne lorsqu’il habitait dans le 21
➔
une autre ligne lorsqu’il habite dans le 06.
Pour chacune de ces versions est précisée la date de début et de fin de validité, ainsi qu’un numéro
de version, et éventuellement un flag “version courante : O/N”
La clef primaire de la table de dimension ne peut pas être l’identifiant métier CL-8554 issu de la base
de production (car celle-ci serait dupliquée en cas d’existence de plusieurs versions d’un client)
Une clef technique (tk pour technical key) est donc employée, et est artificiellement créée côté SID,
lors du traitement de chargement de l’entrepôt de données. Cette clef technique qui référence le
client dans la table de faits (et jamais la clef métier)
Dans l’outil décisionnel qui va utiliser le modèle en étoile (cube, outil de dataviz…) les liens
techniques (fk de la table de fait posées sur les tk) entre la table de faits et les tables de
dimensions vont permettre une gestion automatique de l’affectation des commandes sur le bon
département, selon la date : à partir de 2011, les commandes de ce client seront bien affectées
sur le département 06 (et avant, elles le seront sur le 21)
Bonne pratique : pour toutes les dimensions, on crée un enregistrement avec tk = -1 « attribut inconnu »
afin de gérer les données insérées dans la table de faits pour lesquelles on n’aurait pas trouvé de référence
dans les tables de dimensions
Pour notre cas d’usage, il nous faut donc alimenter les 3 dimensions, comme suit :
➔
Dimension « département »
Fichiers « departement_2022.csv » et « region_2022.csv » (issus de l’Insee)
➔
Dimension « code d’activité » à partir des référentiels A17 et A5
Fichier « Codes_activités.xlsx » (construit à partir de plusieurs fichier Insee)
➔
Dimension « tranche effectif »
Sera gérée sous forme de data-set interne à PDI (étape grille de données)
Chargement de la
dimension département :
(code activité) :
C’est donc une boucle dont voici la méthode d’implémentation dans PDI
3/ On doit créer une nouvelle transformation « load all CSV » pour piloter les itérations à effectuer :
4/ On peut alors créer un job global qui va effectuer tout le travail demandé :
NB : L’étape RAZ permet de vider l’ensemble des tables avant leur chargement
delete from fact_salaries;
delete from dim_dept;
delete from dim_naf;
delete from dim_tranche;
Glisser-déposer la viz