introduction à l'etl et application avec oracle · introduction à l'etl et application...

64
Introduction à l'ETL et application avec Oracle Stéphane Crozat Data warehouse http://dwh.crzt.fr 1 septembre 2016

Upload: ngokien

Post on 16-Apr-2018

221 views

Category:

Documents


1 download

TRANSCRIPT

Introduction agrave lETL et application

avec Oracle

Steacutephane Crozat

Data warehousehttpdwhcrztfr

1 septembre 2016

Table des matiegraveres

Objectifs 5

Introduction 6

I - Principes geacuteneacuteraux dun processus ETL 7

1 Principe de lETL 7

2 ETL ex nihilo ou outil dETL 7

3 ETL en mode batch ou en mode flux 8

4 ETL increacutemental 9

II -

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non

increacutemental

10

1 Architecture dETL agrave trois zones 10

2 Conseils meacutethodologiques 11

3 Reacutesumeacute ETL en image 12

4 Carte des donneacutees 12

III - Projet Fantastic Rappel 14

IV - Impleacutementation simplifieacutee dune zone dextraction avec Oracle 15

1 Zone E Extraction 15

2 Sources de donneacutees 16

3 Tables externes sous Oracle 17

4 Exemple de chargement de donneacutees depuis un CSV par une table externe 20

5 Insertion CSV manuelle avec SQL Developer 21

V - Exercice Projet Fantastic Mise en place de la zone dextraction

22

VI -

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

1 Zone T Transformation 25

2 Impleacutementation de la zone T en RO 27

3 Deacutesactivation et reacuteactivation de contraintes 28

4 Processus de chargement BDE-gtBDT 29

VII -

Exercice Projet Fantastic Mise en place de la zone de traitement

31

VIII - Impleacutementation simplifieacutee dun data warehouse avec Oracle 34

1 Zone L Loading 34

2 Impleacutementation du data warehouse en R 34

3 Processus de chargement BDT-gtDW 36

IX -

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

X - Exercice Projet Fantastic Impleacutementation des transformations

38

XI - Rappels 39

1 Rappels Oracle pour lETL 39

11 Creacuteation de vues 3912 Structure dun bloc PLSQL 4013 Blocs PLSQL Proceacutedure fonction bloc anonyme 4014 Exeacutecution de fichiers SQL 4215 Fonctions SQL 4216 Insertion de dates avec TO_DATE 4417 Affichage agrave leacutecran 4418 Transactions en SQL 45

2 Rappels triggers pour lETL 45

21 Principes des triggers 4522 Preacutedicats deacuteveacutenement au sein des triggers 4723 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new) 4824 Quelques regravegles agrave respecter pour les triggers 49

3 Rappels Oracle RO 49

31 Creacuteation de type en SQL3 sous Oracle (extension au LDD) 4932 Creacuteation de table objet (modegraveles et LDD) 50

32 Creacuteation de table objet (modegraveles et LDD) 5033 Meacutethodes de table dobjets 5134 Meacutethodes et SELF 52

XII - Compleacutements 54

1 Script de remise agrave zeacutero dun scheacutema Oracle 54

2 Eacuteleacutements avanceacutes pour lETL 55

21 Gestion des erreurs 5522 Cleacutes artificielles 5523 Eacuteleacutements pour lETL increacutemental 5624 Inteacutegration des dimensions multi-sources 5825 Performance et maintenance 58

3 Exercice Gestion des erreurs 58

4 Exercice Surveillance des donneacutees 59

Solutions des exercices 60

Abreacuteviations 62

Bibliographie 63

Webographie 64

5Steacutephane Crozat

Savoir impleacutementer un data warehouse avec un SGBD relationnelSavoir impleacutementer un processus ETL vers un data warehouse

Objectifs

6Steacutephane Crozat

-- Volume de cours 4h

Volume dexercice 12h (hors compleacutements)

Introduction

Principes geacuteneacuteraux dun processus ETL

7

-

-

1 Principe de lETL

L est le processus qui permet de charger un data warehouse agrave partir de donneacutees externes ETL

geacuteneacuteralement issues de bases transactionnelles Son rocircle est de reacutecupeacuterer ces donneacutees et de les traiter pour quelles correspondent aux besoins du modegravele dimensionnel

En geacuteneacuteral les donneacutees sources doivent ecirctre nettoyeacutees et ameacutenageacutees pour ecirctre exploitables par les outils deacutecisionnels

You get the data out of its original source location (E) you do something to it (T) and then you load it (L) into a final set of tables for the users to query

(Kimball et al 2008 p369)

Selon Kimball 70 de leffort consacreacute agrave un projet de BI est deacutepenseacute dans lETL(2004 pxxi)

2 ETL ex nihilo ou outil dETL

Un ETL peut ecirctre

deacuteveloppeacute pour un projet directement dans un langage bas niveau (Java SQL ex nihiloPLSQL) ou sappuyer sur un outil dETL (Talend Open Studio Pentaho Data Integration Informatica PowerCenter )

Principes geacuteneacuteraux dun processus ETL I

Deacutefinition Processus Extraction Transformation Load

Fondamental

Fondamental

ETL en mode batch ou en mode flux

8

-

--

-

-

-----

-

ETL Tool versus Hand Coding (Buy a Tool Suite or Roll Your Own)

The answer is ldquoIt dependsrdquo

(Kimball Caserta 2004 pp10-13)

Les avantages offerts par loutil ETL sont

De structurer et de rassembler lensemble des morceaux de code neacutecessaire aux transferts et aux transformations des donneacuteesDoffrir une repreacutesentation graphique des flux et opeacuterationsDe faciliter la maintenance et leacutevolution de lETLDinteacutegrer la gestion des meacutetadonneacuteesDinteacutegrer la gestion des erreursDe disposer dAPI deacutedieacutees (connexion importexport) daccegraves aux donneacutees ( CSV BD

)XML

Les avantages offerts par une approche manuelle sont

Lhomogeacuteneacuteiteacute technologique et la disponibiliteacute interne des compeacutetences les eacutequipes utilisent les langages quelles maicirctrisent sans apprentissage et meacutediation dun outil tiersLa flexibiliteacute tout est possibleLe traitement des fichiers plats (hors ) peut ecirctre plus simples et plus performant avec des BD

langages proches des systegravemes

3 ETL en mode batch ou en mode flux

The standard architecture for an ETL system is based on periodic batch extracts from the source data which then flows through the system resulting in a batch update of the final end user tables

(Kimball Caserta 2004 p13)

Un ETL alimente en geacuteneacuteral un data warehouse par des processus peacuteriodiquesbatch

Fondamental

Meacutethode ETL baseacutes sur un outil

Meacutethode ETL ex nihilo

Fondamental ETL en mode batch

ETL increacutemental

9

----

-

-

-

--

--

1

2

Il existe neacuteanmoins des applications neacutecessitant des data warehouses alimenteacutes en temps reacuteel en mode flux (qui ne sont pas abordeacutes dans le cadre de ce cours)

4 ETL increacutemental

Un ETL non increacutemental est

soit un ETL qui ne sert quune seule fois ( ) one shotsoit un ETL qui refait 100 du processus de migration agrave chaque fois que lon souhaite une mise agrave jour (le data warehouse est videacute puis rempli agrave nouveau avec les donneacutees actuelles)On notera quun tel ETL ne gegravere pas dhistorisation

Un ETL instrumente normalement un processus increacutemental

Les donneacutees sont modifieacutees dans les systegravemes transactionnels

mise agrave jour des dimensions ou ajouts de nouveaux faits

LETL reacutepercute les mises agrave jour dans le data warehouse

Classiquement les faits saccumulent dans le data warehouse il ny a jamais ni suppression ni mise agrave jour (croissance monotone)

Lorsquune dimension est mise agrave jour lETL doit garder la meacutemoire des anciennes valeurs afin que les anciens faits restent bien relieacutes aux anciennes valeurs

Ils existent plusieurs strateacutegies pour geacuterer lhistorique des valeurs des dimensions dans le DW

associer des dates aux dimensions et aux faits afin de savoir quelle valeur de dimension est valide pour quel fait creacuteer de nouvelles entreacutees dans les dimensions (ne pas faire de mise agrave jour au sens dUPDATE)

Rafraicircchissement peacuteriodiqueRafraicircchissement manuelRafraicircchissement eacuteveacutenementiel

Remarque ETL en mode flux

Deacutefinition ETL non increacutemental

Deacutefinition ETL increacutemental

Attention Accumulation des faits

Attention Historisation des dimensions

Meacutethode Strateacutegies de mise agrave jour

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

10

-

-

-

--

Nous proposons un exemple darchitecture pour la mise en place dun ETL en simplifieacutee ex nihilomode batch sans gestion du caractegravere increacutemental

Cette architecture est assez geacuteneacuterale et pourra ecirctre une base pour de nombreux cas mais elle devra

ecirctre adapteacutee neacuteanmoins en fonctions des speacutecificiteacutes propres agrave chaque contexteecirctre compleacuteteacutee (gestion increacutementale gestion des rejets audits)

1 Architecture dETL agrave trois zones

Nous proposons une architecture dETL organiseacutee avec trois zones composeacutees chacune dune base de donneacutees distincte

Zone dextractionUne base de donneacutees destineacutee agrave unifier les sources de donneacutees et offrir un point daccegraves uniqueZone de transformationUne base de donneacutees destineacutee agrave traiter les sources et offrir une interface daccegraves aux donneacutees transformeacutees ( )API

Zone dexploitationUne base de donneacutees destineacutee agrave impleacutementer le data warehouse et les data marts

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

II

Meacutethode

Conseils meacutethodologiques

11

Architecture geacuteneacuterale dun ETL

2 Conseils meacutethodologiques

Dans la mesure du possible utiliser un scheacutema de base de donneacutees pour chaque zone de lETL (BDE BDT DW)

Si tout doit ecirctre reacutealiseacute au sein dun seul scheacutema utiliser un systegraveme de preacute-fixage des noms bde_table bdt_table dw_table

Accegraves inter-scheacutemas sous Oracle (cf p)

Fondamental

Meacutethode ETL multi-scheacutema

Meacutethode ETL mono-scheacutema (contraintes de nommage)

Rappel

Carte des donneacutees

12

3 Reacutesumeacute ETL en image

Processus ETL

4 Carte des donneacutees

La carte des donneacutees ( ) est un inventaire et une mise en correspondance des logical data mapdonneacutees preacutesentes dans chaque zone

Deacutefinition Carte des donneacutees

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Table des matiegraveres

Objectifs 5

Introduction 6

I - Principes geacuteneacuteraux dun processus ETL 7

1 Principe de lETL 7

2 ETL ex nihilo ou outil dETL 7

3 ETL en mode batch ou en mode flux 8

4 ETL increacutemental 9

II -

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non

increacutemental

10

1 Architecture dETL agrave trois zones 10

2 Conseils meacutethodologiques 11

3 Reacutesumeacute ETL en image 12

4 Carte des donneacutees 12

III - Projet Fantastic Rappel 14

IV - Impleacutementation simplifieacutee dune zone dextraction avec Oracle 15

1 Zone E Extraction 15

2 Sources de donneacutees 16

3 Tables externes sous Oracle 17

4 Exemple de chargement de donneacutees depuis un CSV par une table externe 20

5 Insertion CSV manuelle avec SQL Developer 21

V - Exercice Projet Fantastic Mise en place de la zone dextraction

22

VI -

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

1 Zone T Transformation 25

2 Impleacutementation de la zone T en RO 27

3 Deacutesactivation et reacuteactivation de contraintes 28

4 Processus de chargement BDE-gtBDT 29

VII -

Exercice Projet Fantastic Mise en place de la zone de traitement

31

VIII - Impleacutementation simplifieacutee dun data warehouse avec Oracle 34

1 Zone L Loading 34

2 Impleacutementation du data warehouse en R 34

3 Processus de chargement BDT-gtDW 36

IX -

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

X - Exercice Projet Fantastic Impleacutementation des transformations

38

XI - Rappels 39

1 Rappels Oracle pour lETL 39

11 Creacuteation de vues 3912 Structure dun bloc PLSQL 4013 Blocs PLSQL Proceacutedure fonction bloc anonyme 4014 Exeacutecution de fichiers SQL 4215 Fonctions SQL 4216 Insertion de dates avec TO_DATE 4417 Affichage agrave leacutecran 4418 Transactions en SQL 45

2 Rappels triggers pour lETL 45

21 Principes des triggers 4522 Preacutedicats deacuteveacutenement au sein des triggers 4723 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new) 4824 Quelques regravegles agrave respecter pour les triggers 49

3 Rappels Oracle RO 49

31 Creacuteation de type en SQL3 sous Oracle (extension au LDD) 4932 Creacuteation de table objet (modegraveles et LDD) 50

32 Creacuteation de table objet (modegraveles et LDD) 5033 Meacutethodes de table dobjets 5134 Meacutethodes et SELF 52

XII - Compleacutements 54

1 Script de remise agrave zeacutero dun scheacutema Oracle 54

2 Eacuteleacutements avanceacutes pour lETL 55

21 Gestion des erreurs 5522 Cleacutes artificielles 5523 Eacuteleacutements pour lETL increacutemental 5624 Inteacutegration des dimensions multi-sources 5825 Performance et maintenance 58

3 Exercice Gestion des erreurs 58

4 Exercice Surveillance des donneacutees 59

Solutions des exercices 60

Abreacuteviations 62

Bibliographie 63

Webographie 64

5Steacutephane Crozat

Savoir impleacutementer un data warehouse avec un SGBD relationnelSavoir impleacutementer un processus ETL vers un data warehouse

Objectifs

6Steacutephane Crozat

-- Volume de cours 4h

Volume dexercice 12h (hors compleacutements)

Introduction

Principes geacuteneacuteraux dun processus ETL

7

-

-

1 Principe de lETL

L est le processus qui permet de charger un data warehouse agrave partir de donneacutees externes ETL

geacuteneacuteralement issues de bases transactionnelles Son rocircle est de reacutecupeacuterer ces donneacutees et de les traiter pour quelles correspondent aux besoins du modegravele dimensionnel

En geacuteneacuteral les donneacutees sources doivent ecirctre nettoyeacutees et ameacutenageacutees pour ecirctre exploitables par les outils deacutecisionnels

You get the data out of its original source location (E) you do something to it (T) and then you load it (L) into a final set of tables for the users to query

(Kimball et al 2008 p369)

Selon Kimball 70 de leffort consacreacute agrave un projet de BI est deacutepenseacute dans lETL(2004 pxxi)

2 ETL ex nihilo ou outil dETL

Un ETL peut ecirctre

deacuteveloppeacute pour un projet directement dans un langage bas niveau (Java SQL ex nihiloPLSQL) ou sappuyer sur un outil dETL (Talend Open Studio Pentaho Data Integration Informatica PowerCenter )

Principes geacuteneacuteraux dun processus ETL I

Deacutefinition Processus Extraction Transformation Load

Fondamental

Fondamental

ETL en mode batch ou en mode flux

8

-

--

-

-

-----

-

ETL Tool versus Hand Coding (Buy a Tool Suite or Roll Your Own)

The answer is ldquoIt dependsrdquo

(Kimball Caserta 2004 pp10-13)

Les avantages offerts par loutil ETL sont

De structurer et de rassembler lensemble des morceaux de code neacutecessaire aux transferts et aux transformations des donneacuteesDoffrir une repreacutesentation graphique des flux et opeacuterationsDe faciliter la maintenance et leacutevolution de lETLDinteacutegrer la gestion des meacutetadonneacuteesDinteacutegrer la gestion des erreursDe disposer dAPI deacutedieacutees (connexion importexport) daccegraves aux donneacutees ( CSV BD

)XML

Les avantages offerts par une approche manuelle sont

Lhomogeacuteneacuteiteacute technologique et la disponibiliteacute interne des compeacutetences les eacutequipes utilisent les langages quelles maicirctrisent sans apprentissage et meacutediation dun outil tiersLa flexibiliteacute tout est possibleLe traitement des fichiers plats (hors ) peut ecirctre plus simples et plus performant avec des BD

langages proches des systegravemes

3 ETL en mode batch ou en mode flux

The standard architecture for an ETL system is based on periodic batch extracts from the source data which then flows through the system resulting in a batch update of the final end user tables

(Kimball Caserta 2004 p13)

Un ETL alimente en geacuteneacuteral un data warehouse par des processus peacuteriodiquesbatch

Fondamental

Meacutethode ETL baseacutes sur un outil

Meacutethode ETL ex nihilo

Fondamental ETL en mode batch

ETL increacutemental

9

----

-

-

-

--

--

1

2

Il existe neacuteanmoins des applications neacutecessitant des data warehouses alimenteacutes en temps reacuteel en mode flux (qui ne sont pas abordeacutes dans le cadre de ce cours)

4 ETL increacutemental

Un ETL non increacutemental est

soit un ETL qui ne sert quune seule fois ( ) one shotsoit un ETL qui refait 100 du processus de migration agrave chaque fois que lon souhaite une mise agrave jour (le data warehouse est videacute puis rempli agrave nouveau avec les donneacutees actuelles)On notera quun tel ETL ne gegravere pas dhistorisation

Un ETL instrumente normalement un processus increacutemental

Les donneacutees sont modifieacutees dans les systegravemes transactionnels

mise agrave jour des dimensions ou ajouts de nouveaux faits

LETL reacutepercute les mises agrave jour dans le data warehouse

Classiquement les faits saccumulent dans le data warehouse il ny a jamais ni suppression ni mise agrave jour (croissance monotone)

Lorsquune dimension est mise agrave jour lETL doit garder la meacutemoire des anciennes valeurs afin que les anciens faits restent bien relieacutes aux anciennes valeurs

Ils existent plusieurs strateacutegies pour geacuterer lhistorique des valeurs des dimensions dans le DW

associer des dates aux dimensions et aux faits afin de savoir quelle valeur de dimension est valide pour quel fait creacuteer de nouvelles entreacutees dans les dimensions (ne pas faire de mise agrave jour au sens dUPDATE)

Rafraicircchissement peacuteriodiqueRafraicircchissement manuelRafraicircchissement eacuteveacutenementiel

Remarque ETL en mode flux

Deacutefinition ETL non increacutemental

Deacutefinition ETL increacutemental

Attention Accumulation des faits

Attention Historisation des dimensions

Meacutethode Strateacutegies de mise agrave jour

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

10

-

-

-

--

Nous proposons un exemple darchitecture pour la mise en place dun ETL en simplifieacutee ex nihilomode batch sans gestion du caractegravere increacutemental

Cette architecture est assez geacuteneacuterale et pourra ecirctre une base pour de nombreux cas mais elle devra

ecirctre adapteacutee neacuteanmoins en fonctions des speacutecificiteacutes propres agrave chaque contexteecirctre compleacuteteacutee (gestion increacutementale gestion des rejets audits)

1 Architecture dETL agrave trois zones

Nous proposons une architecture dETL organiseacutee avec trois zones composeacutees chacune dune base de donneacutees distincte

Zone dextractionUne base de donneacutees destineacutee agrave unifier les sources de donneacutees et offrir un point daccegraves uniqueZone de transformationUne base de donneacutees destineacutee agrave traiter les sources et offrir une interface daccegraves aux donneacutees transformeacutees ( )API

Zone dexploitationUne base de donneacutees destineacutee agrave impleacutementer le data warehouse et les data marts

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

II

Meacutethode

Conseils meacutethodologiques

11

Architecture geacuteneacuterale dun ETL

2 Conseils meacutethodologiques

Dans la mesure du possible utiliser un scheacutema de base de donneacutees pour chaque zone de lETL (BDE BDT DW)

Si tout doit ecirctre reacutealiseacute au sein dun seul scheacutema utiliser un systegraveme de preacute-fixage des noms bde_table bdt_table dw_table

Accegraves inter-scheacutemas sous Oracle (cf p)

Fondamental

Meacutethode ETL multi-scheacutema

Meacutethode ETL mono-scheacutema (contraintes de nommage)

Rappel

Carte des donneacutees

12

3 Reacutesumeacute ETL en image

Processus ETL

4 Carte des donneacutees

La carte des donneacutees ( ) est un inventaire et une mise en correspondance des logical data mapdonneacutees preacutesentes dans chaque zone

Deacutefinition Carte des donneacutees

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

VI -

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

1 Zone T Transformation 25

2 Impleacutementation de la zone T en RO 27

3 Deacutesactivation et reacuteactivation de contraintes 28

4 Processus de chargement BDE-gtBDT 29

VII -

Exercice Projet Fantastic Mise en place de la zone de traitement

31

VIII - Impleacutementation simplifieacutee dun data warehouse avec Oracle 34

1 Zone L Loading 34

2 Impleacutementation du data warehouse en R 34

3 Processus de chargement BDT-gtDW 36

IX -

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

X - Exercice Projet Fantastic Impleacutementation des transformations

38

XI - Rappels 39

1 Rappels Oracle pour lETL 39

11 Creacuteation de vues 3912 Structure dun bloc PLSQL 4013 Blocs PLSQL Proceacutedure fonction bloc anonyme 4014 Exeacutecution de fichiers SQL 4215 Fonctions SQL 4216 Insertion de dates avec TO_DATE 4417 Affichage agrave leacutecran 4418 Transactions en SQL 45

2 Rappels triggers pour lETL 45

21 Principes des triggers 4522 Preacutedicats deacuteveacutenement au sein des triggers 4723 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new) 4824 Quelques regravegles agrave respecter pour les triggers 49

3 Rappels Oracle RO 49

31 Creacuteation de type en SQL3 sous Oracle (extension au LDD) 4932 Creacuteation de table objet (modegraveles et LDD) 50

32 Creacuteation de table objet (modegraveles et LDD) 5033 Meacutethodes de table dobjets 5134 Meacutethodes et SELF 52

XII - Compleacutements 54

1 Script de remise agrave zeacutero dun scheacutema Oracle 54

2 Eacuteleacutements avanceacutes pour lETL 55

21 Gestion des erreurs 5522 Cleacutes artificielles 5523 Eacuteleacutements pour lETL increacutemental 5624 Inteacutegration des dimensions multi-sources 5825 Performance et maintenance 58

3 Exercice Gestion des erreurs 58

4 Exercice Surveillance des donneacutees 59

Solutions des exercices 60

Abreacuteviations 62

Bibliographie 63

Webographie 64

5Steacutephane Crozat

Savoir impleacutementer un data warehouse avec un SGBD relationnelSavoir impleacutementer un processus ETL vers un data warehouse

Objectifs

6Steacutephane Crozat

-- Volume de cours 4h

Volume dexercice 12h (hors compleacutements)

Introduction

Principes geacuteneacuteraux dun processus ETL

7

-

-

1 Principe de lETL

L est le processus qui permet de charger un data warehouse agrave partir de donneacutees externes ETL

geacuteneacuteralement issues de bases transactionnelles Son rocircle est de reacutecupeacuterer ces donneacutees et de les traiter pour quelles correspondent aux besoins du modegravele dimensionnel

En geacuteneacuteral les donneacutees sources doivent ecirctre nettoyeacutees et ameacutenageacutees pour ecirctre exploitables par les outils deacutecisionnels

You get the data out of its original source location (E) you do something to it (T) and then you load it (L) into a final set of tables for the users to query

(Kimball et al 2008 p369)

Selon Kimball 70 de leffort consacreacute agrave un projet de BI est deacutepenseacute dans lETL(2004 pxxi)

2 ETL ex nihilo ou outil dETL

Un ETL peut ecirctre

deacuteveloppeacute pour un projet directement dans un langage bas niveau (Java SQL ex nihiloPLSQL) ou sappuyer sur un outil dETL (Talend Open Studio Pentaho Data Integration Informatica PowerCenter )

Principes geacuteneacuteraux dun processus ETL I

Deacutefinition Processus Extraction Transformation Load

Fondamental

Fondamental

ETL en mode batch ou en mode flux

8

-

--

-

-

-----

-

ETL Tool versus Hand Coding (Buy a Tool Suite or Roll Your Own)

The answer is ldquoIt dependsrdquo

(Kimball Caserta 2004 pp10-13)

Les avantages offerts par loutil ETL sont

De structurer et de rassembler lensemble des morceaux de code neacutecessaire aux transferts et aux transformations des donneacuteesDoffrir une repreacutesentation graphique des flux et opeacuterationsDe faciliter la maintenance et leacutevolution de lETLDinteacutegrer la gestion des meacutetadonneacuteesDinteacutegrer la gestion des erreursDe disposer dAPI deacutedieacutees (connexion importexport) daccegraves aux donneacutees ( CSV BD

)XML

Les avantages offerts par une approche manuelle sont

Lhomogeacuteneacuteiteacute technologique et la disponibiliteacute interne des compeacutetences les eacutequipes utilisent les langages quelles maicirctrisent sans apprentissage et meacutediation dun outil tiersLa flexibiliteacute tout est possibleLe traitement des fichiers plats (hors ) peut ecirctre plus simples et plus performant avec des BD

langages proches des systegravemes

3 ETL en mode batch ou en mode flux

The standard architecture for an ETL system is based on periodic batch extracts from the source data which then flows through the system resulting in a batch update of the final end user tables

(Kimball Caserta 2004 p13)

Un ETL alimente en geacuteneacuteral un data warehouse par des processus peacuteriodiquesbatch

Fondamental

Meacutethode ETL baseacutes sur un outil

Meacutethode ETL ex nihilo

Fondamental ETL en mode batch

ETL increacutemental

9

----

-

-

-

--

--

1

2

Il existe neacuteanmoins des applications neacutecessitant des data warehouses alimenteacutes en temps reacuteel en mode flux (qui ne sont pas abordeacutes dans le cadre de ce cours)

4 ETL increacutemental

Un ETL non increacutemental est

soit un ETL qui ne sert quune seule fois ( ) one shotsoit un ETL qui refait 100 du processus de migration agrave chaque fois que lon souhaite une mise agrave jour (le data warehouse est videacute puis rempli agrave nouveau avec les donneacutees actuelles)On notera quun tel ETL ne gegravere pas dhistorisation

Un ETL instrumente normalement un processus increacutemental

Les donneacutees sont modifieacutees dans les systegravemes transactionnels

mise agrave jour des dimensions ou ajouts de nouveaux faits

LETL reacutepercute les mises agrave jour dans le data warehouse

Classiquement les faits saccumulent dans le data warehouse il ny a jamais ni suppression ni mise agrave jour (croissance monotone)

Lorsquune dimension est mise agrave jour lETL doit garder la meacutemoire des anciennes valeurs afin que les anciens faits restent bien relieacutes aux anciennes valeurs

Ils existent plusieurs strateacutegies pour geacuterer lhistorique des valeurs des dimensions dans le DW

associer des dates aux dimensions et aux faits afin de savoir quelle valeur de dimension est valide pour quel fait creacuteer de nouvelles entreacutees dans les dimensions (ne pas faire de mise agrave jour au sens dUPDATE)

Rafraicircchissement peacuteriodiqueRafraicircchissement manuelRafraicircchissement eacuteveacutenementiel

Remarque ETL en mode flux

Deacutefinition ETL non increacutemental

Deacutefinition ETL increacutemental

Attention Accumulation des faits

Attention Historisation des dimensions

Meacutethode Strateacutegies de mise agrave jour

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

10

-

-

-

--

Nous proposons un exemple darchitecture pour la mise en place dun ETL en simplifieacutee ex nihilomode batch sans gestion du caractegravere increacutemental

Cette architecture est assez geacuteneacuterale et pourra ecirctre une base pour de nombreux cas mais elle devra

ecirctre adapteacutee neacuteanmoins en fonctions des speacutecificiteacutes propres agrave chaque contexteecirctre compleacuteteacutee (gestion increacutementale gestion des rejets audits)

1 Architecture dETL agrave trois zones

Nous proposons une architecture dETL organiseacutee avec trois zones composeacutees chacune dune base de donneacutees distincte

Zone dextractionUne base de donneacutees destineacutee agrave unifier les sources de donneacutees et offrir un point daccegraves uniqueZone de transformationUne base de donneacutees destineacutee agrave traiter les sources et offrir une interface daccegraves aux donneacutees transformeacutees ( )API

Zone dexploitationUne base de donneacutees destineacutee agrave impleacutementer le data warehouse et les data marts

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

II

Meacutethode

Conseils meacutethodologiques

11

Architecture geacuteneacuterale dun ETL

2 Conseils meacutethodologiques

Dans la mesure du possible utiliser un scheacutema de base de donneacutees pour chaque zone de lETL (BDE BDT DW)

Si tout doit ecirctre reacutealiseacute au sein dun seul scheacutema utiliser un systegraveme de preacute-fixage des noms bde_table bdt_table dw_table

Accegraves inter-scheacutemas sous Oracle (cf p)

Fondamental

Meacutethode ETL multi-scheacutema

Meacutethode ETL mono-scheacutema (contraintes de nommage)

Rappel

Carte des donneacutees

12

3 Reacutesumeacute ETL en image

Processus ETL

4 Carte des donneacutees

La carte des donneacutees ( ) est un inventaire et une mise en correspondance des logical data mapdonneacutees preacutesentes dans chaque zone

Deacutefinition Carte des donneacutees

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

32 Creacuteation de table objet (modegraveles et LDD) 5033 Meacutethodes de table dobjets 5134 Meacutethodes et SELF 52

XII - Compleacutements 54

1 Script de remise agrave zeacutero dun scheacutema Oracle 54

2 Eacuteleacutements avanceacutes pour lETL 55

21 Gestion des erreurs 5522 Cleacutes artificielles 5523 Eacuteleacutements pour lETL increacutemental 5624 Inteacutegration des dimensions multi-sources 5825 Performance et maintenance 58

3 Exercice Gestion des erreurs 58

4 Exercice Surveillance des donneacutees 59

Solutions des exercices 60

Abreacuteviations 62

Bibliographie 63

Webographie 64

5Steacutephane Crozat

Savoir impleacutementer un data warehouse avec un SGBD relationnelSavoir impleacutementer un processus ETL vers un data warehouse

Objectifs

6Steacutephane Crozat

-- Volume de cours 4h

Volume dexercice 12h (hors compleacutements)

Introduction

Principes geacuteneacuteraux dun processus ETL

7

-

-

1 Principe de lETL

L est le processus qui permet de charger un data warehouse agrave partir de donneacutees externes ETL

geacuteneacuteralement issues de bases transactionnelles Son rocircle est de reacutecupeacuterer ces donneacutees et de les traiter pour quelles correspondent aux besoins du modegravele dimensionnel

En geacuteneacuteral les donneacutees sources doivent ecirctre nettoyeacutees et ameacutenageacutees pour ecirctre exploitables par les outils deacutecisionnels

You get the data out of its original source location (E) you do something to it (T) and then you load it (L) into a final set of tables for the users to query

(Kimball et al 2008 p369)

Selon Kimball 70 de leffort consacreacute agrave un projet de BI est deacutepenseacute dans lETL(2004 pxxi)

2 ETL ex nihilo ou outil dETL

Un ETL peut ecirctre

deacuteveloppeacute pour un projet directement dans un langage bas niveau (Java SQL ex nihiloPLSQL) ou sappuyer sur un outil dETL (Talend Open Studio Pentaho Data Integration Informatica PowerCenter )

Principes geacuteneacuteraux dun processus ETL I

Deacutefinition Processus Extraction Transformation Load

Fondamental

Fondamental

ETL en mode batch ou en mode flux

8

-

--

-

-

-----

-

ETL Tool versus Hand Coding (Buy a Tool Suite or Roll Your Own)

The answer is ldquoIt dependsrdquo

(Kimball Caserta 2004 pp10-13)

Les avantages offerts par loutil ETL sont

De structurer et de rassembler lensemble des morceaux de code neacutecessaire aux transferts et aux transformations des donneacuteesDoffrir une repreacutesentation graphique des flux et opeacuterationsDe faciliter la maintenance et leacutevolution de lETLDinteacutegrer la gestion des meacutetadonneacuteesDinteacutegrer la gestion des erreursDe disposer dAPI deacutedieacutees (connexion importexport) daccegraves aux donneacutees ( CSV BD

)XML

Les avantages offerts par une approche manuelle sont

Lhomogeacuteneacuteiteacute technologique et la disponibiliteacute interne des compeacutetences les eacutequipes utilisent les langages quelles maicirctrisent sans apprentissage et meacutediation dun outil tiersLa flexibiliteacute tout est possibleLe traitement des fichiers plats (hors ) peut ecirctre plus simples et plus performant avec des BD

langages proches des systegravemes

3 ETL en mode batch ou en mode flux

The standard architecture for an ETL system is based on periodic batch extracts from the source data which then flows through the system resulting in a batch update of the final end user tables

(Kimball Caserta 2004 p13)

Un ETL alimente en geacuteneacuteral un data warehouse par des processus peacuteriodiquesbatch

Fondamental

Meacutethode ETL baseacutes sur un outil

Meacutethode ETL ex nihilo

Fondamental ETL en mode batch

ETL increacutemental

9

----

-

-

-

--

--

1

2

Il existe neacuteanmoins des applications neacutecessitant des data warehouses alimenteacutes en temps reacuteel en mode flux (qui ne sont pas abordeacutes dans le cadre de ce cours)

4 ETL increacutemental

Un ETL non increacutemental est

soit un ETL qui ne sert quune seule fois ( ) one shotsoit un ETL qui refait 100 du processus de migration agrave chaque fois que lon souhaite une mise agrave jour (le data warehouse est videacute puis rempli agrave nouveau avec les donneacutees actuelles)On notera quun tel ETL ne gegravere pas dhistorisation

Un ETL instrumente normalement un processus increacutemental

Les donneacutees sont modifieacutees dans les systegravemes transactionnels

mise agrave jour des dimensions ou ajouts de nouveaux faits

LETL reacutepercute les mises agrave jour dans le data warehouse

Classiquement les faits saccumulent dans le data warehouse il ny a jamais ni suppression ni mise agrave jour (croissance monotone)

Lorsquune dimension est mise agrave jour lETL doit garder la meacutemoire des anciennes valeurs afin que les anciens faits restent bien relieacutes aux anciennes valeurs

Ils existent plusieurs strateacutegies pour geacuterer lhistorique des valeurs des dimensions dans le DW

associer des dates aux dimensions et aux faits afin de savoir quelle valeur de dimension est valide pour quel fait creacuteer de nouvelles entreacutees dans les dimensions (ne pas faire de mise agrave jour au sens dUPDATE)

Rafraicircchissement peacuteriodiqueRafraicircchissement manuelRafraicircchissement eacuteveacutenementiel

Remarque ETL en mode flux

Deacutefinition ETL non increacutemental

Deacutefinition ETL increacutemental

Attention Accumulation des faits

Attention Historisation des dimensions

Meacutethode Strateacutegies de mise agrave jour

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

10

-

-

-

--

Nous proposons un exemple darchitecture pour la mise en place dun ETL en simplifieacutee ex nihilomode batch sans gestion du caractegravere increacutemental

Cette architecture est assez geacuteneacuterale et pourra ecirctre une base pour de nombreux cas mais elle devra

ecirctre adapteacutee neacuteanmoins en fonctions des speacutecificiteacutes propres agrave chaque contexteecirctre compleacuteteacutee (gestion increacutementale gestion des rejets audits)

1 Architecture dETL agrave trois zones

Nous proposons une architecture dETL organiseacutee avec trois zones composeacutees chacune dune base de donneacutees distincte

Zone dextractionUne base de donneacutees destineacutee agrave unifier les sources de donneacutees et offrir un point daccegraves uniqueZone de transformationUne base de donneacutees destineacutee agrave traiter les sources et offrir une interface daccegraves aux donneacutees transformeacutees ( )API

Zone dexploitationUne base de donneacutees destineacutee agrave impleacutementer le data warehouse et les data marts

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

II

Meacutethode

Conseils meacutethodologiques

11

Architecture geacuteneacuterale dun ETL

2 Conseils meacutethodologiques

Dans la mesure du possible utiliser un scheacutema de base de donneacutees pour chaque zone de lETL (BDE BDT DW)

Si tout doit ecirctre reacutealiseacute au sein dun seul scheacutema utiliser un systegraveme de preacute-fixage des noms bde_table bdt_table dw_table

Accegraves inter-scheacutemas sous Oracle (cf p)

Fondamental

Meacutethode ETL multi-scheacutema

Meacutethode ETL mono-scheacutema (contraintes de nommage)

Rappel

Carte des donneacutees

12

3 Reacutesumeacute ETL en image

Processus ETL

4 Carte des donneacutees

La carte des donneacutees ( ) est un inventaire et une mise en correspondance des logical data mapdonneacutees preacutesentes dans chaque zone

Deacutefinition Carte des donneacutees

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

5Steacutephane Crozat

Savoir impleacutementer un data warehouse avec un SGBD relationnelSavoir impleacutementer un processus ETL vers un data warehouse

Objectifs

6Steacutephane Crozat

-- Volume de cours 4h

Volume dexercice 12h (hors compleacutements)

Introduction

Principes geacuteneacuteraux dun processus ETL

7

-

-

1 Principe de lETL

L est le processus qui permet de charger un data warehouse agrave partir de donneacutees externes ETL

geacuteneacuteralement issues de bases transactionnelles Son rocircle est de reacutecupeacuterer ces donneacutees et de les traiter pour quelles correspondent aux besoins du modegravele dimensionnel

En geacuteneacuteral les donneacutees sources doivent ecirctre nettoyeacutees et ameacutenageacutees pour ecirctre exploitables par les outils deacutecisionnels

You get the data out of its original source location (E) you do something to it (T) and then you load it (L) into a final set of tables for the users to query

(Kimball et al 2008 p369)

Selon Kimball 70 de leffort consacreacute agrave un projet de BI est deacutepenseacute dans lETL(2004 pxxi)

2 ETL ex nihilo ou outil dETL

Un ETL peut ecirctre

deacuteveloppeacute pour un projet directement dans un langage bas niveau (Java SQL ex nihiloPLSQL) ou sappuyer sur un outil dETL (Talend Open Studio Pentaho Data Integration Informatica PowerCenter )

Principes geacuteneacuteraux dun processus ETL I

Deacutefinition Processus Extraction Transformation Load

Fondamental

Fondamental

ETL en mode batch ou en mode flux

8

-

--

-

-

-----

-

ETL Tool versus Hand Coding (Buy a Tool Suite or Roll Your Own)

The answer is ldquoIt dependsrdquo

(Kimball Caserta 2004 pp10-13)

Les avantages offerts par loutil ETL sont

De structurer et de rassembler lensemble des morceaux de code neacutecessaire aux transferts et aux transformations des donneacuteesDoffrir une repreacutesentation graphique des flux et opeacuterationsDe faciliter la maintenance et leacutevolution de lETLDinteacutegrer la gestion des meacutetadonneacuteesDinteacutegrer la gestion des erreursDe disposer dAPI deacutedieacutees (connexion importexport) daccegraves aux donneacutees ( CSV BD

)XML

Les avantages offerts par une approche manuelle sont

Lhomogeacuteneacuteiteacute technologique et la disponibiliteacute interne des compeacutetences les eacutequipes utilisent les langages quelles maicirctrisent sans apprentissage et meacutediation dun outil tiersLa flexibiliteacute tout est possibleLe traitement des fichiers plats (hors ) peut ecirctre plus simples et plus performant avec des BD

langages proches des systegravemes

3 ETL en mode batch ou en mode flux

The standard architecture for an ETL system is based on periodic batch extracts from the source data which then flows through the system resulting in a batch update of the final end user tables

(Kimball Caserta 2004 p13)

Un ETL alimente en geacuteneacuteral un data warehouse par des processus peacuteriodiquesbatch

Fondamental

Meacutethode ETL baseacutes sur un outil

Meacutethode ETL ex nihilo

Fondamental ETL en mode batch

ETL increacutemental

9

----

-

-

-

--

--

1

2

Il existe neacuteanmoins des applications neacutecessitant des data warehouses alimenteacutes en temps reacuteel en mode flux (qui ne sont pas abordeacutes dans le cadre de ce cours)

4 ETL increacutemental

Un ETL non increacutemental est

soit un ETL qui ne sert quune seule fois ( ) one shotsoit un ETL qui refait 100 du processus de migration agrave chaque fois que lon souhaite une mise agrave jour (le data warehouse est videacute puis rempli agrave nouveau avec les donneacutees actuelles)On notera quun tel ETL ne gegravere pas dhistorisation

Un ETL instrumente normalement un processus increacutemental

Les donneacutees sont modifieacutees dans les systegravemes transactionnels

mise agrave jour des dimensions ou ajouts de nouveaux faits

LETL reacutepercute les mises agrave jour dans le data warehouse

Classiquement les faits saccumulent dans le data warehouse il ny a jamais ni suppression ni mise agrave jour (croissance monotone)

Lorsquune dimension est mise agrave jour lETL doit garder la meacutemoire des anciennes valeurs afin que les anciens faits restent bien relieacutes aux anciennes valeurs

Ils existent plusieurs strateacutegies pour geacuterer lhistorique des valeurs des dimensions dans le DW

associer des dates aux dimensions et aux faits afin de savoir quelle valeur de dimension est valide pour quel fait creacuteer de nouvelles entreacutees dans les dimensions (ne pas faire de mise agrave jour au sens dUPDATE)

Rafraicircchissement peacuteriodiqueRafraicircchissement manuelRafraicircchissement eacuteveacutenementiel

Remarque ETL en mode flux

Deacutefinition ETL non increacutemental

Deacutefinition ETL increacutemental

Attention Accumulation des faits

Attention Historisation des dimensions

Meacutethode Strateacutegies de mise agrave jour

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

10

-

-

-

--

Nous proposons un exemple darchitecture pour la mise en place dun ETL en simplifieacutee ex nihilomode batch sans gestion du caractegravere increacutemental

Cette architecture est assez geacuteneacuterale et pourra ecirctre une base pour de nombreux cas mais elle devra

ecirctre adapteacutee neacuteanmoins en fonctions des speacutecificiteacutes propres agrave chaque contexteecirctre compleacuteteacutee (gestion increacutementale gestion des rejets audits)

1 Architecture dETL agrave trois zones

Nous proposons une architecture dETL organiseacutee avec trois zones composeacutees chacune dune base de donneacutees distincte

Zone dextractionUne base de donneacutees destineacutee agrave unifier les sources de donneacutees et offrir un point daccegraves uniqueZone de transformationUne base de donneacutees destineacutee agrave traiter les sources et offrir une interface daccegraves aux donneacutees transformeacutees ( )API

Zone dexploitationUne base de donneacutees destineacutee agrave impleacutementer le data warehouse et les data marts

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

II

Meacutethode

Conseils meacutethodologiques

11

Architecture geacuteneacuterale dun ETL

2 Conseils meacutethodologiques

Dans la mesure du possible utiliser un scheacutema de base de donneacutees pour chaque zone de lETL (BDE BDT DW)

Si tout doit ecirctre reacutealiseacute au sein dun seul scheacutema utiliser un systegraveme de preacute-fixage des noms bde_table bdt_table dw_table

Accegraves inter-scheacutemas sous Oracle (cf p)

Fondamental

Meacutethode ETL multi-scheacutema

Meacutethode ETL mono-scheacutema (contraintes de nommage)

Rappel

Carte des donneacutees

12

3 Reacutesumeacute ETL en image

Processus ETL

4 Carte des donneacutees

La carte des donneacutees ( ) est un inventaire et une mise en correspondance des logical data mapdonneacutees preacutesentes dans chaque zone

Deacutefinition Carte des donneacutees

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

6Steacutephane Crozat

-- Volume de cours 4h

Volume dexercice 12h (hors compleacutements)

Introduction

Principes geacuteneacuteraux dun processus ETL

7

-

-

1 Principe de lETL

L est le processus qui permet de charger un data warehouse agrave partir de donneacutees externes ETL

geacuteneacuteralement issues de bases transactionnelles Son rocircle est de reacutecupeacuterer ces donneacutees et de les traiter pour quelles correspondent aux besoins du modegravele dimensionnel

En geacuteneacuteral les donneacutees sources doivent ecirctre nettoyeacutees et ameacutenageacutees pour ecirctre exploitables par les outils deacutecisionnels

You get the data out of its original source location (E) you do something to it (T) and then you load it (L) into a final set of tables for the users to query

(Kimball et al 2008 p369)

Selon Kimball 70 de leffort consacreacute agrave un projet de BI est deacutepenseacute dans lETL(2004 pxxi)

2 ETL ex nihilo ou outil dETL

Un ETL peut ecirctre

deacuteveloppeacute pour un projet directement dans un langage bas niveau (Java SQL ex nihiloPLSQL) ou sappuyer sur un outil dETL (Talend Open Studio Pentaho Data Integration Informatica PowerCenter )

Principes geacuteneacuteraux dun processus ETL I

Deacutefinition Processus Extraction Transformation Load

Fondamental

Fondamental

ETL en mode batch ou en mode flux

8

-

--

-

-

-----

-

ETL Tool versus Hand Coding (Buy a Tool Suite or Roll Your Own)

The answer is ldquoIt dependsrdquo

(Kimball Caserta 2004 pp10-13)

Les avantages offerts par loutil ETL sont

De structurer et de rassembler lensemble des morceaux de code neacutecessaire aux transferts et aux transformations des donneacuteesDoffrir une repreacutesentation graphique des flux et opeacuterationsDe faciliter la maintenance et leacutevolution de lETLDinteacutegrer la gestion des meacutetadonneacuteesDinteacutegrer la gestion des erreursDe disposer dAPI deacutedieacutees (connexion importexport) daccegraves aux donneacutees ( CSV BD

)XML

Les avantages offerts par une approche manuelle sont

Lhomogeacuteneacuteiteacute technologique et la disponibiliteacute interne des compeacutetences les eacutequipes utilisent les langages quelles maicirctrisent sans apprentissage et meacutediation dun outil tiersLa flexibiliteacute tout est possibleLe traitement des fichiers plats (hors ) peut ecirctre plus simples et plus performant avec des BD

langages proches des systegravemes

3 ETL en mode batch ou en mode flux

The standard architecture for an ETL system is based on periodic batch extracts from the source data which then flows through the system resulting in a batch update of the final end user tables

(Kimball Caserta 2004 p13)

Un ETL alimente en geacuteneacuteral un data warehouse par des processus peacuteriodiquesbatch

Fondamental

Meacutethode ETL baseacutes sur un outil

Meacutethode ETL ex nihilo

Fondamental ETL en mode batch

ETL increacutemental

9

----

-

-

-

--

--

1

2

Il existe neacuteanmoins des applications neacutecessitant des data warehouses alimenteacutes en temps reacuteel en mode flux (qui ne sont pas abordeacutes dans le cadre de ce cours)

4 ETL increacutemental

Un ETL non increacutemental est

soit un ETL qui ne sert quune seule fois ( ) one shotsoit un ETL qui refait 100 du processus de migration agrave chaque fois que lon souhaite une mise agrave jour (le data warehouse est videacute puis rempli agrave nouveau avec les donneacutees actuelles)On notera quun tel ETL ne gegravere pas dhistorisation

Un ETL instrumente normalement un processus increacutemental

Les donneacutees sont modifieacutees dans les systegravemes transactionnels

mise agrave jour des dimensions ou ajouts de nouveaux faits

LETL reacutepercute les mises agrave jour dans le data warehouse

Classiquement les faits saccumulent dans le data warehouse il ny a jamais ni suppression ni mise agrave jour (croissance monotone)

Lorsquune dimension est mise agrave jour lETL doit garder la meacutemoire des anciennes valeurs afin que les anciens faits restent bien relieacutes aux anciennes valeurs

Ils existent plusieurs strateacutegies pour geacuterer lhistorique des valeurs des dimensions dans le DW

associer des dates aux dimensions et aux faits afin de savoir quelle valeur de dimension est valide pour quel fait creacuteer de nouvelles entreacutees dans les dimensions (ne pas faire de mise agrave jour au sens dUPDATE)

Rafraicircchissement peacuteriodiqueRafraicircchissement manuelRafraicircchissement eacuteveacutenementiel

Remarque ETL en mode flux

Deacutefinition ETL non increacutemental

Deacutefinition ETL increacutemental

Attention Accumulation des faits

Attention Historisation des dimensions

Meacutethode Strateacutegies de mise agrave jour

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

10

-

-

-

--

Nous proposons un exemple darchitecture pour la mise en place dun ETL en simplifieacutee ex nihilomode batch sans gestion du caractegravere increacutemental

Cette architecture est assez geacuteneacuterale et pourra ecirctre une base pour de nombreux cas mais elle devra

ecirctre adapteacutee neacuteanmoins en fonctions des speacutecificiteacutes propres agrave chaque contexteecirctre compleacuteteacutee (gestion increacutementale gestion des rejets audits)

1 Architecture dETL agrave trois zones

Nous proposons une architecture dETL organiseacutee avec trois zones composeacutees chacune dune base de donneacutees distincte

Zone dextractionUne base de donneacutees destineacutee agrave unifier les sources de donneacutees et offrir un point daccegraves uniqueZone de transformationUne base de donneacutees destineacutee agrave traiter les sources et offrir une interface daccegraves aux donneacutees transformeacutees ( )API

Zone dexploitationUne base de donneacutees destineacutee agrave impleacutementer le data warehouse et les data marts

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

II

Meacutethode

Conseils meacutethodologiques

11

Architecture geacuteneacuterale dun ETL

2 Conseils meacutethodologiques

Dans la mesure du possible utiliser un scheacutema de base de donneacutees pour chaque zone de lETL (BDE BDT DW)

Si tout doit ecirctre reacutealiseacute au sein dun seul scheacutema utiliser un systegraveme de preacute-fixage des noms bde_table bdt_table dw_table

Accegraves inter-scheacutemas sous Oracle (cf p)

Fondamental

Meacutethode ETL multi-scheacutema

Meacutethode ETL mono-scheacutema (contraintes de nommage)

Rappel

Carte des donneacutees

12

3 Reacutesumeacute ETL en image

Processus ETL

4 Carte des donneacutees

La carte des donneacutees ( ) est un inventaire et une mise en correspondance des logical data mapdonneacutees preacutesentes dans chaque zone

Deacutefinition Carte des donneacutees

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Principes geacuteneacuteraux dun processus ETL

7

-

-

1 Principe de lETL

L est le processus qui permet de charger un data warehouse agrave partir de donneacutees externes ETL

geacuteneacuteralement issues de bases transactionnelles Son rocircle est de reacutecupeacuterer ces donneacutees et de les traiter pour quelles correspondent aux besoins du modegravele dimensionnel

En geacuteneacuteral les donneacutees sources doivent ecirctre nettoyeacutees et ameacutenageacutees pour ecirctre exploitables par les outils deacutecisionnels

You get the data out of its original source location (E) you do something to it (T) and then you load it (L) into a final set of tables for the users to query

(Kimball et al 2008 p369)

Selon Kimball 70 de leffort consacreacute agrave un projet de BI est deacutepenseacute dans lETL(2004 pxxi)

2 ETL ex nihilo ou outil dETL

Un ETL peut ecirctre

deacuteveloppeacute pour un projet directement dans un langage bas niveau (Java SQL ex nihiloPLSQL) ou sappuyer sur un outil dETL (Talend Open Studio Pentaho Data Integration Informatica PowerCenter )

Principes geacuteneacuteraux dun processus ETL I

Deacutefinition Processus Extraction Transformation Load

Fondamental

Fondamental

ETL en mode batch ou en mode flux

8

-

--

-

-

-----

-

ETL Tool versus Hand Coding (Buy a Tool Suite or Roll Your Own)

The answer is ldquoIt dependsrdquo

(Kimball Caserta 2004 pp10-13)

Les avantages offerts par loutil ETL sont

De structurer et de rassembler lensemble des morceaux de code neacutecessaire aux transferts et aux transformations des donneacuteesDoffrir une repreacutesentation graphique des flux et opeacuterationsDe faciliter la maintenance et leacutevolution de lETLDinteacutegrer la gestion des meacutetadonneacuteesDinteacutegrer la gestion des erreursDe disposer dAPI deacutedieacutees (connexion importexport) daccegraves aux donneacutees ( CSV BD

)XML

Les avantages offerts par une approche manuelle sont

Lhomogeacuteneacuteiteacute technologique et la disponibiliteacute interne des compeacutetences les eacutequipes utilisent les langages quelles maicirctrisent sans apprentissage et meacutediation dun outil tiersLa flexibiliteacute tout est possibleLe traitement des fichiers plats (hors ) peut ecirctre plus simples et plus performant avec des BD

langages proches des systegravemes

3 ETL en mode batch ou en mode flux

The standard architecture for an ETL system is based on periodic batch extracts from the source data which then flows through the system resulting in a batch update of the final end user tables

(Kimball Caserta 2004 p13)

Un ETL alimente en geacuteneacuteral un data warehouse par des processus peacuteriodiquesbatch

Fondamental

Meacutethode ETL baseacutes sur un outil

Meacutethode ETL ex nihilo

Fondamental ETL en mode batch

ETL increacutemental

9

----

-

-

-

--

--

1

2

Il existe neacuteanmoins des applications neacutecessitant des data warehouses alimenteacutes en temps reacuteel en mode flux (qui ne sont pas abordeacutes dans le cadre de ce cours)

4 ETL increacutemental

Un ETL non increacutemental est

soit un ETL qui ne sert quune seule fois ( ) one shotsoit un ETL qui refait 100 du processus de migration agrave chaque fois que lon souhaite une mise agrave jour (le data warehouse est videacute puis rempli agrave nouveau avec les donneacutees actuelles)On notera quun tel ETL ne gegravere pas dhistorisation

Un ETL instrumente normalement un processus increacutemental

Les donneacutees sont modifieacutees dans les systegravemes transactionnels

mise agrave jour des dimensions ou ajouts de nouveaux faits

LETL reacutepercute les mises agrave jour dans le data warehouse

Classiquement les faits saccumulent dans le data warehouse il ny a jamais ni suppression ni mise agrave jour (croissance monotone)

Lorsquune dimension est mise agrave jour lETL doit garder la meacutemoire des anciennes valeurs afin que les anciens faits restent bien relieacutes aux anciennes valeurs

Ils existent plusieurs strateacutegies pour geacuterer lhistorique des valeurs des dimensions dans le DW

associer des dates aux dimensions et aux faits afin de savoir quelle valeur de dimension est valide pour quel fait creacuteer de nouvelles entreacutees dans les dimensions (ne pas faire de mise agrave jour au sens dUPDATE)

Rafraicircchissement peacuteriodiqueRafraicircchissement manuelRafraicircchissement eacuteveacutenementiel

Remarque ETL en mode flux

Deacutefinition ETL non increacutemental

Deacutefinition ETL increacutemental

Attention Accumulation des faits

Attention Historisation des dimensions

Meacutethode Strateacutegies de mise agrave jour

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

10

-

-

-

--

Nous proposons un exemple darchitecture pour la mise en place dun ETL en simplifieacutee ex nihilomode batch sans gestion du caractegravere increacutemental

Cette architecture est assez geacuteneacuterale et pourra ecirctre une base pour de nombreux cas mais elle devra

ecirctre adapteacutee neacuteanmoins en fonctions des speacutecificiteacutes propres agrave chaque contexteecirctre compleacuteteacutee (gestion increacutementale gestion des rejets audits)

1 Architecture dETL agrave trois zones

Nous proposons une architecture dETL organiseacutee avec trois zones composeacutees chacune dune base de donneacutees distincte

Zone dextractionUne base de donneacutees destineacutee agrave unifier les sources de donneacutees et offrir un point daccegraves uniqueZone de transformationUne base de donneacutees destineacutee agrave traiter les sources et offrir une interface daccegraves aux donneacutees transformeacutees ( )API

Zone dexploitationUne base de donneacutees destineacutee agrave impleacutementer le data warehouse et les data marts

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

II

Meacutethode

Conseils meacutethodologiques

11

Architecture geacuteneacuterale dun ETL

2 Conseils meacutethodologiques

Dans la mesure du possible utiliser un scheacutema de base de donneacutees pour chaque zone de lETL (BDE BDT DW)

Si tout doit ecirctre reacutealiseacute au sein dun seul scheacutema utiliser un systegraveme de preacute-fixage des noms bde_table bdt_table dw_table

Accegraves inter-scheacutemas sous Oracle (cf p)

Fondamental

Meacutethode ETL multi-scheacutema

Meacutethode ETL mono-scheacutema (contraintes de nommage)

Rappel

Carte des donneacutees

12

3 Reacutesumeacute ETL en image

Processus ETL

4 Carte des donneacutees

La carte des donneacutees ( ) est un inventaire et une mise en correspondance des logical data mapdonneacutees preacutesentes dans chaque zone

Deacutefinition Carte des donneacutees

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

ETL en mode batch ou en mode flux

8

-

--

-

-

-----

-

ETL Tool versus Hand Coding (Buy a Tool Suite or Roll Your Own)

The answer is ldquoIt dependsrdquo

(Kimball Caserta 2004 pp10-13)

Les avantages offerts par loutil ETL sont

De structurer et de rassembler lensemble des morceaux de code neacutecessaire aux transferts et aux transformations des donneacuteesDoffrir une repreacutesentation graphique des flux et opeacuterationsDe faciliter la maintenance et leacutevolution de lETLDinteacutegrer la gestion des meacutetadonneacuteesDinteacutegrer la gestion des erreursDe disposer dAPI deacutedieacutees (connexion importexport) daccegraves aux donneacutees ( CSV BD

)XML

Les avantages offerts par une approche manuelle sont

Lhomogeacuteneacuteiteacute technologique et la disponibiliteacute interne des compeacutetences les eacutequipes utilisent les langages quelles maicirctrisent sans apprentissage et meacutediation dun outil tiersLa flexibiliteacute tout est possibleLe traitement des fichiers plats (hors ) peut ecirctre plus simples et plus performant avec des BD

langages proches des systegravemes

3 ETL en mode batch ou en mode flux

The standard architecture for an ETL system is based on periodic batch extracts from the source data which then flows through the system resulting in a batch update of the final end user tables

(Kimball Caserta 2004 p13)

Un ETL alimente en geacuteneacuteral un data warehouse par des processus peacuteriodiquesbatch

Fondamental

Meacutethode ETL baseacutes sur un outil

Meacutethode ETL ex nihilo

Fondamental ETL en mode batch

ETL increacutemental

9

----

-

-

-

--

--

1

2

Il existe neacuteanmoins des applications neacutecessitant des data warehouses alimenteacutes en temps reacuteel en mode flux (qui ne sont pas abordeacutes dans le cadre de ce cours)

4 ETL increacutemental

Un ETL non increacutemental est

soit un ETL qui ne sert quune seule fois ( ) one shotsoit un ETL qui refait 100 du processus de migration agrave chaque fois que lon souhaite une mise agrave jour (le data warehouse est videacute puis rempli agrave nouveau avec les donneacutees actuelles)On notera quun tel ETL ne gegravere pas dhistorisation

Un ETL instrumente normalement un processus increacutemental

Les donneacutees sont modifieacutees dans les systegravemes transactionnels

mise agrave jour des dimensions ou ajouts de nouveaux faits

LETL reacutepercute les mises agrave jour dans le data warehouse

Classiquement les faits saccumulent dans le data warehouse il ny a jamais ni suppression ni mise agrave jour (croissance monotone)

Lorsquune dimension est mise agrave jour lETL doit garder la meacutemoire des anciennes valeurs afin que les anciens faits restent bien relieacutes aux anciennes valeurs

Ils existent plusieurs strateacutegies pour geacuterer lhistorique des valeurs des dimensions dans le DW

associer des dates aux dimensions et aux faits afin de savoir quelle valeur de dimension est valide pour quel fait creacuteer de nouvelles entreacutees dans les dimensions (ne pas faire de mise agrave jour au sens dUPDATE)

Rafraicircchissement peacuteriodiqueRafraicircchissement manuelRafraicircchissement eacuteveacutenementiel

Remarque ETL en mode flux

Deacutefinition ETL non increacutemental

Deacutefinition ETL increacutemental

Attention Accumulation des faits

Attention Historisation des dimensions

Meacutethode Strateacutegies de mise agrave jour

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

10

-

-

-

--

Nous proposons un exemple darchitecture pour la mise en place dun ETL en simplifieacutee ex nihilomode batch sans gestion du caractegravere increacutemental

Cette architecture est assez geacuteneacuterale et pourra ecirctre une base pour de nombreux cas mais elle devra

ecirctre adapteacutee neacuteanmoins en fonctions des speacutecificiteacutes propres agrave chaque contexteecirctre compleacuteteacutee (gestion increacutementale gestion des rejets audits)

1 Architecture dETL agrave trois zones

Nous proposons une architecture dETL organiseacutee avec trois zones composeacutees chacune dune base de donneacutees distincte

Zone dextractionUne base de donneacutees destineacutee agrave unifier les sources de donneacutees et offrir un point daccegraves uniqueZone de transformationUne base de donneacutees destineacutee agrave traiter les sources et offrir une interface daccegraves aux donneacutees transformeacutees ( )API

Zone dexploitationUne base de donneacutees destineacutee agrave impleacutementer le data warehouse et les data marts

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

II

Meacutethode

Conseils meacutethodologiques

11

Architecture geacuteneacuterale dun ETL

2 Conseils meacutethodologiques

Dans la mesure du possible utiliser un scheacutema de base de donneacutees pour chaque zone de lETL (BDE BDT DW)

Si tout doit ecirctre reacutealiseacute au sein dun seul scheacutema utiliser un systegraveme de preacute-fixage des noms bde_table bdt_table dw_table

Accegraves inter-scheacutemas sous Oracle (cf p)

Fondamental

Meacutethode ETL multi-scheacutema

Meacutethode ETL mono-scheacutema (contraintes de nommage)

Rappel

Carte des donneacutees

12

3 Reacutesumeacute ETL en image

Processus ETL

4 Carte des donneacutees

La carte des donneacutees ( ) est un inventaire et une mise en correspondance des logical data mapdonneacutees preacutesentes dans chaque zone

Deacutefinition Carte des donneacutees

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

ETL increacutemental

9

----

-

-

-

--

--

1

2

Il existe neacuteanmoins des applications neacutecessitant des data warehouses alimenteacutes en temps reacuteel en mode flux (qui ne sont pas abordeacutes dans le cadre de ce cours)

4 ETL increacutemental

Un ETL non increacutemental est

soit un ETL qui ne sert quune seule fois ( ) one shotsoit un ETL qui refait 100 du processus de migration agrave chaque fois que lon souhaite une mise agrave jour (le data warehouse est videacute puis rempli agrave nouveau avec les donneacutees actuelles)On notera quun tel ETL ne gegravere pas dhistorisation

Un ETL instrumente normalement un processus increacutemental

Les donneacutees sont modifieacutees dans les systegravemes transactionnels

mise agrave jour des dimensions ou ajouts de nouveaux faits

LETL reacutepercute les mises agrave jour dans le data warehouse

Classiquement les faits saccumulent dans le data warehouse il ny a jamais ni suppression ni mise agrave jour (croissance monotone)

Lorsquune dimension est mise agrave jour lETL doit garder la meacutemoire des anciennes valeurs afin que les anciens faits restent bien relieacutes aux anciennes valeurs

Ils existent plusieurs strateacutegies pour geacuterer lhistorique des valeurs des dimensions dans le DW

associer des dates aux dimensions et aux faits afin de savoir quelle valeur de dimension est valide pour quel fait creacuteer de nouvelles entreacutees dans les dimensions (ne pas faire de mise agrave jour au sens dUPDATE)

Rafraicircchissement peacuteriodiqueRafraicircchissement manuelRafraicircchissement eacuteveacutenementiel

Remarque ETL en mode flux

Deacutefinition ETL non increacutemental

Deacutefinition ETL increacutemental

Attention Accumulation des faits

Attention Historisation des dimensions

Meacutethode Strateacutegies de mise agrave jour

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

10

-

-

-

--

Nous proposons un exemple darchitecture pour la mise en place dun ETL en simplifieacutee ex nihilomode batch sans gestion du caractegravere increacutemental

Cette architecture est assez geacuteneacuterale et pourra ecirctre une base pour de nombreux cas mais elle devra

ecirctre adapteacutee neacuteanmoins en fonctions des speacutecificiteacutes propres agrave chaque contexteecirctre compleacuteteacutee (gestion increacutementale gestion des rejets audits)

1 Architecture dETL agrave trois zones

Nous proposons une architecture dETL organiseacutee avec trois zones composeacutees chacune dune base de donneacutees distincte

Zone dextractionUne base de donneacutees destineacutee agrave unifier les sources de donneacutees et offrir un point daccegraves uniqueZone de transformationUne base de donneacutees destineacutee agrave traiter les sources et offrir une interface daccegraves aux donneacutees transformeacutees ( )API

Zone dexploitationUne base de donneacutees destineacutee agrave impleacutementer le data warehouse et les data marts

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

II

Meacutethode

Conseils meacutethodologiques

11

Architecture geacuteneacuterale dun ETL

2 Conseils meacutethodologiques

Dans la mesure du possible utiliser un scheacutema de base de donneacutees pour chaque zone de lETL (BDE BDT DW)

Si tout doit ecirctre reacutealiseacute au sein dun seul scheacutema utiliser un systegraveme de preacute-fixage des noms bde_table bdt_table dw_table

Accegraves inter-scheacutemas sous Oracle (cf p)

Fondamental

Meacutethode ETL multi-scheacutema

Meacutethode ETL mono-scheacutema (contraintes de nommage)

Rappel

Carte des donneacutees

12

3 Reacutesumeacute ETL en image

Processus ETL

4 Carte des donneacutees

La carte des donneacutees ( ) est un inventaire et une mise en correspondance des logical data mapdonneacutees preacutesentes dans chaque zone

Deacutefinition Carte des donneacutees

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

10

-

-

-

--

Nous proposons un exemple darchitecture pour la mise en place dun ETL en simplifieacutee ex nihilomode batch sans gestion du caractegravere increacutemental

Cette architecture est assez geacuteneacuterale et pourra ecirctre une base pour de nombreux cas mais elle devra

ecirctre adapteacutee neacuteanmoins en fonctions des speacutecificiteacutes propres agrave chaque contexteecirctre compleacuteteacutee (gestion increacutementale gestion des rejets audits)

1 Architecture dETL agrave trois zones

Nous proposons une architecture dETL organiseacutee avec trois zones composeacutees chacune dune base de donneacutees distincte

Zone dextractionUne base de donneacutees destineacutee agrave unifier les sources de donneacutees et offrir un point daccegraves uniqueZone de transformationUne base de donneacutees destineacutee agrave traiter les sources et offrir une interface daccegraves aux donneacutees transformeacutees ( )API

Zone dexploitationUne base de donneacutees destineacutee agrave impleacutementer le data warehouse et les data marts

Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental

II

Meacutethode

Conseils meacutethodologiques

11

Architecture geacuteneacuterale dun ETL

2 Conseils meacutethodologiques

Dans la mesure du possible utiliser un scheacutema de base de donneacutees pour chaque zone de lETL (BDE BDT DW)

Si tout doit ecirctre reacutealiseacute au sein dun seul scheacutema utiliser un systegraveme de preacute-fixage des noms bde_table bdt_table dw_table

Accegraves inter-scheacutemas sous Oracle (cf p)

Fondamental

Meacutethode ETL multi-scheacutema

Meacutethode ETL mono-scheacutema (contraintes de nommage)

Rappel

Carte des donneacutees

12

3 Reacutesumeacute ETL en image

Processus ETL

4 Carte des donneacutees

La carte des donneacutees ( ) est un inventaire et une mise en correspondance des logical data mapdonneacutees preacutesentes dans chaque zone

Deacutefinition Carte des donneacutees

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Conseils meacutethodologiques

11

Architecture geacuteneacuterale dun ETL

2 Conseils meacutethodologiques

Dans la mesure du possible utiliser un scheacutema de base de donneacutees pour chaque zone de lETL (BDE BDT DW)

Si tout doit ecirctre reacutealiseacute au sein dun seul scheacutema utiliser un systegraveme de preacute-fixage des noms bde_table bdt_table dw_table

Accegraves inter-scheacutemas sous Oracle (cf p)

Fondamental

Meacutethode ETL multi-scheacutema

Meacutethode ETL mono-scheacutema (contraintes de nommage)

Rappel

Carte des donneacutees

12

3 Reacutesumeacute ETL en image

Processus ETL

4 Carte des donneacutees

La carte des donneacutees ( ) est un inventaire et une mise en correspondance des logical data mapdonneacutees preacutesentes dans chaque zone

Deacutefinition Carte des donneacutees

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Carte des donneacutees

12

3 Reacutesumeacute ETL en image

Processus ETL

4 Carte des donneacutees

La carte des donneacutees ( ) est un inventaire et une mise en correspondance des logical data mapdonneacutees preacutesentes dans chaque zone

Deacutefinition Carte des donneacutees

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Carte des donneacutees

13

Exemple de cartographie des donneacutees

(Kimball Caserta 2004 p56-59)

Exemple

Compleacutement

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Projet Fantastic Rappel

14

1

2

Cet exercice est la suite du projet Fantastic commenceacute dans le module Introduction agrave la modeacutelisation dimensionnelle

Lobjectif de cet exercice est

dimpleacutementer le data warehouse preacuteceacutedemment modeacuteliseacute sous Oracle (serveur sme-oraclesme)utc

dimpleacutementer un processus ETL (ex nihilo batch non increacutemental) permettant de lalimenter avec Oracle et PLSQL

Projet Fantastique Problegraveme poseacute (cf p)

Projet Fantastic Donneacutees disponibles (cf p)

Modegravele dimensionnel du data warehouse Fantastic

Projet Fantastic Rappel III

Rappel Problegraveme

Rappel Donneacutees sources

Rappel Rappel du modegravele cible

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

15

--

1 2

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone E dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone E Extraction

La est une relationnelle destineacutee agrave impleacutementer la zone dextraction dun ETL pour BDE BD

offrir un unique point daccegraves agrave lensemble des sources de donneacutees

La BD est composeacutee de

tables permettant de les donneacutees agrave importer depuis des sources externes rapatrieret de vues pour se agrave des sources dynamiques situeacutees dans la mecircme BDconnecter

Les donneacutees situeacutees dans des fichiers CSV doivent

ecirctre rapatrieacutees sur un ou des serveurs accessibles depuis la BDE importeacutees dans la BDE une table pour chaque fichier

Il faudra automatiser le processus de copie des fichiers si les donneacutees sont susceptibles decirctre mises agrave jour

Certains SGBD comme Oracle propose une alternative agrave limport gracircce agrave un concept de table externe qui permet de lier dynamiquement une deacutefinition de table agrave un fichier CSV

Impleacutementation simplifieacutee dune zone dextraction avec Oracle

IV

Deacutefinition Base de donneacutees dextraction

Meacutethode Les fichiers CSV

Remarque Tables externes

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Sources de donneacutees

16

---

-

--

--

Pour les fichiers autres que CSV deux solutions sont agrave eacutetudier

soit votre BDE offre une API daccegraves direct agrave ces formats soit le fichier est transformeacute en CSV

Dans le second cas il faudra automatiser la transformation si le fichier est susceptible de mises agrave jour

Pour les donneacutees stockeacutees en BD trois solutions sont agrave eacutetudier

si la BDE et la BD source sont sur le mecircme SGBD on creacuteeacute simplement une vue sinon lorsque cest possible on eacutetablit un lien dynamique entre la BDE et les tables sources (proprieacutetaire ODBC ou JDBC) sinon on fait un export de la BD source dans un fichier CSV (en geacuterant lautomatisation de lexport lorsque la base est vivante)

Les contraintes doivent ecirctre relacirccheacutees au maximum dans la BDE pour assurer que les donneacutees sources seront toutes correctement accessibles

On veillera agrave avoir correctement documenteacute les contraintes connues notamment pour les donneacutees provenant de SGBD dans lesquels ces contraintes sont formaliseacutees dans le scheacutema

2 Sources de donneacutees

Reacutealiser des vues pour acceacuteder dynamiquement aux donneacutees sources

Creacuteer une Oracle pour acceacuteder dynamiquement agrave ce fichiertable externe

Si le fichier nest pas accessible directement depuis le serveur Oracle proceacuteder agrave une copie (automatiseacutee par script)

Pour les donneacutees ne demandant aucune mise agrave jour ou des mises agrave jour tregraves ponctuelles

faire un export depuis la source en CSV creacuteer une table Oracle dans la BDE

importer manuellement le CSV avec SQL Developer

Meacutethode Les autres fichiers tableurs XML

Meacutethode Les donneacutees stockeacutees en BD

Meacutethode Gestion des contraintes

Meacutethode Donneacutees sur le mecircme serveur Oracle

Meacutethode Donneacutees dynamiques en fichier CSV

Meacutethode Donneacutees statiques

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Tables externes sous Oracle

17

3 Tables externes sous Oracle

Une table externe sous Oracle est une meacutethode daccegraves sans copie agrave des fichiers CSV dynamiques exactement comme sil sagissait dune table de la BD

1 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegt

2 CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Exemple de reacutepertoire de travail

Le reacutepertoire de la source et le fichier source doivent ecirctre accessibles en lecture pour le processus Oracle

Le reacutepertoire des fichiers de log doit ecirctre accessible en lecture et eacutecriture pour le processus Oracle

Deacutefinition Table externe

Syntaxe Preacuteambule Deacuteclaration des reacutepertoires de travail

Attention Accegraves aux reacutepertoire de travail

CREATE OR REPLACE DIRECTORY ltnom du reacutepertoire sourcegt AS ltchemin du reacutepertoire de la sourcegtCREATE OR REPLACE DIRECTORY ltnom du reacutepertoire loggt AS ltchemin du reacutepertoire des fichiers de loggt

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Tables externes sous Oracle

18

All directories are created in a single namespace and are not owned by an individual schemalaquo raquo

httpdocsoraclecomcdB19306_01server102b14200statements_5007htm

1 CREATE TABLE ltnom de la tablegt (2 ltdeacuteclaration des attributs avec domaine mais sans contraintegt3 )4 ORGANIZATION EXTERNAL5 (TYPE ORACLE_LOADER6 DEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgt7 ACCESS PARAMETERS 8 (9 RECORDS DELIMITED BY ltcaractegravere de fin de lignegt

10 SKIP ltnombre de lignes agrave ignorergt11 CHARACTERSET ltencodage des caractegraveresgt12 BADFILE ltreacutepertoiregtltfichiergt13 LOGFILE ltreacutepertoiregtltfichiergt14 FIELDS TERMINATED BY ltseacuteparateur de champgt15 OPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt16 )17 LOCATION (ltfichier sourcegt))18 REJECT LIMIT UNLIMITED

One important point to remember is that comments must be placed before any access parameters laquo If you include comments in the access parameter sections Oracle will throw an error when you query the external table but not when you are creating it raquo

httpsoracleappsnoteswordpresscom20120210oracle-external-tables-a-few-examples

1 CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsv2 CREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test3

1 CREATE TABLE tImport (2 a VARCHAR(50)3 b NUMBER(10)4 )5 ORGANIZATION EXTERNAL6 (TYPE ORACLE_LOADER7 DEFAULT DIRECTORY monRepertoireSrc8 ACCESS PARAMETERS9 (

10 RECORDS DELIMITED BY newline11 SKIP 112 CHARACTERSET UTF8

Attention

Syntaxe Creacuteation dune table externe

Attention Ne pas utiliser de commentaire au sein la deacuteclaration des paramegravetres daccegraves

Exemple

CREATE TABLE ltnom de la tablegt (ltdeacuteclaration des attributs avec domaine mais sans contraintegt)ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY ltreacutepertoire deacuteclareacute preacutealablementgtACCESS PARAMETERS (RECORDS DELIMITED BY ltcaractegravere de fin de lignegtSKIP ltnombre de lignes agrave ignorergtCHARACTERSET ltencodage des caractegraveresgtBADFILE ltreacutepertoiregtltfichiergtLOGFILE ltreacutepertoiregtltfichiergtFIELDS TERMINATED BY ltseacuteparateur de champgtOPTIONALLY ENCLOSED BY ltseacuteparateur de chaicircnegt)LOCATION (ltfichier sourcegt))REJECT LIMIT UNLIMITED

CREATE OR REPLACE DIRECTORY monRepertoireSrc AS user1cnf26nf26projetcsvCREATE OR REPLACE DIRECTORY monRepertoireLog AS volsmeuser1xuvsnf26nf26p099test

CREATE TABLE tImport (a VARCHAR(50)b NUMBER(10))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY monRepertoireSrcACCESS PARAMETERS(RECORDS DELIMITED BY newlineSKIP 1CHARACTERSET UTF8

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Tables externes sous Oracle

19

-------

-

--

13 BADFILE monRepertoireLogimportbad14 LOGFILE monRepertoireLogimportlog15 FIELDS TERMINATED BY 16 OPTIONALLY ENCLOSED BY 17 )18 LOCATION (sourcescsv))19 REJECT LIMIT UNLIMITED

Le reacutepertoire ougrave se trouvent le fichier sourceDEFAULT DIRECTORY

Seacuteparateur denregistrements ( est le caractegravere de fin de RECORDS DELIMITED BY newline

ligne standard du systegraveme)SKIP 1 permet dignorer la premiegravere ligne dun fichier CSV lorsque celui-ci contient les entecirctes de colonnesCHARACTERSET permet de speacutecifier lencodage des caractegraveres (UTF8)

Fichier contenant les enregistrements rejeteacutes agrave limport (reacutecreacuteeacute agrave chaque exeacutecution)BADFILE

Fichier contenant les traces dexeacutecution (traces ajouteacutees agrave chaque exeacutecution)LOGFILE

Seacuteparateur de champs (en geacuteneacuteral dans un CSV)FIELDS TERMINATED BY

Seacuteparateur de chaicircnes (en geacuteneacuteral dans un CSV)OPTIONALLY ENCLOSED BY

Nom du fichier dans le reacutepertoire seacutelectionneacuteLOCATION

Nombre denregistrements pouvant ecirctre rejeteacutes avant interruption de la REJECT LIMIT

requecircte (un entier ou UNLIMITED)

1 DESCRIBE Timport2 SELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM

USER_EXTERNAL_TABLES

Laccegraves agrave la source externe CSV par Oracle ne se fait en fait quagrave la premiegravere interrogation (SELECT) donc il est neacutecessaire dexeacutecuter un appel agrave la table pour valider cet accegraves (seule une veacuterification syntaxique est faite au moment du le fichier CSV peut mecircme ne pas exister)CREATE TABLE

En pratique si les donneacutees comportent des erreurs les problegravemes se deacuteclareront agrave ce moment lagrave On consultera le fichiers de log et des enregistrements rejeteacutes pour le savoir

1 SELECT FROM Timport

Si les volumes de donneacutee sont importants (sil y a beaucoup de lignes) privileacutegiez lusage de la clause ROWNUM pour eacuteviter de faire transiter des meacutega-octets de donneacutees entre le serveur et le client Les deacutelais de reacuteaction en seront ameacutelioreacutes

Vous pouvez aussi utiliser des SUM MIN MAX etc pour ecirctre sucircr que toutes les lignes et colonnes sont correctement lues

Description des paramegravetres

Syntaxe Veacuterification de la deacuteclaration de la table externe

Attention Accegraves

Attention Gros fichiers

BADFILE monRepertoireLogimportbadLOGFILE monRepertoireLogimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (sourcescsv))REJECT LIMIT UNLIMITED

DESCRIBE TimportSELECT TABLE_NAME TYPE_NAME DEFAULT_DIRECTORY_NAME FROM USER_EXTERNAL_TABLES

SELECT FROM Timport

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Exemple de chargement de donneacutees depuis un CSV par une table externe

20

-

-

--

--

Une fois la proceacutedure termineacutee effectuer un pour deacuteterminer si limport a bien traiteacute count()

toutes les lignes du fichier source

Pour speacutecifier des entiers dans les tables externes utiliser avec le obligatoireNUMBER(X) (X)

signifie que le caractegravere standard du systegraveme est utiliseacute RECORDS DELIMITED BY newline

comme caractegravere de fin de ligne

Or

sous Unix le caractegravere de fin de ligne est nsous Windows il est rn

Donc si un fichier CSV est encodeacute sous un systegraveme et lu sous un autre il y aura un problegraveme Par exemple si le fichier est encodeacute sous Windows il aura rn agrave la fin de chaque ligne et sil est lu sous Linux Oracle cherchera uniquement un n dougrave un r reacutesiduel sera consideacutereacute comme faisant partie du dernier champ

La solution la plus robuste est de speacutecifier le caractegravere de fin de ligne en dur

Si le fichier source a eacuteteacute encodeacute sous Unix RECORDS DELIMITED BY nSi le fichier source a eacuteteacute encodeacute sous Windows RECORDS DELIMITED BY rn

Penser agrave geacuterer les fichiers de rejet et de log Le plus simple est de les supprimer apregraves une exeacutecution incorrecte

Les fichiers de rejet ne sont pas creacuteeacutes si lexeacutecution est correcte (et donc un eacuteventuel fichier existant nest pas modifieacutee par une exeacutecution correcte)Les fichiers de log grossissent agrave chaque exeacutecution

4 Exemple de chargement de donneacutees depuis un CSV par une table externe

Il est possible dutiliser les tables externes pour charger des donneacutees issues dun fichier CSV dans une table existante

Soit la table agrave charger avec un fichier tTypeDefaut tTypdeDefauttxt

1 tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

On peut utiliser une table externe

Conseil Tout recompter

Remarque NUMBER(X)

Remarque Caractegravere de fin de ligne

Conseil

Exemple

tTypeDefaut (pkTypeDefautnumber(4) libellevarchar(50) fkFamilleDefautchar(1)=gttFamilleDefaut)

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Insertion CSV manuelle avec SQL Developer

21

1 CREATE TABLE tTypeDefautLoad (2 pkTypeDefaut number(4)3 libelle varchar(50)4 fkFamilleDefaut char(1)5 )6 ORGANIZATION EXTERNAL7 (TYPE ORACLE_LOADER8 DEFAULT DIRECTORY srcDir9 ACCESS PARAMETERS

10 (11 RECORDS DELIMITED BY NEWLINE12 BADFILE logDirimportbad13 LOGFILE logDirimportlog14 FIELDS TERMINATED BY 15 OPTIONALLY ENCLOSED BY )16 LOCATION (tTypeDefauttxt))17 REJECT LIMIT UNLIMITED

1 INSERT INTO tTypeDefaut2 SELECT FROM tTypeDefautLoad

5 Insertion CSV manuelle avec SQL Developer

Effectuer un clic droit sur le dossier agrave gauche dans SQL Developer et choisir tables Import data

pour acceacuteder agrave un assistant de chargement manuel

Import manuel de donneacutees avec Oracle SQL Developer

CREATE TABLE tTypeDefautLoad (pkTypeDefaut number(4)libelle varchar(50)fkFamilleDefaut char(1))ORGANIZATION EXTERNAL(TYPE ORACLE_LOADERDEFAULT DIRECTORY srcDirACCESS PARAMETERS(RECORDS DELIMITED BY NEWLINEBADFILE logDirimportbadLOGFILE logDirimportlogFIELDS TERMINATED BY OPTIONALLY ENCLOSED BY )LOCATION (tTypeDefauttxt))REJECT LIMIT UNLIMITED

INSERT INTO tTypeDefautSELECT FROM tTypeDefautLoad

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Exercice Projet Fantastic Mise en place de la zone dextraction

22

--

Lobjectif est dabord de creacuteer la BDE Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema (f pour projet Fantastique) bde

ou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bde_

Question 1

Exercice Projet Fantastic Mise en place de la zone dextraction

V

-

-

Creacuteez une vue pour la table de la base Oracle cataloguef_bde_catalogue

Indices

Enregistrez linstruction de creacuteation de votre vue dans un fichier f_bde_cataloguesql

Creacuteez un fichier qui va appeler toutes vos instructions de creacuteation dobjets f_bdesql

dans la BDESa premiegravere ligne est donc f_bde_cataloguesqlOn pourra eacuteventuellement creacuteer un fichier qui appellera les scripts fsql f_bdesql

et f_bdtsql f_dwsql

Gestion de fichiers SQL (cf p42)

Utiliser linstruction pour la creacuteation de la vue pour permettre la CREATE OR REPLACE VIEW

recreacuteation de la vue par le script f_bdesql

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Exercice Projet Fantastic Mise en place de la zone dextraction

23

Question 2

---

----

--

Creacuteez une table externe pour chacun des fichiers et marketingods departementsInsee2003

txt

Indices

Faites un export CSV du fichier vers le fichier marketingods marketingcsv

Copiez le ainsi que dans un dossier de votre departementsInsee2003txt data

compte sur le serveur sme-oraclesmeutcOuvrez laccegraves agrave ce dossier en lecture ( )chmod 755

Creacuteez un dossier ouvert en lecture et eacutecriture ( )tmp chmod 777

Creacuteez les objets permettant de pointer sur les reacutepertoires et DIRECTORY data tmp

Creacuteez une table externe pour en envoyant les fichiers departementsInsee2003txt

de rejet et de log departementsInsee2003txtbad departementsInsee2003

dans votre dossier txtlog tmp

Testez votre table externe SELECT FROM Veacuterifiez que tout sest bien passeacute en examinant les fichiers de rejet et de logDe la mecircme faccedilon creacuteez une table externe pour et veacuterifier laccegraves aux marketingcsv

donneacutees

Pensez que les objets sont partageacutes au niveau de toute linstance et ne sont pas DIRECTORY

speacutecifiques agrave un scheacutema

Donc si deux creacuteent un mecircme nommeacute il y aura un conflit (la seconde users DIRECTORY tmp

creacuteation eacutecrasera la premiegravere)

Pour acceacuteder agrave un reacutepertoire situeacute dans un reacutepertoire doit ecirctre accessible en exeacutecution d1 d0 d0

( )chmod 711

Pour lire les fichiers et log bad

1 more ~tmpimportlog23 more ~tmpimportbad

Vous pouvez vider les fichiers reacuteguliegraverement pour en faciliter la lecturelog

1 echo gt ~tmpimportlog

Vous pouvez supprimer les fichiers apregraves avoir traiteacute les causes dun rejet (si une bad

exeacutecution ne geacutenegravere pas de rejet elle ne creacutee pas de fichier de rejet et ne modifie donc pas un eacuteventuel fichier existant)

1 rm ~tmpimportbad

more ~tmpimportlog

more ~tmpimportbad

echo gt ~tmpimportlog

rm ~tmpimportbad

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Exercice Projet Fantastic Mise en place de la zone dextraction

24

Question 3

-

Creacuteez une table externe pour le fichier datacsv

Indices

Creacuteez un nouvel objet permettant de pointer sur le reacutepertoire DIRECTORY

homenf26data

Attention le fichier est tregraves volumineux aussi ne faites pas de dessus datacsv SELECT

sous peine dattendre longtemps la fin de lexeacutecution (le serveur devant renvoyer plusieurs Mo de donneacutees)

Faites des partiels avec la clause pour limiter les donneacutees agrave rapatrier et des SELECT ROWNUM

select avec opeacuterations de regroupement (min ou max typiquement)

1 rownumlt=N

Notez quen cas derreur agrave limport portant sur toutes les lignes le fichier de log risque de devenir tregraves volumineux pouvant conduire agrave la saturation de votre compte Videz le fichier de log apregraves avoir geacuteneacutereacute une telle erreur

Pour veacuterifier la taille du log

ls -l ~tmpimportlog

Pour tester toutes les lignes SELECT count() min() max() max()

rownumlt=NSELECT FROM WHERE

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

25

-

--

---

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone T dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone T Transformation

La est une relationnelle ou relationnel-objet destineacutee agrave impleacutementer la zone de BDT BD

transformation dun ETL

Elle reccediloit une copie des donneacutees issue de la zone EElle permet les transformations des donneacuteesElle offre un accegraves aux donneacutees transformeacutees via une API permettant une copie vers la zone L

LAPI de la BDT est un ensemble de fonctions - ou meacutethodes si lon dispose dun qui SGBDRO

les autorise - qui permet dacceacuteder aux donneacutees de faccedilon stable (principe dencapsulation)

LAPI de la BDT permet de rendre le chargement du data warehouse moins deacutependant aux variations dans les sources de donneacutees

Le principe proposeacute est le suivant

Creacuteer une fonction pour chaque attribut existant dans la data warehouseAppeler ces fonctions lors du chargement du data warehouse au lieu dappeler directement les attributs des tables de la BDTChaque fonction est en charge dappeler les attributs de la BDT et de faire les traitements neacutecessaires pour fournir la valeur souhaiteacutee

Impleacutementation simplifieacutee dune zone de transformation avec Oracle

VI

Deacutefinition Base de donneacutees de transformation

Deacutefinition API de la BDT

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Zone T Transformation

26

-

-

-

-

1 SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() 2 FROM t_date t

La zone T est donc composeacutee

dune BDT dont le scheacutema correspond agrave un scheacutema transactionnel repreacutesentant linteacutegration des diffeacuterentes sources (il est similaire agrave celui de la zone E)dune API permettant dacceacuteder aux donneacutees (et dexeacutecuter des transformation)

On notera que la zone de transformation copie depuis la zone dextraction les donneacutees en leacutetat sans transformation Donc elle contient des donneacutees encore sales

En revanche les donneacutees qui sortent de cette zone pour aller vers la zone danalyse - les donneacutees disponibles via lAPI - sont traiteacutees et donc propres

Les transformations simples typiquement qui ne neacutecessitent quun seul enregistrement en entreacutee seront effectueacutees directement et dynamiquement par les fonctions de lAPI (ou des fonctions appeleacutees par celles-ci)

Les transformations plus complexes devront ecirctre reacutealiseacutees par des proceacutedures exeacutecuteacutees en batch apregraves le chargement de la BDT

Elle produiront des donneacutees compleacutementaires stockeacutees dans la BDT

Les vues doivent ecirctre utiliseacutees pour unifier (UNION) ou joindre (JOIN) les diffeacuterentes tables physiques qui repreacutesentent une mecircme donneacutee logique

Les vue mateacuterialiseacutees peuvent ecirctre utiliseacutees et rafraicircchies agrave chaque mise agrave jour de la zone T

Les contraintes de la zone T doivent ecirctre compatibles avec les donneacutees sources afin de

laisser passer 100 des donneacutees depuis la zone E (sans contrainte) vers la zone T (avec contrainte) sassurer le maximum dinformation sur la nature de donneacutees

Si les contraintes sont trop relacirccheacutees il faudra faire des veacuterifications inutiles pour controcircler des donneacutees qui en fait avaient deacutejagrave les proprieacuteteacutes souhaiteacutees

Exemple Exemple dappel agrave lAPI de la BDT en RO

Fondamental Structure de la zone T

Attention

Meacutethode Transformation simple

Meacutethode Transformations complexes

Meacutethode Vues

Meacutethode Gestion des contraintes

SELECT tfpk() tfdate() tfjds() tfmois() tftrimestre() FROM t_date t

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Impleacutementation de la zone T en RO

27

-

-

-

-

-

-

-

Si les contraintes sont trop fortes toutes les donneacutees ne passeront pas

Vue mateacuterialiseacutee sous Oracle 9i (cf p)

2 Impleacutementation de la zone T en RO

On creacutee une table pour chaque vue table externe et table classique de la zone dextractionCes tables sont creacuteeacutees selon la syntaxe SQL3 du modegravele relationnel-objet (afin de pouvoir accepter des meacutethodes)On a donc un attribut disponible dans la zone T pour chaque attribut de la zone EOn deacuteclare une meacutethode pour chaque attribut que lon souhaite exporter dans le modegravele dimensionnelCette meacutethode permettra de reacutealiser dynamiquement les transformations et veacuterifications adeacutequatesOn a donc une meacutethode disponible dans la zone T pour chaque attribut voulu dans le DW

Pour les meacutethodes simples ne portant que sur un enregistrement agrave la fois la meacutethode est attacheacutee agrave la table correspondante

Pour les transformations complexes neacutecessitant un script preacutealable la meacutethode est associeacutee agrave la table ougrave est stockeacutee le reacutesultat de ce script

Des vues peuvent ecirctre creacuteeacutees pour unifier laccegraves aux tables

Pour chaque hypothegravese de propreteacute des donneacutees sources on pose une contrainte associeacutee

Par exemple si une donneacutee doit ecirctre une cleacute primaire et que lon pense que les sources sont correctes de ce point de vue on ajoute la clause PRIMARY KEYPar contre il ne faut pas ajouter les contraintes lorsque lon sait que les donneacutees sources sont sales sans quoi ces donneacutees seront refuseacutees au chargement et ne pourront jamais ecirctre nettoyeacuteesDans le doute il est parfois utile de donner des tailles de champs plus grandes que celle attendues (par exemple une chaicircne de 50 caractegraveres au lieu de 20) ou bien des types plus permissifs (une chaicircne au lieu dune date) afin de ne pas bloquer ou tronquer denregistrement

Le relacircchement des contraintes demandera un travail plus important dimpleacutementation des meacutethodes

Lorsque les donneacutees sources sont propres et quelles sont copieacutees telle quelle dans la cible la meacutethode associeacutee se contente dun de lattribut correspondantreturn

Lorsquun traitement est neacutecessaire il est impleacutementeacute au sein de la meacutethode

Compleacutement

Meacutethode

Rappel Transformation simples et complexes

Rappel Contraintes

Meacutethode Impleacutementation des meacutethodes

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Deacutesactivation et reacuteactivation de contraintes

28

-

-

Pour ecirctre propre une donneacutee doit deacutejagrave respecter les contraintes souhaiteacutees dans la zone T (condition neacutecessaire non suffisante)

Dans tous les autres cas la meacutethode doit effectuer des veacuterifications et traitements

Il faut re-calculer les statistiques neacutecessaires agrave loptimisation du moteur de requecirctes (ANALYSE) comme apregraves tout ajout significatif de donneacutees

Pensez eacutegalement agrave rafraicircchir les vues mateacuterialiseacutees puis agrave exeacutecuter les collectes de statistiques sur ces vues

Plans dexeacutecution sous Oracle 9i (cf p)

3 Deacutesactivation et reacuteactivation de contraintes

Le chargement dans la base dimensionnelle si les meacutethodes de transformation ont eacuteteacute correctement eacutecrites ne comporte que des donneacutees valides De plus ce chargement va impliquer un nombre tregraves important de donneacutees Il est donc souhaitable de deacutesactiver les contraintes sur le modegravele dimensionnel pendant le temps de chargement afin dacceacuteleacuterer cette proceacutedure

Notons que si les contraintes ne sont pas deacutesactiveacutees

agrave chaque ajout dune ligne le moteur de la base va devoir veacuterifier que cette ligne respecte les contraintes de plus si les donneacutees ne sont pas chargeacutees exactement dans le bon ordre des contraintes de type inteacutegriteacute reacutefeacuterentielle peuvent ecirctre temporairement non valideacutees

Preacutecisons enfin quune fois le chargement termineacute les contraintes seront reacuteactiveacutees afin de veacuterifier que les meacutethodes de transformation ont fait correctement leur travail et que les donneacutees respectent effectivement les contraintes du modegravele dimensionnel Si les nouvelles donneacutees ne respectent pas les contraintes ces derniegraveres ne pourront ecirctre reacuteactiveacutees tant que les erreurs nauront pas eacuteteacute corrigeacutees

Oracle fournit un script ( ) pour la creacuteation dune table qui va servir agrave reacutecupeacuterer les utlexcptsql

eacuteventuelles erreurs deacutetecteacutees suite agrave la reacuteactivation des contraintes

1 -- utlexcptsql2 create table exceptions(row_id rowid3 owner varchar2(30)4 table_name varchar2(30)5 constraint varchar2(30))

Fondamental

Attention Collecte des statistiques

Compleacutement

Rappel

Meacutethode Preacutealable agrave la reacuteactivation

-- utlexcptsqlcreate table exceptions(row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30))

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Processus de chargement BDE-gtBDT

29

1 2 3 4 5 6

7

8

1 ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

On notera quil est important pour pouvoir aiseacutement deacutesactiver les contraintes de les avoir explicitement nommeacutees lors de la creacuteation des tables

1 ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte23 EXCEPTIONS INTO exceptions

Si les contraintes ne peuvent ecirctre reacuteactiveacutees du fait que certaines donneacutees ne sont plus conformes les enregistrements en cause seront reacutefeacuterenceacutes (par leur ) dans la table creacuteeacutee par le rowid exceptions

script Pour retrouver ces enregistrements exeacutecuter une requecircte de seacutelection dans utlexcptsql

cette table

1 SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Une fois les erreurs corrigeacutees lopeacuteration de reacuteactivation des contraintes peut ecirctre renouveleacutee

Un contexte qui neacutecessite la deacutesactivation des contraintes pour ameacuteliorer des performances de chargement neacutecessitera eacutegalement la suppression des index eacutegalement gourmands en ressources lors de la creacuteation ou mise agrave jour des donneacutees Ces index seront recreacuteeacutes une fois le chargement termineacute

4 Processus de chargement BDE-gtBDT

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Deacutesactivation des contraintes de la BDTSuppression des index de la BDTCopie des donneacutees de la BDE vers la BDTRecreacuteation des indexReacuteactivation des contraintesVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDE agrave la BDT)Exeacutecution des proceacutedures de preacute-traitement

Syntaxe Deacutesactivation de contraintes

Remarque Deacuteclaration des contraintes agrave la creacuteation

Syntaxe Reacuteactivation des contraintes

Meacutethode Erreurs de reacuteactivation des contraintes

Compleacutement Deacutesactivation des contraintes et suppression des index

Attention Performance du chargement

Meacutethode Chargement BDE-gtBDT

ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte

EXCEPTIONS INTO exceptions

SELECT FROM nom_table WHERE rowid IN (SELECT row_id FROM exceptions)

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Processus de chargement BDE-gtBDT

30

8 9

Actualisation des vues mateacuterialiseacuteesSignalisation de la disponibiliteacute de la zone T

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Lors du passage de la zone dextraction agrave la zone de transformation les contraintes qui bloquent doivent ecirctre leveacutees pour laisser passer les donneacutees et lors du passage de la zone de transformation agrave la zone dexploitation les meacutethodes doivent geacuterer tous les cas de figure probleacutematiques

Attention Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Exercice Projet Fantastic Mise en place de la zone de traitement

31

--

Lobjectif est agrave preacutesent de creacuteer la BDT en RO Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema bdtou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_bdt_

Question 1

Exercice Projet Fantastic Mise en place de la zone de traitement

VII

Creacuteez une table RO avec les attributs de la vue catalogue f_bdt_catalogue f_bde_catalogue

et une meacutethode pour chaque attribut de la dimension produit

Indices

Les meacutethodes ne sont pas impleacutementeacutees pour le moment

Pensez agrave deacuteclarer les contraintes et index explicitement pour pouvoir les deacutesactiver plus tard avant les chargements massifs

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Exercice Projet Fantastic Mise en place de la zone de traitement

32

Question 2

Question 3

Question 4

Question 5

-

-

--

-

-

Creacuteez une table RO destineacutee agrave recevoir la jointure des tables associeacutees agrave f_bdt_magasin

et marketingods departementsInsee2003txt

Indices

Les deacutepartements ne sont pas identifieacutes exactement de la mecircme faccedilon dans les deux tables et il nest donc pas possible des les joindre directementf_bde_dpt f_bde_marketing

Une solution consiste agrave creacuteer deux vues et qui vont permettre f_bdt_dpt f_bdt_marketing

dajuster les valeurs avant la jointure Par exemple

La vue renvoie directement les valeurs de (on peut f_bdt_dpt f_bde_dpt

eacuteventuellement sen passer)La vue renvoie des valeurs corrigeacutees qui peuvent ecirctre jointes agrave f_bdt_marketing

f_bdt_dpt

Dautres solutions auraient eacuteteacute

De geacuterer la modification directement dans la requecircte INSERT vers f_bdt_magasinDe faire linsertion dans via un script PLSQL (qui traite les cas f_bdt_magasin

probleacutematiques)De copier les donneacutees de dans une table f_bde_marketing f_bdt_marketing

dexeacutecuter un script corrigeant les donneacutees puis de faire le INSERT

Pour traiter le problegraveme des numeacuteros de deacutepartement qui sont de type 1 2 au lieu de 01 02 on peut utiliser un CASE dans un SELECT

1 SELECT2 CASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dpt3 4 FROM f_bde_marketing

Creacuteez une table RO avec un seul attribut qui recevra les valeurs dun f_bdt_date select

depuis la table externe permettant dacceacuteder agrave distinct dat datacsv

Creacuteez une table RO pour alimenter la table des faitsf_bdt_vente

Eacutecrivez la proceacutedure dimport BDE-gtBDT en suivant bien les eacutetapes du processus de chargement

Indices

Deacutesactivez vos contraintes et index avant le chargement

Veacuterifiez votre import (pas de rejet veacuterification du nombre de lignes)

Penser agrave valider votre transaction ( )COMMIT

SELECTCASE WHEN TO_NUMBER(dpt)lt10 THEN 0||TO_NUMBER(dpt) ELSE dpt END AS dptFROM f_bde_marketing

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Exercice Projet Fantastic Mise en place de la zone de traitement

33

Question 6

Impleacutementez une premiegravere version des meacutethodes qui ne fera aucun traitement pour le moment la meacutethode retourne soit un attribut sans transformation soit une constante si ce nest pas possible

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Impleacutementation simplifieacutee dun data warehouse avec Oracle

34

--

Dans cette partie nous preacutecisons comment impleacutementer pratiquement la zone L dun processus ETL avec une base Oracle (version 9i ou posteacuterieure)simple ex nihilo batch non increacutemental RO

1 Zone L Loading

La zone de chargement est en fait la BD en eacutetoile ou en flocon qui impleacutemente le data warehouse et les data marts

Elle reccediloit une copie des donneacutees sous leur forme transformeacutee (depuis la zone T) disponible pour lexploitation

Cette BD dimensionnelle peut ecirctre

directement exploiteacutee pour effectuer des requecirctes ou utiliseacutee pour effectuer des exports vers des logiciels danalyse speacutecialiseacutes

2 Impleacutementation du data warehouse en R

Limpleacutementation dun modegravele dimensionnel en base relationnelle ne diffegravere pas dans sa premiegravere phase de celle dun modegravele transactionnel

On privileacutegiera simplement un nommage explicite des contraintes et index pour en faciliter la manipulation ulteacuterieure (deacutesactivation optimisation)

Impleacutementation simplifieacutee dun data warehouse avec Oracle

VIII

Deacutefinition Base de donneacutees de chargement ou data warehouse

Rappel

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Processus de chargement BDT-gtDW

35

On utilisera typiquement la syntaxe ci-apregraves pour deacuteclarer une relation doteacutee dune cleacute primaire dont on connaicirct le nom et pour laquelle on connaicirct lindex sur lequel elle se base Notons quune deacuteclaration classique de cleacute primaire aurait conduit agrave creacuteer un index automatiquement donc plus difficile agrave geacuterer (avec un nom geacuteneacutereacute par Oracle)

1 CREATE TABLE table1 (pknum number )2 CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)3 ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

Modegravele dimensionnel

1 CREATE TABLE t_produit (2 pk_num number3 a_designation varchar(50)4 a_type char(3)5 )67 CREATE UNIQUE INDEX idx_produit_num 8 ON t_produit (pk_num)9 ALTER TABLE t_produit

10 ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) 11 ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))1213

Conseil Deacuteclaration explicite des contraintes et index

Exemple Impleacutementation dun modegravele dimensionnel

CREATE TABLE table1 (pknum number )CREATE UNIQUE INDEX idx_table1_pknum ON table1 (pknum)ALTER TABLE table1 ADD CONSTRAINT cstr_table1_pknum PRIMARY KEY (pknum)

CREATE TABLE t_produit ( pk_num number a_designation varchar(50) a_type char(3))

CREATE UNIQUE INDEX idx_produit_num ON t_produit (pk_num)ALTER TABLE t_produit ADD CONSTRAINT cstr_produit_num PRIMARY KEY (pk_num) ADD CONSTRAINT cstr_produit_type CHECK (a_type in (CD DVD))

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Processus de chargement BDT-gtDW

36

1 2 3 4 5 6 7

8 9

10 11 12

3 Processus de chargement BDT-gtDW

Deacutesactivation des contraintes du et des DW DM

Suppression des index du DW et des DMChargement chaque dimension du data warehouse via lAPI de la zone TChargement la table des faits du data warehouse via lAPI de la zone TRecreacuteation des index du DWReacuteactivation des contraintes du DWVeacuterification que la reacuteactivation des contraintes na pas rejeteacute de donneacutees (100 des donneacutees sont passeacutees de la BDT au DW)Extraction des data martsRecreacuteation des index des DMReacuteactivation des contraintes des DMExtraction des fichiers plats destineacutes aux applications dexploitationSignalisation de la disponibiliteacute du DW

Afin dameacuteliorer les performances au chargement dans une zone on deacutesactive les contraintes et on supprime les index preacutealablement au chargement et on les reacuteactive et recreacutee posteacuterieurement

Le passage dune zone agrave lautre doit toujours laisser passer les donneacuteestoutes

Meacutethode Chargement BDT-gtDW

Rappel Performance du chargement

Rappel Passage obligeacute

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Exercice Projet Fantastic Mise en place de la zone dexploitation

37

--

Lobjectif est maintenant de creacuteer le DW en R Les noms des tables et vues seront preacutefixeacutes

f_ dans le scheacutema dwou si vous ne disposez que dun seul scheacutema pour toutes vos BDf_dw_

Question 1

Question 2

Question 3

Exercice Projet Fantastic Mise en place de la zone dexploitation

IX

Reacutealisez limpleacutementation SQL LDD de votre modegravele dimensionnel de DW

Eacutecrivez et testez la proceacutedure dimport BDT-gtDW

Documentez votre processus ETL complet en effectuant une carte des donneacutees

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Exercice Projet Fantastic Impleacutementation des transformations

38

Afin de finaliser lETL il est agrave preacutesent neacutecessaire de terminer limpleacutementation des meacutethodes pour renvoyer les valeurs rechercheacutees

Question 1

Question 2

Question 3

Question 4

Question 5

Exercice Projet Fantastic Impleacutementation des transformations

X

Impleacutementez les meacutethodes pour la table des faits

Indice

Pour le traitement de la conversion de la date de type en type on utilisera la varchar date

commande TO_DATE

Impleacutementez les meacutethodes effectuant un simple pour la dimension magasin (aucun return

traitement)

--

Impleacutementez les meacutethodes de la dimension date

Indice

Utilisez la fonction pour obtenir une valeur de type date pour la meacutethode date()TO_DATE

Puis utilisez la fonction sur cette meacutethode pour obtenir les autres attributsTO_CHAR

Fonctions SQL agrave connaicirctre (cf p42)

Impleacutementez des meacutethodes effectuant des tests de veacuterification de format et lorsque cest neacutecessaire un reformatage pour la dimension produit

Exeacutecutez la proceacutedure dimport BDT-gtDW

Faites toutes les veacuterifications neacutecessaires

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Rappels

39

1 Rappels Oracle pour lETL11 Creacuteation de vues

Une vue est une deacutefinition logique dune relation sans stockage de donneacutees obtenue par interrogation dune ou plusieurs tables de la Une vue peut donc ecirctre perccedilue comme une BD

fenecirctre dynamique sur les donneacutees ou encore une requecircte stockeacutee (mais dont seule la deacutefinition est stockeacutee pas le reacutesultat qui reste calculeacute dynamiquement)

Une vue permet dimpleacutementer le concept de scheacutema externe dun modegravele conceptuel

Synonymes Relation deacuteriveacutee Table virtuelle calculeacutee

1 VIEW ltnom de vuegt ltnom des colonnesgt2 ltspeacutecification de questiongt

La speacutecification dune question se fait en utilisant le LMD

Le nombre de colonnes nommeacutees doit ecirctre eacutegal au nombre de colonnes renvoyeacutees par la question speacutecifieacutee Le nom des colonnes est optionnel sil nest pas speacutecifieacute cest le nom des colonnes telle quelles sont renvoyeacutees par la question qui sera utiliseacute

1 VIEW Employe (Id Nom) 2 3   NdegSS Nom4   Personne

La vue Employe est ici une projection de la relation Personne sur les attributs NdegSS et Nom renommeacutes respectivement Id et Nom

Une vue est toujours disponible en lecture agrave condition que lutilisateur ait les droits speacutecifieacutes gracircce au Une vue peut eacutegalement ecirctre disponible en eacutecriture dans certains cas que lon peut LCD

restreindre aux cas ougrave la question ne porte que sur une seule table (mecircme si dans certains cas il est possible de modifier une vue issue de plusieurs tables)

RappelsXI

Deacutefinition Vue

Syntaxe

Exemple

Remarque Vue en lecture et vue en eacutecriture

VIEW ltnom de vuegt ltnom des colonnesgtCREATE ltspeacutecification de questiongtAS

VIEW Employe (Id Nom) CREATE AS

  NdegSS NomSELECT  PersonneFROM

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Structure dun bloc PLSQL

40

Dans le cas ougrave une vue est destineacutee agrave ecirctre utiliseacutee pour modifier des donneacutees il est possible dajouter la clause WITH CHECK OPTION apregraves la speacutecification de question pour preacuteciser que les donneacutees modifieacutees ou ajouteacutees doivent effectivement appartenir agrave la vue

Une vue peut avoir comme source une autre vue

Les vues sont particuliegraverement utiles pour restituer les relations dheacuteritage perdues lors de la transformation vers MCD MLD

12 Structure dun bloc PLSQL

1 DECLARE ou IS2  Variables curseurs etc3 BEGIN4  Instructions SQL et PLSQL5 EXCEPTION6  Gestion derreur7 END8

Un bloc PLSQL est termineacute par un comme une instruction SQL

Par ailleurs dans les environnements dexeacutecution Oracle (comme SQL Developer) il est neacutecessaire de seacuteparer les blocs par un (sur une nouvelle ligne)

Une bonne habitude est donc de terminer les blocs PLSQL par des

httpstackoverflowcomquestions3024418two-plsql-statements-with-begin-and-end-run-fine-seperately-but-not-together

13 Blocs PLSQL Proceacutedure fonction bloc anonyme

1 CREATE OR REPLACE PROCEDURE nom_proc2 IS3  4 BEGIN5  6 [EXCEPTION]7  8 END

Remarque Vue sur une vue

Rappel Vues et heacuteritage

Syntaxe

Attention

Compleacutement

Syntaxe Proceacutedure

DECLARE ou IS Variables curseurs etcBEGIN Instructions SQL et PLSQLEXCEPTION Gestion derreurEND

CREATE OR REPLACE PROCEDURE nom_procIS BEGIN [EXCEPTION] END

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Blocs PLSQL Proceacutedure fonction bloc anonyme

41

--

1 pHello (who )234 DBMS_OUTPUTPUT_LINE( || who)5 6

1 CREATE OR REPLACE FUNCTION nom_func2  RETURN type_retourneacute3 IS4  5 BEGIN6  7  RETURN valeur8 [EXCEPTION]9  

10 END

1 fDateDuJour 23 vDate 45 vDate 6 vDate7 8

Le type de retourneacute par une fonction ne doit pas speacutecifier de taille

RETURN varchar

et non RETURN varchar(10)

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

1 [DECLARE]2  3 BEGIN4  5 [EXCEPTION]6  7 END

Exemple Proceacutedure

Syntaxe Fonction

Exemple Fonction

Attention

Syntaxe Anonyme

pHello (who )CREATE OR REPLACE PROCEDURE VARCHAR2ISBEGIN DBMS_OUTPUTPUT_LINE( || who)Hello

END

CREATE OR REPLACE FUNCTION nom_func RETURN type_retourneacuteIS BEGIN  RETURN valeur[EXCEPTION] END

fDateDuJour CREATE OR REPLACE FUNCTION RETURN dateIS vDate dateBEGIN vDate SELECT SYSDATE INTO FROM DUAL vDateRETURN

END

[DECLARE] BEGIN [EXCEPTION] END

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Exeacutecution de fichiers SQL

42

-

-

--

-

-----

1 23 pHello( )4 DBMS_OUTPUTPUT_LINE(fDateDuJour)5 6

14 Exeacutecution de fichiers SQL

Pour enregistrer un script SQL ou PLSQL eacutecrit dans sous la forme dun Oracle SQL Developerfichier utiliser la fonction file gt save as

Pour exeacutecuter un fichier SQL ou PLSQL utiliser la commande fichiersql

1 file1sql2 file2sql3 file3sql

15 Fonctions SQL

Par opposition aux fonctions de calcul SQL qui sappliquent sur toute la table pour reacutealiser des agreacutegats (en ne renvoyant quune seule valeur par regroupement) les fonctions mono-ligne sont des fonctions au sens classique qui sappliquent agrave une ou plusieurs valeurs et renvoient une valeur en retour

Les fonctions mono-ligne

Manipulent des eacuteleacutements de donneacuteesAcceptent des arguments en entreacutee et retournent des valeurs en sortieAgissent sur chaque ligneRetournent un seul reacutesultat par lignePeuvent modifier les types de donneacutees

Traitement de chaicircne

CONCAT SUBSTR LENGTH INSRT LPAD TRIMLOWER UPPER INITCAP

Traitement de date

MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY

Exemple Script anonyme

Meacutethode

Meacutethode

Exemple scriptsql

Rappel

Exemple

SET SERVEROUTPUT ONBEGIN pHello( )World DBMS_OUTPUTPUT_LINE(fDateDuJour)

END

file1sqlfile2sqlfile3sql

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Fonctions SQL

43

--

----

-

--

-

--

-

---

-

-- SELECT sysdate FROM dual

Opeacuterations matheacutematiques sur les dates SELECT sysdate + 10 FROM dual

Traitement numeacuterique

ROUND TRUNCFLOOR CEILMOD

Conversion

Conversion impliciteConversion explicite TO_DATE TO_NUMBER TO_CHAR

Geacuteneacuterales

NVL (par exemple NVL(X0) renvoie 0 si X vaut Null)CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 ELSE valeur3 ENDImbrication de fonctions F3(F2(F1(colarg1)arg2)arg3)

Les fonctions mono-ligne sont utiliseacutees pour

Transformer les donneacuteesFormater des dates et des nombres pour laffichageConvertir des types de donneacutees de colonnes

La fonction renvoie les B caractegraveres agrave partir du caractegravere A dans la chaicircne XSUBSTR(X A B)

Fonctions SQLVous pouvez consulter page 9 agrave 12 pour avoir une description plus deacutetailleacutee Oracle SQL

des fonctions disponibles sous Oracle

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 pknum cours2 CASE 3 WHEN type= THEN 4 WHEN type= THEN 5 WHEN type= THEN 6 END type_label

Meacutethode

Exemple Extraction de chaicircne

Compleacutement

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Question avec CASE

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

pknum coursSELECT AS CASE WHEN type= THEN C Cours WHEN type= THEN TD Travaux dirigeacutes WHEN type= THEN TP Travaux pratiques END type_labelAS

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Insertion de dates avec TO_DATE

44

--

7 tCours

1 COURS TYPE_LABEL 2 ----- -----------------3 1 Cours 4 2 Travaux dirigeacutes

16 Insertion de dates avec TO_DATE

La gestion des dates peut poser des problegravemes selon les formats parameacutetreacutes sur le serveur Oracle (en geacuteneacuteral par deacutefaut le format est DD-MON-YY) La solution la plus rigoureuse consiste agrave utiliser la fonction de conversion TO_DATE

TO_DATE(20021130YYYYMMDD) eacutequivaut agrave 30-NOV-2002

1 Project (Num Name End)2 ( TO_DATE( ) TO_DATE(

)YYYYMMDD

1 tIntervenant (pknom prenom poste)2 ( )34 tCours (pkannee pknum titre type debut fkintervenant) 5 ( TO_DATE( ) )67 tCours (pkannee pknum titre type debut fkintervenant) 8 ( TO_DATE( ) )9

10 tCours

1 PKANNEE P TITRE TYPE FKINTERVENANT DEBUT 2 ------- - --------------- ---- --------------- ---------3 2001 1 Introduction C CROZAT 01-JAN-01 4 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

TO_DATE(char) (oraclecom) (techonthenetcom)TO_DATE(char)

17 Affichage agrave leacutecran

1

Syntaxe Gestion des dates avec TO_DATE

Exemple

Exemple Insertion de date dans Oracle

Exemple BD Gestion des intervenants Insert avec date

Compleacutement

Syntaxe

tCoursFROM

COURS TYPE_LABEL ----- ----------------- 1 Cours 2 Travaux dirigeacutes

Project (Num Name End)INSERT INTO Begin ( TO_DATE( ) TO_DATE( VALUES 1 Walking on the moon 20150401 YYYYMMDD 20160401

)YYYYMMDD

tIntervenant (pknom prenom poste)INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 1 Introduction C 01-01-2001 DD-MM-YYYY CROZAT

tCours (pkannee pknum titre type debut fkintervenant) INSERT INTO ( TO_DATE( ) )VALUES 2001 2 Modeacutelisation TD 08-01-2001 DD-MM-YYYY CROZAT

tCoursSELECT FROM

PKANNEE P TITRE TYPE FKINTERVENANT DEBUT ------- - --------------- ---- --------------- --------- 2001 1 Introduction C CROZAT 01-JAN-01 2001 2 Modeacutelisation TD CROZAT 08-JAN-01

SET SERVEROUTPUT ON

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Transactions en SQL

45

12  DBMS_OUTPUTPUT_LINE ( )3

18 Transactions en SQL

Le langage fournit trois instructions pour geacuterer les transactionsSQL

1 BEGIN TRANSACTION (ou BEGIN)

Cette syntaxe est optionnelle (voire inconnue de certains ) une transaction eacutetant deacutebuteacutee de SGBD

faccedilon degraves quinstruction est initieacutee sur la implicite BD

1 COMMIT TRANSACTION (ou COMMIT)

Cette instruction SQL signale la fin dune transaction couronneacutee de succegraves Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat coheacuterent est que les donneacutees peuvent effectivement ecirctre modifieacutees de faccedilon durable

1 ROLLBACK TRANSACTION (ou ROLLBACK)

Cette instruction SQL signale la fin dune transaction pour laquelle quelque chose sest mal passeacute Elle indique donc au gestionnaire de transaction que luniteacute logique de travail sest termineacutee dans un eacutetat potentiellement incoheacuterent et donc que les donneacutees ne doivent pas ecirctre modifieacutees en annulant les modifications reacutealiseacutees au cours de la transaction

Un programme est geacuteneacuteralement une seacutequence de plusieurs transactions

2 Rappels triggers pour lETL21 Principes des triggers

Un (ou deacuteclencheur) est un bloc PLSQL associeacute agrave une table permettant de deacuteclencher une triggeraction avant ou apregraves un INSERT UPDATE ou DELETE sur cette table

Les sont stockeacutes dans la basetriggers

Introduction

Syntaxe Deacutebut dune transaction

Syntaxe Fin correcte dune transaction

Syntaxe Fin incorrecte dune transaction

Remarque Programme

Deacutefinition Trigger

BEGIN DBMS_OUTPUTPUT_LINE ( )Hello World

END

BEGIN TRANSACTION (ou BEGIN)

COMMIT TRANSACTION (ou COMMIT)

ROLLBACK TRANSACTION (ou ROLLBACK)

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Preacutedicats deacuteveacutenement au sein des triggers

46

-

-

--

- Ils permettent de renforcer linteacutegriteacute des donneacutees (mais on preacutefeacuterera des contraintes check unique ou foreign key quand cest possible)Ils permettent dauditer des actions sur une tableIls permettent de calculer des valeurs deacuteriveacutees pour dautres colonnes de la tableIls constituent ainsi une des solutions pour limpleacutementation des attributs deacuteriveacutes

Il existe deux types de triggers

Trigger sur lignele est exeacutecuteacute pour chaque ligne concerneacutee par linstruction insert update ou delete trigger(option for each row)Trigger sur instructionle est exeacutecuteacute une seule fois pour linstruction insert update ou delete mecircme si elle triggertraite plusieurs lignes dun coup

1 [ ] nom_trigger BEFORE|AFTER2 [ ][ [ nom_colonne] ][ ]3 nom_Table4 [ EACH [ (condition)] ]56 [ declarations]78  instructions9

En geacuteneacuteral les triggers sont de type before en particulier pour les triggers sur ligne cest agrave dire quils sexeacutecutent avant que laction consideacutereacutee soit exeacutecuteacutee ce qui permet dinfleacutechir le reacutesultat de cette action Alors quun trigger after ne pourra plus modifier le tuple consideacutereacute et agira seulement sur dautres tuples

Une mecircme table peut avoir plusieurs triggers mais cela est agrave eacuteviter en geacuteneacuteral pour des raisons de faciliteacute de maintenance et de performance

Si lexeacutecution du trigger eacutechoue laction (insert update ou delete dans la table) est annuleacutee (et retourne une exception Oracle)

A quoi servent les triggers

Types de triggers

Syntaxe Trigger

Remarque Avant ou apregraves

Attention Triggers multiples

Attention Exception

[ ] nom_trigger BEFORE|AFTERCREATE OR REPLACE TRIGGER[ ][ [ nom_colonne] ][ ]INSERT OR UPDATE OF OR DELETE

nom_TableON[ EACH [ (condition)] ]FOR ROW WHENDECLARE [ declarations]variableBEGIN instructions

END

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Preacutedicats deacuteveacutenement au sein des triggers

47

----

22 Preacutedicats deacuteveacutenement au sein des triggers

INSERTINGDELETINGUPDATINGUPDATING(nom_colonne)

Preacutedicats pour savoir dans quel contexte dappel du trigger on est ce qui permet dans un mecircme trigger de sadapter aux diffeacuterents cas de deacuteclenchement

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 tIntervenantSav (2 pknom ( ) 3 prenom ( ) 4 )56 trIntervenant7 BEFORE tIntervenant8 EACH 9

10 DELETING 11 tIntervenantSav (oldpknom oldprenom)12 INSERTING 13 tIntervenantSav pknom = newpknom14 15 16 1718 tCours19 tIntervenant20 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 CROZAT Steacutephane 4 JOUGLET Antoine 5 VINCENT Antoine

1 tIntervenant (pknom prenom poste) 2 ( )34 tIntervenantSav

1 PKNOM PRENOM 2 -------------------- --------------------3 JOUGLET Antoine 4 VINCENT Antoine

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger darchivage de donneacutees

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

tIntervenantSav (CREATE TABLEpknom ( ) varchar2 20 PRIMARY KEYprenom ( ) varchar2 20 NOT NULL)

trIntervenantCREATE OR REPLACE TRIGGERBEFORE tIntervenantDELETE OR INSERT ON

EACH FOR ROWBEGIN DELETING IF THEN tIntervenantSav (oldpknom oldprenom)INSERT INTO VALUES INSERTING ELSIF THEN tIntervenantSav pknom = newpknomDELETE FROM WHERE END IF

END

tCoursDELETE FROM tIntervenantDELETE FROM tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------CROZAT Steacutephane JOUGLET Antoine VINCENT Antoine

tIntervenant (pknom prenom poste) INSERT INTO ( )VALUES CROZAT Steacutephane 4287

tIntervenantSavSELECT FROM

PKNOM PRENOM -------------------- --------------------JOUGLET Antoine VINCENT Antoine

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

48

--

23 Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)

Pour les triggers de type for each row les colonnes de la ligne courante doivent ecirctre reacutefeacuterenceacutees speacutecifiquement selon que lon veut l ancienne ou la nouvelle valeur

oldnom_colonne

newnom_colonne

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

Il nest jamais possible de modifier une colonne old

Pour les trigger after il nest plus possible de modifier les colonnes new

Pour les triggers on insert les colonnes old ont la valeur NULL

Pour les triggers on delete les colonnes new ont la valeur NULL

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

1 tIntervenant (pknomvarchar prenomvarchar posteinteger)2 tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant

debutdate)

1 trCours2 BEFORE debut tCours3 EACH 4 5 vAnneeDebut 67 vAnneeDebut = ( (newdebut )) 8 (vAnneeDebut = newpkannee)

Fondamental

Attention Anciennes valeurs en lecture seule

Attention Valeurs en lecture seule apregraves

Remarque Valeurs nulles

Attention

Rappel BD Gestion des intervenants Scheacutema relationnel

Exemple BD Gestion des intervenants Trigger de gestion de coheacuterence

tIntervenant (pknomvarchar prenomvarchar posteinteger)tCours (pkannee20002100 pknuminteger titrevarchar typeC|TD|TP fkintervenant=gttIntervenant debutdate)

trCoursCREATE OR REPLACE TRIGGERBEFORE debut tCoursINSERT OR UPDATE OF ON

EACH FOR ROW DECLARE

vAnneeDebut INTEGERBEGIN vAnneeDebut = ( (newdebut )) TO_NUMBER TO_CHAR YYYY (vAnneeDebut = newpkannee) IF NOT THEN

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Quelques regravegles agrave respecter pour les triggers

49

9 newdebut= 10 DBMS_OUTPUTPUT_LINE( )11 12 13 1415 1617 tCours (pkannee pknum titre fkIntervenant debut)18 ( ( ))1920 tCours21 debut= ( )22 pknum= 2324 pkannee pknum debut tCours

1 TRIGGER trCours compiled2 1 rows inserted3 1 rows updated4 Inconsistency between debut and pkannee debut set to null56 PKAN PKNUM DEBUT 7 ---- ----- ---------8 2001 1 01-JAN-01 9 2001 2 08-JAN-01

10 2001 3

24 Quelques regravegles agrave respecter pour les triggers

Il ne faut pas modifier de donneacutees dans les colonnes des primary key foreign key ou unique key dune table

Il ne faut pas lire des donneacutees dune table en cours de modification autrement que par les accegraves old et new

3 Rappels Oracle RO31 Creacuteation de type en SQL3 sous Oracle (extension au LDD)

1 nom_type (2 nom_attribut1 type_attribut13 4 )5 6

Attention

Attention

Syntaxe Deacuteclaration de type

newdebut= null DBMS_OUTPUTPUT_LINE( )Inconsistency between debut and pkannee debut set to null END IF

END

SET SERVEROUTPUT ON

tCours (pkannee pknum titre fkIntervenant debut)INSERT INTO type ( ( ))VALUES 2001 3 SQL C CROZAT TO_DATE 15-01-2001 DD-MM-YYYY

tCoursUPDATE debut= ( )SET TO_DATE 15-01-2002 DD-MM-YYYY

pknum= WHERE 3

pkannee pknum debut tCoursSELECT FROM

TRIGGER trCours compiled1 rows inserted1 rows updatedInconsistency between debut and pkannee debut set to null

PKAN PKNUM DEBUT ---- ----- ---------2001 1 01-JAN-01 2001 2 08-JAN-01 2001 3

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 )

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Creacuteation de table objet (modegraveles et LDD)

50

1 t nom_type (2 3 )

1 t (2 3 nom_attribut nom_type4 5 )

Heacuteritage et reacuteutilisation de types (cf p)

Meacutethodes de table dobjets (cf p51)

32 Creacuteation de table objet (modegraveles et LDD)

Une table peut ecirctre deacutefinie en reacutefeacuterenccedilant un type de donneacutees plutocirct que par des instructions LDD

classiques On parle alors de table objet

Synonymes table-objet table dobjets

1 nom_type ltgt2 nom_table de nom_type (attributs_cleacutes) autres contraintes

1 nom_table OF nom_type (2  PRIMARY KEY(attribut1)3  attribut2 4  UNIQUE (attribut3)5  FOREIGN KEY (attribut4) REFERENCES 6 )

Il est possible sur une table ainsi deacutefinie de speacutecifier les mecircmes contraintes que pour une table creacuteeacutee avec une clause CREATE TABLE (contraintes de table) Ces contraintes doivent ecirctre speacutecifieacutees au moment de la creacuteation de la table et non au moment de la creacuteation du type (bien que la deacutefinition de type permet de speacutecifier certaines contraintes comme NOT NULL)

Les enregistrements dune table-objet peuvent ecirctre identifieacutes par un OID

Exemple Creacuteation de tables dobjets (enregistrements avec OID)

Exemple Usage des types dans les tables (modegravele imbriqueacute)

Compleacutement

Deacutefinition

Syntaxe Modegravele logique

Syntaxe LDD SQL3

Fondamental OID

t nom_type (CREATE TABLE OF )

t (CREATE TABLE nom_attribut nom_type )

nom_type ltgtnom_table de nom_type (attributs_cleacutes) autres contraintes

nom_table OF nom_type (CREATE TABLE PRIMARY KEY(attribut1) attribut2 NOT NULL UNIQUE (attribut3) FOREIGN KEY (attribut4) REFERENCES )

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Meacutethodes de table dobjets

51

Des meacutethodes peuvent ecirctre associeacutees agrave une table-objet

Cette modaliteacute de deacutefinition de scheacutema permet de profiter de lheacuteritage de type pour permettre lheacuteritage de scheacutema de table

1 typIntervenant (2 pknom ( )3 prenom ( )4 )5 67 tIntervenant typIntervenant (8 (pknom)9 prenom

10 )

33 Meacutethodes de table dobjets

Si le type sur lequel sappuie la creacuteation de la table deacutefinit des meacutethodes alors les meacutethodes seront associeacutees agrave la table (meacutethodes de table)

Il sera possible dacceacuteder agrave ces meacutethodes de la mecircme faccedilon que lon accegravede aux attributs (projection seacutelection)

1 SELECT tm1() tm2() 2 FROM table t3

Lutilisation dun alias est obligatoire pour acceacuteder aux meacutethodes

1 nom_type (2 nom_attribut1 type_attribut13 4 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction15 6 )7 8 nom_type

Compleacutement Meacutethodes

Compleacutement Heacuteritage

Exemple

Deacutefinition Meacutethodes de table

Syntaxe Accegraves aux meacutethodes dune table dobjets

Attention

Syntaxe Deacuteclaration de type avec meacutethodes

typIntervenant (CREATE OR REPLACE TYPE AS OBJECTpknom ( )varchar2 20prenom ( )varchar2 20)

tIntervenant typIntervenant (CREATE TABLE OF (pknom)PRIMARY KEY

prenom NOT NULL)

SELECT tm1() tm2() FROM table t

nom_type (CREATE TYPE AS OBJECT nom_attribut1 type_attribut1 nom_fonction1 (parametre1 |OUT type_parametre1 ) type_fonction1MEMBER FUNCTION IN RETURN )

nom_typeCREATE TYPE BODY

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Meacutethodes et SELF

52

9 10 nom_fonction1 () type_fonction111 12 13 14 15 nom_fonction2 16 17 18 19

1 typCours (2 pknum ( )3 debut 4 fin 5 )6 7 typCours 8 fin 9

10 11 SELFdebut + 12 13 14 1516 tCours typCours (17 pknum 18 )1920 cpknum cfin()21 tCours c

The datatype cannot specify a length precision or scalelaquo raquo

httpdocsoraclecomcdB13789_01server101b10759statements_5009htm

34 Meacutethodes et SELF

Lorsque lon eacutecrit une meacutethode on a geacuteneacuteralement besoin dutiliser les attributs propres (voire dailleurs les autres meacutethodes) de lobjet particulier que lon est en train de manipuler

On utilise pour cela la syntaxe SELF qui permet de faire reacutefeacuterence agrave lobjet en cours

1 selfnom_attribut2 selfnom_meacutethode()

Exemple

Remarque Type retourneacute par une meacutethode

SELF

Syntaxe SELF

IS nom_fonction1 () type_fonction1MEMBER FUNCTION RETURN IS BEGIN END nom_fonction2 MEMBER FUNCTION END

END

typCours (CREATE TYPE AS OBJECT pknum ( )NUMBER 2 debut DATE fin MEMBER FUNCTION RETURN DATE)

typCours CREATE TYPE BODY IS fin MEMBER FUNCTION RETURN DATE

IS BEGIN SELFdebut + RETURN 5 END

END

tCours typCours (CREATE TABLE OFpknum PRIMARY KEY)

cpknum cfin()SELECT tCours cFROM

selfnom_attributselfnom_meacutethode()

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Meacutethodes et SELF

53

1 total 23  t 45   (fqte) t 6   facture f7   fnum=selfnum89 t

10 total

Dans certains cas simples lorsquil ny a aucune confusion possible SELF peut ecirctre ignoreacute et le nom de lattribut ou de la meacutethode directement utiliseacute

Il est toutefois plus systeacutematique et plus clair de mettre explicitement le self

1   adresse 2  3   4    num || rue || ville5  

Exemple Total dune facture

Remarque SELF implicite

Exemple Exemple de SELF implicite

total MEMBER FUNCTION RETURN numberIS t numberBEGIN  (fqte) t SELECT sum INTO  facture fFROM  fnum=selfnumWHERE

tRETURN totalEND

  adresse MEMBER FUNCTION RETURN varchar2 IS  BEGIN   num || rue || villeRETURN  END

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Compleacutements

54

1 Script de remise agrave zeacutero dun scheacutema Oracle

12 c ( type_name user_types) 3 ( || ctype_name || )4 5 6 78 c ( object_name user_objects object_type= ) 9 ( || cobject_name || )

10 11 12 1314 c ( object_name user_objects object_type= ) 15 ( || cobject_name || )16 17 18 19

CompleacutementsXII

Begin c ( type_name user_types) for in select from loop

( || ctype_name || )execute immediate drop type force end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where TABLE loop ( || cobject_name || )execute immediate drop table cascade constraints

end loopEnd

Begin

c ( object_name user_objects object_type= ) for in select from where VIEW loop ( || cobject_name || )execute immediate drop view cascade constraints

end loopEnd

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Gestion des erreurs

55

-

-

---

-

-

-

--

---

1

2 3

2 Eacuteleacutements avanceacutes pour lETL21 Gestion des erreurs

En cas derreur il y a trois approches possibles

Arrecirct du chargement traitement de lerreur (ameacutelioration des traitements) et reprise du chargementDans un processus increacutemental cest en geacuteneacuteral une mauvaise solutionRejeter la donneacutee dans une table derreurLaisser passer la donneacutee en prenant une deacutecision par deacutefaut et pour veacuterificationlogger

(Kimball et al 2008 p382-384)

Les approches 2 et 3 ne pose pas de problegraveme si

les problegravemes sont tregraves minoritairesreacutepartis sur la population des faitstraiteacutes au fur et agrave mesure

Creacuteer une copie de la structure du DW pour accueillir les donneacutees rejeteacuteesAjouter un espace de stockage des commentaires (raison du rejet)

Adopter une approche permettant de laisser systeacutematiquement passer les donneacutees (par exemple en joutant des valeurs derreur dans les dimensions)Logger dans une table ad hoc les cas traiteacutes par deacutefaut

22 Cleacutes artificielles

Pour introduire des cleacutes artificielles pour identifier les dimensions

Dans la zone de transformation

ajouter agrave chaque dimension un attribut pkajouter une meacutethode qui renvoie getPk() pk

(supprimer la meacutethode qui renvoyait initialement la cleacute naturelle si elle nest plus neacutecessaire par ailleurs)

Agrave chaque ajout dun nouvel enregistrement dans une dimension

geacuteneacuterer une cleacute artificielle dans (agrave laide dune seacutequence par exemple)pk

Compleacutement

Remarque

Meacutethode Rejeter

Meacutethode Laisser passer

Meacutethode

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Eacuteleacutements pour lETL increacutemental

56

-

--

--

--

--

-

-

- Lors de lajout des dimensions dans le data warehouse

utiliser pour identifier les enregistrementsgetPk()

Lors de lajout des faits il faut substituer les cleacutes

joindre les faits avec les dimensionsappeler les meacutethodes de chaque dimensiongetPk()

1 INSERT INTO dw_facts2 SELECT d1pk() d2pk()3 FROM t_fact f t_dim1 d1 t_dim2 d24 WHERE fa=d1a AND fb=d1b

Il faut meacutemoriser la correspondance entre la cleacute identifiant la dimension dans le systegraveme transactionnel et la cleacute artificielle dans le data warehouse

Pour cela

soit les tables sont persistantes dans la zone Tsoit les cleacutes du systegraveme transactionnel doivent ecirctre conserveacutees dans le DW

Les jointures agrave preacutesent neacutecessaires diminuent les performances de chargementUne indexation adeacutequate est requise

Les faits nont pas besoin decirctre identifieacutes

Sous Oracle en RO il est possible dutiliser les OID agrave la place de cleacutes artificielles

Le problegraveme sera que les OID ne sont connus quapregraves insertion dans la DB ils ne peuvent ecirctre creacuteeacutes dans la BDT puis transfeacutereacute dans le DW

Il faut deacuteclarer les tables du DW en mode RO en conservant les cleacutes doriginePuis substituer les cleacutes eacutetrangegraveres par des REF dans la table des faits en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW

23 Eacuteleacutements pour lETL increacutemental

Dans un DW increacutemental le systegraveme est mis agrave jour reacuteguliegraverement

Une mise agrave jour se manifeste par

lajout de nouveaux faits

Exemple

Attention

Attention Optimisation

Rappel

Compleacutement OID

INSERT INTO dw_factsSELECT d1pk() d2pk()FROM t_fact f t_dim1 d1 t_dim2 d2WHERE fa=d1a AND fb=d1b

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Eacuteleacutements pour lETL increacutemental

57

--

--

--

-

-

-

-

1 2 3

1 2 3

lrsquoeacuteventuel ajout ou mise agrave jour des dimensions

Deux cas de figures

La source des faits est remplaceacutee agrave chaque increacutement (les nouveaux faits remplacent les anciens)

il faut ajouter les nouveaux faits au fur et agrave mesure en relanccedilant lETL typiquement

vider les faits de la BDT (anciens faits)repeupler les faits de la BDT (BDE-gtBDT)exeacutecuter le transfert BDT-gtDW

Les nouveaux faits sont ajouteacutes agrave la mecircme source agrave chaque increacutement

il faut vider et repeupler le DW agrave chaque increacutementou il faut une meacutethode qui permette de discriminer les faits deacutejagrave inteacutegreacutes des nouveaux (et lon se rapporte au cas preacuteceacutedent)

Vider la BDT sera de preacutefeacuterence la derniegravere eacutetape de lETL (assimilant le transfert BDT-gtDW agrave un deacuteplacement)

BDE-gtBDTBDT-gtDWVider BDT

Si la BDT permet de calculer des attributs dagreacutegation de faits il est neacutecessaire quelle conserve lensemble des donneacutees pour effectuer ses calculs

Dans ce cas plutocirct que de vider la BDT on utilisera un attribut de discrimination ( ) qui flagmeacutemorisera les donneacutees deacutejagrave transfeacutereacutees des nouvelles donneacutees

Lajout de dimensions reacutesulte de

lajout de nouveaux faitsassocieacute eacuteventuellement agrave lajout des dimensions dans les sources transactionnelles

De la mecircme faccedilon

soit lon supprime et reacutecreacutee la dimensionsoit lon gegravere lajout des nouveaux enregistrements apregraves les avoir discrimineacutes

La mise agrave jour de dimension reacutesulte de

Ajout de faits

Meacutethode

Attention

Ajout de dimensions

Mise agrave jour de dimensions

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Inteacutegration des dimensions multi-sources

58

--

-- lajout de nouveaux faits

associeacute agrave la mise agrave jour des sources transactionnelles des dimensions

Il faut adopter une strateacutegie de gestion des SCD

Utiliser des triggers pour auditer les donneacutees et ainsi affiner les meacutethodes trouver des erreurs

24 Inteacutegration des dimensions multi-sources

Lorsque les dimensions ont plusieurs sources il faut

Controcircler les doublons (deacute-duplication)Conformer les diffeacuterentes sources

25 Performance et maintenance

Il est possible de substituer cette architecture agrave 3 niveaux par une architecture agrave 2 niveaux seulement

Architecture geacuteneacuterale dun ETL

3 Exercice Gestion des erreurs[1h]

Proposer une solution pour la gestion des erreurs et des valeurs nulles de la table des faits

Question

Meacutethode Audit continu des donneacutees

Meacutethode

Meacutethode

Pour chaque type derreur creacuteer une nouvelle entreacutee dans les dimensions correspondantes[ ]solution ndeg1 [ ] p60

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Exercice Surveillance des donneacutees

59

----

4 Exercice Surveillance des donneacutees[1h]

Mettre en place des triggers afin de surveiller certaines donneacutees sensibles

Les datesLes magasinsTypologie des erreurs

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Solutions des exercices

60Steacutephane Crozat

Exercice p 58gt Solution ndeg1

Exemple dextraits des tables du DW avec des valeurs de dimensions ajouteacutees pour geacutereacutees les erreurs (et lusage de cleacutes artificielles)

FKMag FKPro FKDat

12 18 32

12 41 -1

-2 55 21

Table des faits du DW

PK Mag

-2 Inconnu null

-1 Null null

12 M145

13 M22

Table de la dimension Mag du DW

Solutions des exercices

Exemple Gestion des erreurs

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Solutions des exercices

61Steacutephane Crozat

PK Dat DatStr

-1 null Tronqueacutee null

21 2112013 21012013

32 122013 01022013

Table de la dimension Dat du DW

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Signification des abreacuteviations

62Steacutephane Crozat

API Application Program Interface

BD Base de Donneacutees

BDE Base de Donneacutees dExtraction

BDT Base de Donneacutees de Transformation

CSV Comma Separated Values

DM Data Mart

DW Data Warehouse

ETL Extraction Transformation Loading

LCD Langage de Controcircle de Donneacutees

LDD Langage de Deacutefinition de Donneacutees

LMD Langage de Manipulation de Donneacutees

MCD Modegravele Conceptuel de Donneacutees

MLD Modegravele Logique de Donneacutees

OID Object Identifier

RO Relationnel-Objet

SGBD Systegraveme de Gestion de Bases de Donneacutees

SGBDRO Systegraveme de Gestion de Bases de Donneacutees Relationnelles-Objets

SQL Structured Query Language

XML eXtensible Markup Language

Abreacuteviations

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Bibliographie

63Steacutephane Crozat

Kimball R Ross M Thornthwaite W Mundy J Becker B (2008 1998) The Data Warehouse Wiley Publishing second editionLifecycle Toolkit

Kimball R Caserta J (2004) Wiley PublishingThe Data Warehouse ETL Toolkit

Bibliographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie

Webographie

64Steacutephane Crozat

Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999

Webographie

  • Objectifs
  • Introduction
  • Principes geacuteneacuteraux dun processus ETL
    • Principe de lETL
    • ETL ex nihilo ou outil dETL
    • ETL en mode batch ou en mode flux
    • ETL increacutemental
      • Proposition darchitecture simplifieacutee pour un ETL ex nihilo batch non increacutemental
        • Architecture dETL agrave trois zones
        • Conseils meacutethodologiques
        • Reacutesumeacute ETL en image
        • Carte des donneacutees
          • Projet Fantastic Rappel
          • Impleacutementation simplifieacutee dune zone dextraction avec Oracle
            • Zone E Extraction
            • Sources de donneacutees
            • Tables externes sous Oracle
            • Exemple de chargement de donneacutees depuis un CSV par une table externe
            • Insertion CSV manuelle avec SQL Developer
              • Exercice Projet Fantastic Mise en place de la zone dextraction
              • Impleacutementation simplifieacutee dune zone de transformation avec Oracle
                • Zone T Transformation
                • Impleacutementation de la zone T en RO
                • Deacutesactivation et reacuteactivation de contraintes
                • Processus de chargement BDE-gtBDT
                  • Exercice Projet Fantastic Mise en place de la zone de traitement
                  • Impleacutementation simplifieacutee dun data warehouse avec Oracle
                    • Zone L Loading
                    • Impleacutementation du data warehouse en R
                    • Processus de chargement BDT-gtDW
                      • Exercice Projet Fantastic Mise en place de la zone dexploitation
                      • Exercice Projet Fantastic Impleacutementation des transformations
                      • Rappels
                        • Rappels Oracle pour lETL
                          • Creacuteation de vues
                          • Structure dun bloc PLSQL
                          • Blocs PLSQL Proceacutedure fonction bloc anonyme
                          • Exeacutecution de fichiers SQL
                          • Fonctions SQL
                          • Insertion de dates avec TO_DATE
                          • Affichage agrave leacutecran
                          • Transactions en SQL
                            • Rappels triggers pour lETL
                              • Principes des triggers
                              • Preacutedicats deacuteveacutenement au sein des triggers
                              • Manipulation des anciennes et nouvelles valeurs dans les triggers (old et new)
                              • Quelques regravegles agrave respecter pour les triggers
                                • Rappels Oracle RO
                                  • Creacuteation de type en SQL3 sous Oracle (extension au LDD)
                                  • Creacuteation de table objet (modegraveles et LDD)
                                  • Meacutethodes de table dobjets
                                  • Meacutethodes et SELF
                                      • Compleacutements
                                        • Script de remise agrave zeacutero dun scheacutema Oracle
                                        • Eacuteleacutements avanceacutes pour lETL
                                          • Gestion des erreurs
                                          • Cleacutes artificielles
                                          • Eacuteleacutements pour lETL increacutemental
                                          • Inteacutegration des dimensions multi-sources
                                          • Performance et maintenance
                                            • Exercice Gestion des erreurs
                                            • Exercice Surveillance des donneacutees
                                              • Solutions des exercices
                                              • Abreacuteviations
                                              • Bibliographie
                                              • Webographie