Upload
ngokien
View
222
Download
1
Embed Size (px)
Citation preview
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Webographie
64Steacutephane Crozat
Roegel Denis Oracle SQL httpwwwloriafr~roegelcoursiutoracle-sqlpdf 1999
Webographie