Vous êtes sur la page 1sur 7

Utilisation du moteur snowflake et de l’ETL Matillion

Dans le cadre d’un projet de suivi de métrique autour de la flotte de véhicule


électrique il vous est demandé d’implémenter une architecture permettant de
redescendre dans power BI des données relatives au véhicule électriques en
circulation dans l’état de Californie. Cette étude vise à la fois à suivre la flotte, et à
traiter en mode batch les données de consommation électrique.

Pour cela vous disposez de fichier à disposition dans un datalake azure. Le format de
ces fichiers

Fichier Stockage dossier format Description


Stations_that_mee Datalake Raw/charging- csv
t_NEVI_requireme azure point-california
nts_(October_202
3).csv
DC_fast_charg Datalake Raw/charging- csv
ing_stations_th azure point-california
at_do_not_me
et_NEVI
Electric_Vehicle Datalake Raw/electrical- csv Donnée référentiel
_Population_Dat azure vehicule- fournit par le métier,
a.csv california contient la liste des
véhicules
commercialisés suivi par
l’étude. Les véhicules en
dehors de cette liste ne
doivent pas être
considérée pendant la
phase d’ingestion. Le
champ base model
all-vehicles- Datalake Raw/electrical- json
model azure vehicule-
california
county-list.csv Email csv
Conception de l’architecture en implémentation

1. Dans une logique de sécurité de la donnée et de cloisonnement il a été


décidé que les données seront à séparer en plusieurs zone en fonction de leur
usage. Une architecture en médaillon sera à implémenter avec les besoins
suivants :

Créer une zone bronze pour recueillir les données alimentées en 1 pour 1 (sans
transformation en provenance de nos différent applicatif. Cette zone servira
de zone de base pour les data scientist mais aussi elle permettra de conduire
la logique d’ingestion des données quotidienne. Cette zone sera directement
alimentée à partir des fichiers du datalake.

Afin de mieux organiser la donnée au sein de cette zone il a été décidé de


séparer cette zone en plusieurs sous zone.

o Une zone ext qui contiendra toutes les tables externe


o Une zone sous raw qui contient nos tables interne snowflake de
notre zone bronze
o Une zone sous ref pour accueillir les données référentielles de
l’entreprise (chargement en one shot ou peu variable)
o Une zone sous tec pour accueillir des tables techniques utiles au
fonctionnement interne des traitements (table temporaire, table de
travail)

 Une zone « silver » qui permettra d’effectuer du time travel


o Avec une sous zone dwh pour accueillir les tables métier finale
o Une zone sous tec pour accueillir des tables techniques utiles au
fonctionnement interne des traitements (table temporaire, table de
travail)

 Une zone « gold »


o Avec une sous zone « datamart » pour accueillir les données qui
seront exposé à power BI (table de fait, de dimension). Ces tables
seront soit des copies des tables dans le silver, soit des tables
agrégées

Proposer sous forme de schéma (draw io ou autre) une architecture qui détaille
quel type de composant est utilisée pour chaque zone.
2. Le client a émis la volonté d’être en capacité d’assurer lui-même le premier
niveau de maintenance, il vous a été demandé de choisir un outil de
transformation des données en mode graphique compatible avec le datalake
azure et avec le lakehouse « snowflake ». Installer l’outil matillion depuis
snowflake.

Créer un warehouse de taille XS via une worksheet SQL

Dans un worksheet intitulé « création warehouse » provisionner un nouveau


warehouse de taille entre 1 et 5 cluster, et activer l’option auto pause pour mettre
en pause le cluster dès qu’il n’est plus utilisé pendant 60 seconde afin de limiter la
facturation, et qui se relance tout seul en cas de besoin pour ne pas avoir à relancer
le cluster manuellement.

https://docs.snowflake.com/en/sql-reference/sql/create-warehouse

Implémentation de l’architecture en médaillon au sein de snowflake

Dans un nouveau worksheet intitulé « création couche base de données »

Implémenter en SQL ou python la logique de création des couches (création des


zones bronze, zone silver, zone gold ainsi que les différentes sous zone). Attention à
bien activer le time travel pour les zones silver et gold

Quelques ressources pour vous aider :

https://docs.snowflake.com/en/sql-reference/sql/create-database

https://docs.snowflake.com/en/sql-reference/sql/create-schema

Chargement des données depuis un fichier en local

La liste des villes de Californie vous a été fournie sous forme de fichier CSV par mail
par le métier. Ces données sont des données de référence qui ne sont pas ou peu
amener à changer. Choisir une méthode pour charger ce fichier dans le datalake et
déterminer l’emplacement le plus appropriée pour ce fichier.
Chargement des données depuis le datalake

1. Suivre la procédure pour créer un lien avec mon datalake azure afin de
permettre le chargement dans la zone bronze de snowflake des données en
provenance de mon datalake : https://docs.snowflake.com/fr/user-
guide/data-load-azure-config

Cette étape comprend la création d’un

 STORAGE INTEGRATION
 D’un stage qui pointe sur le conteneur raw

Voici les informations demandées lors de la configuration

 STORAGE_ALLOWED_LOCATIONS=
('azure://demoepsidl.blob.core.windows.net/raw/')
 AZURE_TENANT_ID = d7c9c94d-28a2-4298-a72e-b1bee01d5b58

Attention : utiliser l’option 1, vous aurez besoin de moi et de me fournir


les infos suivantes quand vous les aurez :
 AZURE_CONSENT_URL
 AZURE_MULTI_TENANT_APP_NAME

2. Lister le contenu de mon stage, et vérifier que vous avez bien accès à tous les
fichiers : https://docs.snowflake.com/en/sql-reference/sql/list

3. Créer une table externe nommée « ext-ref-vehicule » sur le schéma « ext » sur
les fichiers « all-vehicles-model » sans spécifier les colonnes

4. Créer une requête SQL simple sur votre table nouvellement créé en limitant la
volumétrie avec un top 5. Quelle est la structure de la table ?
5. Créer deux tables interne snowflake avec les schémas suivants :

Table Ref-vehicule

Colonne Typage
Make Varchar(50)
basemodel Varchar(50)

Table vehicule-population

Colonne Typage
VIN (1-10) Varchar(50)
County Varchar(50)
City Varchar(50)
State Varchar(50)
Postal Code Varchar(50)
Model Year Varchar(50)
Make Varchar(50)
Model Varchar(50)
Electric Vehicle Type Varchar(50)
Electric Range Varchar(50)

Table Ref-vehicule

6. Charger la table Ref-vehicule depuis la table externe « ext-ref-vehicule »


Via la commande copy into

https://docs.snowflake.com/en/sql-reference/sql/copy-into-table
Automatisation du chargement dans le bronze via Matillion

1. Créer une table technique contenant la liste des fichiers de type CSV à
charger. Choisir un emplacement adéquate pour la création de cette table.

Cette table aura pour vocation d’automatiser le chargement des fichiers du


datalake vers les tables interne snowflake dans l’ETL Matillion. Cette table
décrit pour chaque fichier, quel est le séparateur et dans quelle table cible le
fichier sera chargé.

Cette table contiendra les colonnes suivantes de type varchar :

Chemin vers le Nom du fichier Séparateur Schéma Table


fichier Destination Déstination

Voici un exemple d’alimentation pour le fichier Electric_Vehicle_Population_Data.csv

Chemin vers le Nom du fichier Séparateu Schéma Table


fichier r Destinatio Déstinatio
n n
raw/electrical- Electric_Vehicle_Population_ ; Raw vehicule-
vehicule-california Data.csv population

1. Créer un nouveau flux d’orchestration dans Matillion pour charger de manière


générique (c’est-à-dire via une seule tache de transformation) tous les fichiers
de type CSV présent dans le datalake. Les tables de destinations seront les
tables créées précédemment Ref-vehicule et "vehicule-population »

Utiliser cette table dans matillion et créer une logique d’itération pour charger toutes
ces tables.

Utiliser les composants :

 Table Iterator
 Variables
 Azure Blob Storage Load

Chargement du silver dans matillion

1. Créer un flux de transformation dans matillion de ma zone silver pour charger


une table qualifiée contenant mon axe véhicule. Cette table sera alimentée
à partir des données de ma table bronze véhicule. A des fins de qualité de
donnée exclure les véhicules qui ne sont pas présent dans la liste de
véhicule json via une jointure.
 Prévoir à minima un dédoublonnage de mes données
 Prévoir un renommage des colonnes en enlevant les espaces ?
 Prévoir de ne charger que les véhicule qui sont connu dans le
référentiel de véhicule (prévoir donc une jointure)

Vous aimerez peut-être aussi