Vous êtes sur la page 1sur 32

Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.

com/articles/single/6409-mise-place-etl

Accéder à Open-Campu

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS

Mise en place d'un ETL


Par Laté Jonathan Atassé LAWSON-BODY • Publié le 29/10/2017 à 15:51:22 • Noter cet article: ☆☆☆☆☆ (0 votes)
Avis favorable du comité de lecture

Laté Jonathan Atassé LAWSON-BODY

Introduction
L’informatique décisionnelle ou encore la Business Intelligence (BI) est

1 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page
différents moyens, outils et méthodes qu’offre cette technologie, elle permet
de collecter, consolider et restituer les données sous divers formats : rapports,
tableaux de bord, etc…
Introduction
L’objectif de cet article est d’organiser le transfert des données d’une base test Mises-en œuvre des fonctions ETL

source nommé Emode sur Oracle 11G vers une base destination Emode sur
SQL Server 2016 grâce aux fonctions ETL.
Cet article permettra d’expliquer en détail, code source à l’appui les différentes étapes de la conception du projet. Dans un premier
temps j’expliquerai comment j’ai mis en œuvre la vérification (qualité et intégrité) des données à l’aide des requêtes SQL, puis expliquer
les opérations de transferts de données d’Oracle vers SQL Server avec la création de packages que propose SQL Server Intégration
Services, outil de SQL Server Business Intelligence Development Studio 2016.

Mises-en œuvre des fonctions ETL

Prises-en compte de la qualité des données

Le schéma de la base Oracle sur lequel se base le projet ne présente aucune contrainte ni de clé primaire ni de clé étrangère. Ainsi il
peut exister des doublons, de données n’existant dans la table de dimension mais présentes dans la table de faits. Le but de notre
vérification est d’identifier ces données et de les rejeter dans des tables appelées tables de rejet.

Identi�cation des clés primaires et étrangères

J’ai vérifié à l’aide de requête SQL, pour chaque table de la base, l’unicité des clés primaires sur les colonnes correspondantes de nos 4
tables de dimensions (Article_Color_lookup, Article_Lookup, Calendar_Year_Lookup, Outlet_Lookup) et la table de faits (Shop_Facts). J’ai

2 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page
Figure 1. Model relationnel de la base Emode

Véri�cation des clés primaires

3 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page
select
count(*) AS TOTAL_COUNT --211
,count(distinct article code) AS DISTINCT_VALUE_COUNT --211
from ARTICLE LOOKUP;

select
count(*) AS TOTAL_COUNT --663
,count(distinct concat(to_char(article_code),to_char(color_code))) AS DISTINCT VALUE COUNT --661
from
ARTICLECOLORLOOKUP;

select
count(*) AS TOTAL_COUNT --262
,count(distinct week_key) AS DISTINCT VALUE COUNT --262
from
CALENDAR_YEAR_LOOKUP;

select
count(*) AS TOTAL_COUNT --13
,count(distinct shop_code) AS DISTINCT_VALUE_COUNT --13
from
OUTLET LOOKUP;

select
count(*) AS TOTAL_COUNT —89171
,count(distinct id) AS DISTINCT_ VALUE_ —89171
from
shop facts ;

Script 1:Vérification de la qualité des données


De ces vérifications il ressort que la table Article_Color_lookup comporte des données en doubles. Nous les déterminons grâce à la
requête suivante

-- Identify bad primary keys in double


select
count(*)
,count(distinct concat(to_char(article_code),to_char(color_code))) ,article_code as article_code
,article_code as article_code
,color_code as article_code
from
ARTICLE_COLOR_LOOKUP
group by

4 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

Ces données ne seront pas supprimées mais, seront simplement transférées dans les tables de rejet que nous créons à cet effet.

Véri�cation des clés étrangères

Pour être clé étrangère d’une table, toutes les valeurs d’une colonne doivent exister dans la table correspondante. Pour chacune de nos
tables de dimension, il faut vérifier que les clés étrangères présentes dans la table de faits existent comme clé primaire dans les tables
de dimension.
Le code SQL ci-dessous montre comment procéder pour la vérification :

select
count( distinct concat(to_char(article_code),to_char(color_code))) ,article code
,article code
,color code
from
SHOP FACTS
where
concat (tochar(article code),to_char(color code)) not in
(
select
concat(to char(article code),to_char(color code))
from
ARTICLE COLOR LOOKUP
)
group by
article code
,color code 
;

Script 3:Vérification des clés étrangères


De cette requête résulte des clés d’enregistrements qui sont présents dans la table Shop_facts et non dans la table Article_Color_lookup.
Ces données ne seront pas insérées dans la table Article_Color_lookup afin d’obtenir une cohérence de données mais elles seront
rejetées dans la table de rejet correspondante.

5 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

table afin de conserver une trace de ces données. Il faut noter que les différentes tables de rejet créées reprennent exactement les
mêmes colonnes que nos tables d’origine.
Ci-dessous le script de création de table de rejet correspondante à la table Article_Color_Lookup.

CREATE TABLE ARTICLE_COLOR_LOOKUP_REJECT


(
ARTICLE_CODE NUMERIC(6,0),
COLOR_CODE NUMERIC(4,0),
ARTICLE_LABEL VARCHAR(45),
COLOR_LABEL VARCHAR(30),
CATEGORY VARCHAR(25),
SALE_PRICE NUMERIC(13,2),
FAMILY_NAME VARCHAR(20),
FAMILY CODE VARCHAR(3)
) ;

Script 4:Script de création de table de rejet


Le script suivant montre comment les données sont rejetées dans une premier temps sous le schéma Emode avec Oracle

INSERT INTO ARTICLE_LOOKUP_REJECT (


ARTICLE CODE
, ARTICLE LABEL
, CATEGORY
, SALE PRICE
, FAMILY NAME
, FAMILYCODE)
SELECT
AL.ARTICLE CODE
, AL.ARTICLE LABEL
, AL.CATEGORY
, AL.SALE PRICE
, AL. FAMILY NAME
, AL.FAMILY-CODE
FROM
ARTICLE_LOOKUP AL
WHERE
AL.ARTICLE CODE IN(
SELECT
AL2.ARTICLE_CODE
FROM

6 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

Script 5:Script d'insertion dans la table de rejet


Le script de création des autres tables est semblable pour les autres tables. Ces tables nous serviront dans le transfert des données du
premier package.

Développement des packages SSIS

J’ai développé différents packages pour le transfert des données de la base de données Oracle vers SQL Server. Les différentes
fonctionnalités de ces packages sont expliquées dans la suite.

Premier package : transfert des données

Ce package permet de transférer la totalité des données du schéma Emode d’Oracle vers celui de SQL Server. Cela implique les
conditions suivantes :

Vider les données de la base SQL Server avec truncate


Assurer le transfert des données dans les bonnes tables et rediriger les données incohérentes dans les tables de rejet.

Pour vider les données dans la base Emode de SQL Server dont les tables présentes des contraintes entre elles, j’ai choisi de supprimer
d’abord les données dans les tables statiques avant de supprimer celles des tables dynamiques (table contenant des clés étrangères).
Une autre solution possible aurait été de supprimer les contraintes référentielles dans toutes les tables d’Emode sur SQL Server avant de
vider les données et ensuite rétablir ces contraintes.
Ce package nécessite deux connexions : une à la base Oracle et l’autre à la base SQL Server. Après avoir vidé les données, le transfert des
données est assuré d’abord vers les tables de dimensions et ensuite vers la table de faits. Ce package se termine par le package 4 qui est
celui des agrégats.

7 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

Détails du data flow de la table de faits


Pour chaque table de dimension, je récupère toutes les données de la base de données Emode d’Oracle et à l’aide d’un «   lookup »,
j’effectue la redirection des données vers deux tables différentes en fonction des situations.
Les données correctes et respectant les exigences fixés (pas de doublons, contraintes d’intégrité référentielle) sont transférées dans les
bonnes tables. Dans le cas contraire ces données sont redirigées vers les tables de rejet créées.
Ces vérifications sont faites grâce à une requête derrière un « lookup». Ci-dessous se trouve la requête de vérification de la table
Article_Color_Lookup.

SELECT
count(tochar(article_code)||tochar(color_code)) as nb

8 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page
HAVING
count(tochar(article_code)||tochar(color_code)) = 1;

Script 6: Script de vérification du lookup article_color_lookup


Figure 3. Figure 3:Data Flow Article_color_Lookup

9 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

Détails du data flow de la table de faits


Le processus de transfert des données de la table de faits Shop_facts est identique à celui des tables de dimensions à la seule différence
que le « lookup » effectue des vérifications telles que la présence des données identiques et uniques des clés des tables de dimensions

10 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page
ID
, ARTICLE_CODE
, COLOR_CODE
, WEEK KEY
, SHOP CODE
, MARGIN
, AMOUNT_SOLD
, QUANTITY_SOLD
FROM
SHOP_FACTS sf
WHERE
(ID IN
(SELECT ID
FROM SHOP_FACTS sfl
GROUP BY ID
HAVING (COUNT(ID) = 1)))
and
(concat(article_code, color_code) in
(select concat(article_code, color_code) from ARTICLE_COLOR_LOOKUP acl1
group by article_code, color_code
having (count(concat(article code, color_code)) = 1) ))
and
(
article_code in (
select article_code from article_lookup all
group by article code having (count(article code) =1)
)
)
and
(
shop_code in (
select shop_code from outlet_lookup of
group by shop code having (count(shopcode)=1
)
)
and
(
week_key in (
select week_key from calendar_year_lookup cl
group by week_key having (count(weekkey)= 1)
)
);

Script 7:Script de vérification du lookup Shop_facts

11 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

Deuxième package : transfert incrémental et audit manuel

12 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page
Pour ce faire, il a fallu créer sur Oracle un second schéma nommé Emode_inc. Emode_inc nous permet de stocker tout changement
effectué dur les tables de la base Emode sur Oracle.

connect / as sysdba
Create user emode inc
Identified by emodeinc;
Grant connect, resource to emodeinc;

Script 8:Création du schéma Emode_inc


Emode et Emode_inc sont donc très semblable à une différence près : dans chaque table de Emode_inc, nous avons rajouté une colonne
renseignant le type d’opération de mise à jour :

Type_op =’i’ pour les insertions


Type_op =’d’pour les suppressions
Type_op =’u’ pour les mises à jour

On retrouve dans Emode_inc les mêmes tables de dimensions et de fait que dans Emode.

CREATE TABLE ARTICLE_COLOR_LOOKUP_INC


(
ARTICLE_CODE NUMBER(6,0),
COLOR_CODE NUMBER(4,0),
ARTICLE LABEL VARCHAR2(45),
COLOR_LABEL VARCHAR2(30),
CATEGORY VARCHAR2(25),
SALE_PRICE NUMBER(13,2),
FAMILY_NAME VARCHAR2(20),
FAMILY_CODE VARCHAR2(3),
TYPE OP CHAR(1)
);

Script 9:Création de table Article_color_lookup du schéma Emode_inc

Création des triggers dans Emode

13 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

-- article_color_lookup
--insertion
create or replace TRIGGER tri_article_color_lookup_ins AFTER INSERT ON
article_color_lookup FOR EACH ROW
declare type_op char(1) := 'i';
BEGIN
INSERT INTO ARTICLE_COLOR_LOOKUP_INC VALUES(:NEW.ARTICLE_CODE, :NEW.COLOR_CODE, :NEW.ARTICLE LABEL,
:NEW.COLOR_LABEL, :NEW.CATEGORY, :NEW.SALE_PRICE, :NEW.FAMILY_NAME, :NEW.FAMILY_CODE, type_op);
END;
--update
create or replace TRIGGER tri_article_color_lookup_upd AFTER UPDATE ON
article_color_lookup FOR EACH ROW
declare type_op char(i) := 'u';
BEGIN
INSERT INTO ARTICLE_COLOR_LOOKUP_INC VALUES(:NEW.ARTICLE_CODE, :NEW.COLOR_CODE, :NEW.ARTICLE_LABEL,
:NEW.COLOR_LABEL, :NEW.CATEGORY, :NEW.SALE_PRICE, :NEW.FAMILY_NAME, :NEW.FAMILY_CODE, type_op);
END;

--delete
create or replace TRIGGER tri_article_color_lookup_del BEFORE DELETE ON
article_color_lookup FOR EACH ROW
declare type_op char(=) := d;
BEGIN
INSERT INTO ARTICLE_COLOR_LOOKUP_INC VALUESOOLD.ARTICLE_CODE, :OLD.COLOR_CODE, :OLD.ARTICLE_LABEL,
:OLD.COLOR_LABEL, :OLD.CATEGORY, :OLD.SALE_PRICE, :OLD.FAMILY_NAME, :OLD.FAMILY_CODE, type_op);
END;

Script 10:Script de création de trigger pour la table Article_color_Lookup


Pour que les triggers s’exécutent normalement, j’ai attribué des droits d’insertion et de modification dans les tables d’Emode_inc au
schéma Emode.

connect /as sysdba


grant insert,update,delete on emode_inc.outlet_lookup_inc to emode;
grant insert,update,delete on emode_ inc.article_lookup_inc to emode;
grant insert,update,delete on emode_inc.article_color_lookup_inc to emode;
grant insert,update,delete on emode_inc.shop_facts_inc to emode;
grant insert,update,delete on emode_inc.calendar_year_lookup_inc to emode;
create synonym outlet_lookup_inc for emode_inc.outlet_lookup_inc;
create synonym article_lookup_inc for emode_inc.article_lookup_inc;
create synonym article_color_lookup_inc for emode_inc.article_color_lookup_inc; create synonym shop_facts_inc for emode_inc.shop_facts_inc;

14 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

Création des tables d’audit

Pour assurer la traçabilité manuelle des transferts, j’ai créé des tables d’audit qui sont intégré au package. Ce mécanisme me permet
d’avoir les statistiques sur les transferts effectués : les raisons sur un rejet de données, le statut et la date d’un transfert.
Pour cela j’ai créé deux tables d’audit :
Man_audit_load qui contient toutes les informations concernant le transfert : la date de début, le statut du transfert (ok pour un transfert
sans encombre)

create table man_audit_load


(
transfert number int identity(1,1),
transfert date date,
operation status varchar(25)
) ;

Script 12:Création de la table Manual Audit Load

Man_audit_error comme son nom l’indique regroupe l’ensemble des informations sur des erreurs de transferts

create table man_audit_error


(
table_num VARCHAR(20),
primary_key_value VARCHAR(20),
error_code_info VARCHAR(20),
) ;

Script 13:Création table Manual Audit Error

Déroulement du package
Ce deuxième package nécessite deux connexions : l’une à la base Oracle (Emode_inc) et l’autre à la base SQL Server(Emode). Le
package s’exécute en différentes étapes. La stratégie de transfert est telle que les données des tables de dimensions sont d’abord
chargées avant de se faire sur la table de faits.

15 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page
Emode_inc.

Figure 5. Figure 5:Control Flow Package 2

Le principe du transfert reste le même au niveau de toutes les tables. Nous nous intéressons ici à celui de la table
Article_Color_Lookup_inc (Emode_inc d’Oracle) vers la table Article_Color_Lookup (Emode de SQL Server).
Figure 6. Figure 6:Data flow Article_color_lookup_inc

16 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

17 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

et de complexité. Pour y répondre j’ai utilisé la solution offerte par SSIS avec des audits automatiques dans notre package 3. Ce dernier
est très semblable au précédent à la différence qu’on intègre des fonctions automatiques que propose SSIS en ce qui concerne la gestion
des erreurs et le mécanisme d’audit.
Figure 7. Figure 7:Control flow Package 3

18 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

Ci-dessous le contenu du data flow d’Article_color_lookup_inc. Le principe reste le même pour les autres tables.
Figure 8. Figure 8:Data flow Article_color_lookup_inc

19 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

20 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page
chargée des bonnes données. « Multicast » permet de dupliquer le flux et nous effectuons alors deux traitements en parallèle. Grâce à
un « Conditional Split   » le flux est divisé en trois en fonction du champ type_op. Les trois flux sont traités en parallèle, un pour
l’insertion, un pour la modification et le dernier pour la suppression.
Les modifications validant toutes les contraintes sont dirigées vers un « OLE DB Command » qui exécute ensuite une requête SQL
paramétrée, soit INSERT INTO soit UPDATE soit DELETE dans la table du schéma Emode sur SQL Server. Si cette requête a réussi, alors la
modification a bien été prise en compte, sinon un flux d’erreur est créé et les trois flux d’erreurs sont réunis par la suite dans un unique
flux grâce à un « Union All » afin d’être transféré dans une table Audit_error créée à cet effet. Elle contient les informations suivantes :
nom de la table, valeur de la clé primaire, informations sur la source du problème.

Quatrième package : Transfert des tables d’agrégats

Il est question dans ce package de réaliser après chaque modification de la base de données la mise à jour des tables d’agrégats. Cela
passe par une suppression des données des tables (Emode SQL Server) par « Truncate » suivi d’une insertion en utilisant les nouvelles
données. Ce package nécessite deux connexions : une sur Oracle et une autre sur SQL Server.
Figure 9. Figure 9:Package 4

21 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page
truncate table AGG_YR_FP_YW_TI_RV_MA_QT;
truncate table AGG_YR_FP_YW_MO_TI_RV_MA_QT;

Script 14:Suppression des données des tables d'agrégation


Le code de la mise à jour est le suivant :

insert INTO AGG YR FP YW TI RV MA QT


select
CL.WEEK_KEY
,CL.YEAR
,CL.FISCAL_PERIOD as FISC
,CL.YEAR WEEK as YEAR WE
,count(*) as TICKETS
,SUM(SF.AMOUNT_SOLD) as RV
,SUM(SF.MARGIN) as MARGIN
,SUM(SF.QUANTITY_SOLD) as QTE
from
CALENDAR YEAR LOOKUP CL inner join SHOP FACTS SF
on CL.WEEK = SF.WEEK KEY
group by
CL.WEEK_KEY
,CL.YEAR
,CL.FISCAL_PERIOD
,CL.YEAR_WEEK
order by
CL.WEEK KEY ASC;

insert INTO AGG YR FP YW MO TI RV MA QT


select
CL.WEEK_KEY
,CL.YEAR
,CL.FISCAL_PERIOD as FISC
,CL.YEAR_WEEK as YEAR WE
,CL.MONTH
,CL.MONTH NAME
,count(*) as TICKETS
,SUM(SF.AMOUNT_SOLD) as RV
,SUM(SF.MARGIN) as MARGIN
,SUM(SF.QUANTITY SOLD) as QTE
from
CALENDAR_ YEAR LOOKUP CL inner join SHOP FACTS SF
on CL.WEEK_KEY EY = SF.WEEK KEY

22 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page
,CL.MONTH_NAME
order by
CL.WEEK KEY ASC;

Script 15:Insertion de données dans les tables d'agrégation

Automatisation de l’exécution des packages

Il existe trois façons d’automatiser l’exécution de nos packages :

Exécution immédiate
Tâche planifiée au niveau du système d’exploitation
Automatisation en utilisant SQL Agent
Dans la suite nous présentons ces différentes façons.

Exécution immédiate

Nous avons à notre disposition un dossier contenant tous les packages que l’on reconnait avec l’extension .dtsx. Il suffit donc de
procéder à une exécution immédiate du package et on obtient la fenêtre.
Figure 10. Figure 10:Fenêtre Exécution immédiate Package 1

23 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

Il est également possible de se passer de l’interface graphique et d’utiliser l’outil en ligne de commandes dtexec. Pour cela il faut créer un

24 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page
"C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\DTExec.exe" /DECRYPT groupe05 /f "C:\Users\Administrator\Desktop\BD51_Projet\Transfert_Emode_Oracle_to_SQLServer.dtsx"
echo EXECUTING Transfert_Emode_Oracle_to_SQLServer PACKAGE
echo Check logs file
echo.
pause

Tâche plani�ée au niveau du système d’exploitation

Une autre possibilité d’automatisation est de passer par la mise en place d’une tâche planifiée. Pour cela, il faut suivre les instructions
suivantes :
Aller dans All programs >Accessories>System Tools>Scheduled Tasks. Ci-dessous les différentes taches créées, il faut renseigner, pour
chaque table le fichier batch qui correspond à l’exécution d’une tâche.
Figure 11. Figure 11: Tâche planifiée.

25 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

Figure 12. Figure 12:Description tâche planifiée Package 3

26 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

27 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

28 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

29 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

Il est également possible d’utiliser SQL Server Agent pour mettre en place l’automatisation des packages. Il faut modifier la propriété
ProtectionLevel autant sur les propriétés du projet et sur les package et le mettre EncryptWithPassword et spécifier un mot de passe,
pour permettre à tout utilisateur dont SQLAgent$SQL2016(utilisateur par défaut sql agent), qui veut exécuter le package de le faire avec
l’option /DECRYPT <motdepasse>
Une fois ces deux éléments créés, il faut procéder à la création des jobs en mettant la commande

"C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\DTExec.exe" /DECRYPT groupe05 /f "C:\Users\Administrator\Desktop\BD51_Projet\Transfert_Emode_Oracle_to_SQLServer.dtsx"

Figure 14. Figure 15:Tâches planifiées avec SQL Agent et Exécution du package 1

30 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir

31 sur 32 15/06/2020 à 15:36


Mise en place d'un ETL | SUPINFO, École Supérieure d'Informatique https://www.supinfo.com/articles/single/6409-mise-place-etl

ACCUEIL CURSUS COURS ADMISSIONS CAMPUS DOCUMENTATION ANCIENS ENTREPRISES LIBRAIRIES PUBLICATIONS Naviguer sur la page

SUPINFO International University


Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels

32 sur 32 15/06/2020 à 15:36

Vous aimerez peut-être aussi