exploitation mono-dimensionnelle d'un data warehouse en sqloffrir des sources d'accès aux données...
TRANSCRIPT
-
Exploitation mono-dimensionnelle d'un
data warehouse en SQL
Stéphane Crozat
Data warehousehttp://dwh.crzt.fr
21 septembre 2016
-
Table des matières
Objectifs 4
Introduction 5
I - Exploration avec l'agrégation 6
1. Exploration mono-dimension et mono-niveau avec GROUP BY ................................................................... 6
2. Isolation de facteur ......................................................................................................................................... 6
3. Sous-requêtes dans la clause FROM ............................................................................................................... 6
4. Ajustement des proportions ............................................................................................................................ 7
II - Faciliter l'exploitation avec les vues 9
1. Usage des vues ................................................................................................................................................ 9
2. Isolation de facteur ......................................................................................................................................... 9
3. Agrégation de faits ........................................................................................................................................ 10
III - Application : Exploitation mono-dimensionnelle de données 11
1. Projet Fantastic : Rappel ............................................................................................................................... 11
2. Exercice : Cas Fantastic : Exploration avec l'agrégation ............................................................................... 12
3. Exercice : Cas Fantastic : Analyse en proportion .......................................................................................... 12
4. Exercice : Cas Fantastic : Isolation de facteur .............................................................................................. 12
5. Exercice : Cas Fantastic : Agrégation de faits ............................................................................................... 13
6. Exercice : Cas Fantastic : Exploration de données libre ............................................................................... 13
IV - Rappels 14
1. Rappels Oracle pour l'exploration des données ............................................................................................. 15
1.1. Sous-requêtes dans la clause FROM ........................................................................................................................................... 151.2. Fenêtrage des données ............................................................................................................................................................... 161.3. SQL*Plus ................................................................................................................................................................................... 16
Contenus annexes 19
Solutions des exercices 25
-
Abréviations 29
Bibliographie 30
-
4Stéphane Crozat
savoir interroger en SQL un data warehouse en vue d'applications décisionnelles
Objectifs
-
5Stéphane Crozat
- - Volume de cours : 1h
Volume d'exercice : 3h
Introduction
-
Exploration avec l'agrégation
6
- -
1. Exploration mono-dimension et mono-niveau avec GROUP BY
1 SELECT d.att, COUNT(*) AS q2 FROM facts f, dim1 d3 WHERE f.fk=d.pk4 GROUP BY d.att5 ORDER BY q desc;
1 SELECT d.jds, COUNT(*) AS q2 FROM ventes v, date d3 WHERE v.dat=d.dat4 GROUP BY d.jds5 ORDER BY q desc;
2. Isolation de facteurEn créant une vue effectuant une restriction sur dimension on peut mettre à disposition un sous ensemble de la dimension pré-sélectionné selon un premier critère :
qui ne nous intéresse pas dans certaines analyses ;qui risque de compliquer ces mêmes analyses en masquant un facteur.
Si un mode de mode d'organisation des produits est dominant, à la fois au sens où il est le plus courant et au sens où il favorise les ventes, on pourra s'intéresser, lorsqu'on étudie d'autres dimensions, uniquement aux produits organisé selon ce mode.
3. Sous-requêtes dans la clause FROM
L'enchaînement de sous-requêtes dans la clause FROM sera souvent utile pour calculer des moyennes après regroupement notamment.
Exploration avec l'agrégation I
Syntaxe
Exemple
Exemple
Conseil
SELECT d.att, COUNT(*) AS q
FROM facts f, dim1 d
WHERE f.fk=d.pk
GROUP BY d.att
ORDER BY q desc;
SELECT d.jds, COUNT(*) AS q
FROM ventes v, date d
WHERE v.dat=d.dat
GROUP BY d.jds
ORDER BY q desc;
-
Ajustement des proportions
7
-
-
1 SELECT avg(q) FROM2 (3 SELECT d.jds AS jds, COUNT(*) AS q4 FROM ventes v, date d5 WHERE v.dat=d.dat6 GROUP BY d.jds7 )
Raffinement de questions dans la clause FROM (cf. p.15)
4. Ajustement des proportions
Les statistiques sont irréfutables : c'est en février que les hommes s'entre-tuent le moins dans le monde ; moins de tueries guerrières, moins de rixes crapuleuses, moins d'agressions nocturnes dans les rues sombres du XVIIIe [...]. Jusqu'au nombre des cambriolages qui diminue de 6% en février. Et tout ça, pourquoi ? Après les enquêtes scientifiques les plus poussées, les sociologues sont parvenus à cette incroyable conclusion : si les hommes font moins de conneries en février, c'est parce qu'ils n'ont que 28 jours.
Chroniques de la haine ordinaire (Pierre Desproges)
Extrait d'un modèle dimensionnel
1 SELECT m.ray AS r1, COUNT(*) AS q12 FROM ventes v, mag m3 WHERE v.mag=m.mag4 GROUP BY m.ray
R1 Q1
Y 9270
A 84142
E 7812
Cette requête nous dit a priori que les ventes correspondant au type de rayonnage A sont plus nombreuses que les autres (environ 10 fois).Mais si les magasins de type A sont 10 fois plus nombreux que chacun des autres, en fait les ventes par magasin sont du même ordre.
Exemple
Rappel
Exemple
SELECT avg(q) FROM
(
SELECT d.jds AS jds, COUNT(*) AS q
FROM ventes v, date d
WHERE v.dat=d.dat
GROUP BY d.jds
)
SELECT m.ray AS r1, COUNT(*) AS q1
FROM ventes v, mag m
WHERE v.mag=m.mag
GROUP BY m.ray
-
Ajustement des proportions
8
- Il faut donc rapporter le nombre de ventes à la proportion de magasins dans chaque type de rayonnage R1.
1 SELECT r1 AS Ray, q1 AS Ventes, q2 AS Mag, ROUND(q1/q2) AS VentesParMag FROM2 (SELECT m.ray AS r1, COUNT(*) AS q13 FROM ventes v, mag m4 WHERE v.mag=m.mag5 GROUP BY m.ray),6 (SELECT m.ray AS r2, COUNT(*) AS q27 FROM mag m8 GROUP BY m.ray)9 WHERE r1=r2
10 ORDER BY VentesParMag DESC;
VentesParMag nous donne ici le nombre moyen de ventes pour un magasin en fonction de son type.
Exemple
SELECT r1 AS Ray, q1 AS Ventes, q2 AS Mag, ROUND(q1/q2) AS VentesParMag FROM
(SELECT m.ray AS r1, COUNT(*) AS q1
FROM ventes v, mag m
WHERE v.mag=m.mag
GROUP BY m.ray),
(SELECT m.ray AS r2, COUNT(*) AS q2
FROM mag m
GROUP BY m.ray)
WHERE r1=r2
ORDER BY VentesParMag DESC;
-
Faciliter l'exploitation avec les vues
9
- -
- -
-
- - -
-
- - -
-
1. Usage des vues
Les vues sont à utiliser largement en particulier pour :
Simplifier les requêtes complexes
Éviter les sous-requêtes et a fortiori les sous-sous-requêtesPréparer des données (filtrage)...
Gérer la récurrence des questions
Dès qu'une requête est amenée à être exécutée plusieurs foisPour les exports CSV récurrents typiquement...
Offrir des sources d'accès aux données adaptées aux outils tiers
Pour des raisons de performance les vues peuvent être matérialisées :
Vues concrètes * (cf. p.19)Vue matérialisée sous Oracle (cf. p.)
2. Isolation de facteurEn créant une vue effectuant une restriction sur dimension on peut mettre à disposition un sous ensemble de la dimension pré-sélectionné selon un premier critère :
qui ne nous intéresse pas dans certaines analyses ;qui risque de compliquer ces mêmes analyses en masquant un facteur.
Si un mode de mode d'organisation des produits est dominant, à la fois au sens où il est le plus courant et au sens où il favorise les ventes, on pourra s'intéresser, lorsqu'on étudie d'autres dimensions, uniquement aux produits organisé selon ce mode.
Faciliter l'exploitation avec les vues II
Conseil
Complément : Vues matérialisée
Exemple
-
Agrégation de faits
10
3. Agrégation de faitsEn créant une vue projetant un attribut complémentaire dans une dimension, on peut ajouter un nouvel attribut d'analyse, dont la valeur est calculé en fonction des données elles-mêmes.
Attribut booléen pour un livre.best-seller
Attributs d'agrégation de faits * (cf. p.20)
Exemple
Complément
-
Application : Exploitation mono-dimensionnelle de données
11
1. Projet Fantastic : Rappel
Cet exercice est la suite du projet Fantastic commencé dans le module Introduction à la modélisation .dimensionnelle
Modèle dimensionnel du data warehouse Fantastic
Objectifs du modèle dimensionnel * (cf. p.21)
Application : Exploitation mono-dimensionnelle de données
III
Rappel
Rappel
-
Exercice : Cas Fantastic : Analyse en proportion
12
2. Exercice : Cas Fantastic : Exploration avec l'agrégationQuestion 1
Question 2
Question 3
3. Exercice : Cas Fantastic : Analyse en proportionQuestion
4. Exercice : Cas Fantastic : Isolation de facteurQuestion
Effectuez une requête de type GROUP BY pour étudier les ventes en fonction du jour de la semaine.[ ]solution n°1 *[ ] p.25
Écrivez une requête avec sous-requête dans la clause FROM pour trouver la moyenne des ventes des jours hors samedi.
[ ]solution n°2 *[ ] p.25
1. 2.
Transformez la première requête permettant de calculer les ventes en fonction du jour de la semaine en une vue.
Ajouter deux autres vues :
la première calculera la moyenne des ventes hors samedi ;la seconde le ratio de ventes le samedi par rapport à la moyenne.
[ ]solution n°3 *[ ] p.25
Effectuez une requête pour étudier les ventes en fonction du rayonnage.
Effectuez une seconde requête pour étudier la proportion des rayonnages.
Ajuster le résultat en fonction de la proportion de magasins de chaque type de rayonnage.
Indice :
Ray Ventes NbMags VentesParMag
A 415320 ? ?
Y 74142 ? ?
E 41677 ? ?
[ ]solution n°4 *[ ] p.26
Déduisez des résultats de l'analyse par le rayonnage qu'une isolation de facteur peut être envisagée. Expliquez pourquoi et dans quels cas.
Implémentez la vue correspondante.
-
Exercice : Cas Fantastic : Exploration de données libre
13
5. Exercice : Cas Fantastic : Agrégation de faitsQuestion 1
Question 2
Question 3
6. Exercice : Cas Fantastic : Exploration de données libreQuestion
Calculer le nombre moyen de ventes pour un livre.[ ]solution n°5 *[ ] p.27
Étudier l'évolution du nombre de ventes (par exemple avec un graphique) et observer une singularité dans l'évolution du nombre de ventes par livre.
[ ]solution n°6 *[ ] p.27
Créez une vue qui liste les livres selon qu'ils sont des best-sellers ou non (on ajoute un attribut booléen "bs"). Expliciter votre définition d'un best-seller.
[ ]solution n°7 *[ ] p.27
Explorez votre modèle dimensionnel en mobilisant des agrégations.
L'objectif est de formuler un maximum de conclusions concernant les données disponibles. Proposez un rapport d'exploitation avec résultats d'exploration et états.
Indice :
Rapport d'exploration de données (cf. p.6)
[ ]solution n°8 *[ ] p.28
-
Rappels
14
RappelsIV
-
Sous-requêtes dans la clause FROM
15
1. Rappels Oracle pour l'exploration des données1.1. Sous-requêtes dans la clause FROM
Il est possible de raffiner progressivement une requête en enchaînant les questions dans la clause FROM.
1 SELECT ... FROM 2 (SELECT ... 3 FROM ... 4 WHERE ...) 5 WHERE ...
Il est possible d'imbriquer successivement plusieurs sous-requêtes.
1 SELECT ... FROM 2 (SELECT ... FROM 3 (SELECT... 4 FROM ...5 WHERE)6 WHERE ...) 7 WHERE ...
Il est possible de faire le produit ou la jointure de sous-requêtes.
1 SELECT ... FROM 2 (SELECT ... FROM 3 WHERE...)4 (SELECT ... FROM 5 WHERE...)6 WHERE ...
Cette extension est particulièrement utile pour les calculs d’agrégat après filtrage ou pour enchaîner les calculs d’agrégat (par exemple pour faire la moyenne de comptage après regroupement).
1 select avg(c) from (select count(b) as c from t group by a)
1 SELECT avg(q) FROM2 (SELECT jds AS jds, COUNT(*) AS q3 FROM ventes v4 GROUP BY jds)
Syntaxe
Remarque : Sous-sous requête
Syntaxe : Jointure de sous-requêtes
Méthode
Exemple : Enchaînement de calculs d'aggrégat
Exemple : Calcul de la moyenne des ventes par jour de la semaine
SELECT ... FROM
(SELECT ...
FROM ...
WHERE ...)
WHERE ...
SELECT ... FROM
(SELECT ... FROM
(SELECT...
FROM ...
WHERE)
WHERE ...)
WHERE ...
SELECT ... FROM
(SELECT ... FROM
WHERE...)
(SELECT ... FROM
WHERE...)
WHERE ...
select avg(c) from (select count(b) as c from t group by a)
SELECT avg(q) FROM
(SELECT jds AS jds, COUNT(*) AS q
FROM ventes v
GROUP BY jds)
-
SQL*Plus
16
-
-
-
-
1.2. Fenêtrage des données
1 SELECT ... FROM ... WHERE rownum
-
17
- -
- ...
SQL*PLus ne travaille ni sur le contenu ni sur la structure, uniquement sur la présentation.
1.3.1. Variables d'environnement
SQL*Plus permet de fixer la valeur de variables d'environnement avec la commande :
1 SET param valeur
Ces paramètres peuvent être lus avec la commande :
1 SHOW param
1 SET heading off
Permet de désactiver l'affichage des entêtes de colonne dans le résultat affiché.
http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12040.htm
1.3.2. Fichiers d'entrée et de sortie
Pour exécuter un fichier contenant des commandes SQL ou SQL*Plus :
1 @path/filename
Pour enregistrer les résultats d'une exécution de requêtes dans un fichier :
1 SPOOL path/filename2 -- requêtes dont on veut récupérer les résultats dans le fichier3 SPOOL OFF
Création d'un fichier CSV avec SQL*Plus * (cf. p.21)
1.3.3. Formattage d'une colonne de requête
1 COLUMN nom_colonne FORMAT format
Largeur de la colonne : AnChiffre (avec ou sans zéro à gauche) : 9 / 0
Attention
Syntaxe
Exemple
Complément
Syntaxe : Exécuter un fichier
Syntaxe : Sortie dans un fichier
Complément
Syntaxe
SET param valeur
SHOW param
SET heading off
@path/filename
SPOOL path/filename
-- requêtes dont on veut récupérer les résultats dans le fichier
SPOOL OFF
COLUMN nom_colonne FORMAT format
http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12040.htm
-
18
- - - Symboles monétaires : $ / L
Séparateurs de virgule et de milliers : . / ,...
1 COLUMN ename FORMAT A152 COLUMN sal FORMAT $99,990.003 COLUMN mgr FORMAT 999999999
Exemple
COLUMN ename FORMAT A15
COLUMN sal FORMAT $99,990.00
COLUMN mgr FORMAT 999999999
-
Contenus annexes
19Stéphane Crozat
> Vues concrètes
Un moyen de traiter le problème des requêtes dont les temps de calcul sont très longs et les fréquences de mise à jour faible est l'utilisation de vues concrètes.
Une vue concrète est un stockage statique (dans une table) d'un résultat de requête.
Un accès à une vue concrète permet donc d'éviter de recalculer la requête et est donc aussi rapide qu'un accès à une table isolée. Il suppose par contre que les données n'ont pas été modifiées (ou que leur modification est sans conséquence) entre le moment où la vue a été calculée et le moment où elle est consultée.
Une vue concrète est généralement recalculée régulièrement soit en fonction d'un événement particulier (une mise à jour par exemple), soit en fonction d'un moment de la journée ou elle n'est pas consultée et où les ressources de calcul sont disponibles (typiquement la nuit).
Synonymes : Vue matérialisée
Vue matérialisée sous Oracle * (cf. p.19)
> Vue matérialisée sous Oracle
Oracle 9i propose une extension au LDD SQL pour créer explicitement des vues matérialisées plutôt que la gestion manuelle classique consistant à créer une table et à l'alimenter manuellement avec une requête de type INSERT.
Une vue matérialisée est un stockage statique (dans une table) d'un résultat de requête. Il permet donc d'anticiper des requêtes complexes en pré-calculant tout ou partie du résultat.
Vues concrètes (cf. p.)
1 CREATE MATERIALIZED VIEW nom_vue
Contenus annexes
Définition : Vue concrète
Complément : Voir aussi
Introduction
Rappel
Syntaxe : Déclaration de vue matérialisée
CREATE MATERIALIZED VIEW nom_vue
-
Contenus annexes
20Stéphane Crozat
2 [PARTITION BY ...]3 BUILD IMMEDIATE -- quand la construire (alt. : DEFERED)4 REFRESH FORCE -- mode de rafraîchissement (alt. : COMPLETE, FAST) 5 ON DEMAND -- quand la rafraîchir (alt. : COMMIT)6 ENABLE QUERY REWRITE -- utilisable pour l'optimisation automatique de requêtes (alt. : DISABLE)
7 AS8 SELECT ...
Si le rafraîchissement de la vue peut être programmé, il est néanmoins parfois nécessaire de procéder à un rafraîchissement manuel.
1 EXECUTE dbms_mview.refresh('nom_vue');
La déclaration d'une vue matérialisée dans Oracle, permettra à l'optimiseur de l'utiliser pour effectuer la requête correspondante plutôt que d'interroger les tables sources.
Oracle ne pourra pas toujours inférer automatiquement que des vues matérialisées sont utilisables à la place des tables originales. Il est donc nécessaire dans ce cas de réécrire soi-même les requêtes concernées. En pratique c'est souvent le cas si les vues sont complexes.
La déclaration d'une vue matérialisée sous Oracle 9i permet également de planifier automatiquement les modalités de rafraîchissement de la vue, plutôt que de devoir gérer un rafraîchissement uniquement manuel.
Une vue matérialisée peut être indexée ou partitionnée comme toute table Oracle.
> Attributs d'agrégation de faits
Certaines analyses requièrent de regrouper les faits en fonctions de valeurs elles-mêmes issues des faits.
Dans ce cas des attributs d'agrégation des faits sont pré-calculés au sein des dimensions concernées.
Les produits les plus vendus (livres best-sellers...)
Les clients "high spender" qui plus dépensent le plus.
Syntaxe : Rafraîchissement manuel de la vue
Optimisation des requêtes
Attention
Raffraîchissement de la vue matérialisée
Remarque
Définition
Exemple
Exemple
[PARTITION BY ...] BUILD IMMEDIATE -- quand la construire (alt. : DEFERED)
REFRESH FORCE -- mode de rafraîchissement (alt. : COMPLETE, FAST)
ON DEMAND -- quand la rafraîchir (alt. : COMMIT)
ENABLE QUERY REWRITE -- utilisable pour l'optimisation automatique de
requêtes (alt. : DISABLE) AS
SELECT ...
EXECUTE dbms_mview.refresh('nom_vue');
-
Contenus annexes
21Stéphane Crozat
-
-
-
-
-
-
(Kimball, Ross, 2008, p.152)*
L'attribut est annoté d'un (a) dans le modèle dimensionnel.
> Objectifs du modèle dimensionnel
La modélisation par schéma en étoile, par opposition aux schémas normalisés en 3NF, permet de répondre à deux besoins caractéristiques des systèmes décisionnels : la et la des performance simplicité requêtes.
En effet en tant que structures les schémas en étoiles permettent d'agréger la table des faits redondantesavec n'importe qu'elle dimension en (deux ou trois pour les schémas en une seule opération de jointureflocons).
Ce gain de performance est souvent critique puisque les volumes de données sont généralement d'un ordre de grandeur très supérieur à celui des systèmes transactionnels.
Cette redondance ne pose pas les mêmes problèmes que dans les systèmes transactionnels, en effet :
les données étant statiques (importées), il n'y a pas de risque de divergence d'information lors de mises à jourl'usage du étant essentiellement statistique (regroupement), la conséquence d'une datawarehouseéventuelle erreur n'est pas du même ordre que dans un système transactionnel.
La présentation en étoile des données, avec les faits au centre et les dimensions autour, est particulièrement adaptée à pour agréger des données de la table des l'écriture rapide de requêtes simplesfaits selon des regroupements sur les tables de dimensions.
L'enjeu est de pouvoir répondre simplement et rapidement à une question simple, tandis qu'un modèle transactionnel, qui répond à d'autres contraintes, nécessitera souvent un code SQL complexe et des opérations multiples pour répondre à la même question. Cela permet notamment aux utilisateurs finaux de construire facilement de nouvelles requêtes au fil de leur exploration des données.
Être performant pour le calcul d’agrégats sur de gros volumes de données (exploration de données, )reportingÊtre appréhendable par un utilisateur final, en particulier pour formuler facilement des requêtes (exploration de données)Être suffisamment performant au chargement pour répondre aux sollicitations de mise à jour (
)ETL*
Être évolutif en fonction des évolutions amont (sources transactionnels) et aval (besoins d'exploitation) (ETL, métadonnées)
Syntaxe
Performance
Simplicité
Fondamental : Caractéristiques d'un bon modèle décisionnel
-
Contenus annexes
22Stéphane Crozat
- - -
1.
2.
> Création d'un fichier CSV avec SQL*Plus
Il est parfois utile de transférer le résultat d'une requête vers un fichier pour l'exploiter dans un CSV*
contexte extérieur à Oracle. SQL*Plus est une solution simple pour y parvenir ( , p.213).Oracle 9i*
Pour transférer un résultat de requête dans un fichier CSV, il faut procéder en deux étapes.
Écrire un script qui :
formate la sortie de façon adéquate (SET) ;oriente le résultat vers un fichier (SPOOL).encadre les données non numériques par des guillemets et sépare les colonnes par des points-virgules (||) ;
Appeler ce script pour obtenir le fichier CSV.
La sortie standard du client pourra être désactivée si le flux de données est important.
1 -- script /tmp/exportCsv.sql2 SET HEADING OFF3 SET FEEDBACK OFF4 SET ECHO OFF5 SET PAGESIZE 06 SPOOL /tmp/out.dat7 SELECT '"' || pkFamilleDefaut || '";"' || libelle || '"' FROM tFamilleDefaut ;
8 SPOOL OFF
1 -- exécution du script /tmp/exportCsv.sql2 @/tmp/exportCsv.sql
Il est indispensable de procéder en deux temps : l'exécution directe de ne /tmp/exportCsv.sqldonnera pas un formatage correct.
Fichier CSV * (cf. p.22)
> Fichier CSV
est un format informatique permettant de stocker des données tabulaires dans un fichier texte.CSV*
Chaque ligne du fichier correspond à une ligne du tableau. Les valeurs de chaque colonne du tableau sont séparées par un caractère de séparation, en général une ou un . Chaque ligne est virgule point-virguleterminée par un ( ).caractère de fin de ligne line break
Méthode
Exemple
Attention
Rappel
Définition : Fichier CSV
-- script /tmp/exportCsv.sql
SET HEADING OFF
SET FEEDBACK OFF
SET ECHO OFF
SET PAGESIZE 0
SPOOL /tmp/out.dat
SELECT '"' || pkFamilleDefaut || '";"' || libelle || '"' FROM
tFamilleDefaut ;SPOOL OFF
-- exécution du script /tmp/exportCsv.sql
@/tmp/exportCsv.sql
-
Contenus annexes
23Stéphane Crozat
-
-
-
Toutes les lignes contiennent le même nombre de valeurs (donc le même nombre de obligatoirementcaractères de séparation). Les valeurs vides doivent être exprimées par deux caractères de séparation contigus.
La taille du tableau est le nombre de lignes multiplié par le nombre de valeurs dans une ligne.
La première ligne du fichier peut être utilisée pour exprimer le nom des colonnes.
1 [NomColonne1;NomColonne2;...;NomColonneN]2 ValeurColonne1;ValeurColonne2;...;ValeurColonneN3 ValeurColonne1;ValeurColonne2;...;ValeurColonneN4 ...
1 Pierre;Dupont;20;UTC;NF172 Pierre;Dupont;20;UTC;NF263 Paul;Durand;21;UTC;NF174 Jacques;Dumoulin;21;UTC;NF29
1 Prenom;Nom;Age;Ecole;UV2 Pierre;Dupont;20;UTC;NF173 Pierre;Dupont;20;UTC;NF264 Paul;Durand;21;UTC;NF175 Jacques;Dumoulin;21;UTC;NF29
1 Jacques;Dumoulin;;UTC;NF29
L'âge est inconnu (NULL).
La syntaxe des fichiers CSV n'est pas complètement standardisée, aussi des variations peuvent exister :
Les chaînes de caractères peuvent être protégées par des guillemets (les guillemets s'expriment alors avec un double guillemet).Le caractère de séparation des nombres décimaux peut être le point ou la virgule (si c'est la virgule, le caractère de séparation doit être différent)...
Un des problème les plus importants reste l'encodage des caractères qui n'est pas spécifié dans le
fichier et peut donc être source de problèmes, lors de changement d' typiquement.OS*
Les fichiers CSV sont très utilisés en pour échanger les données d'une table (export/import).BD*
Syntaxe
Exemple : Fichier CSV sans entête
Exemple : Fichier CSV avec entête
Exemple : Valeur nulle
Attention : Variations...
Méthode : Usage en base de données
[NomColonne1;NomColonne2;...;NomColonneN]
ValeurColonne1;ValeurColonne2;...;ValeurColonneN
ValeurColonne1;ValeurColonne2;...;ValeurColonneN
...
Pierre;Dupont;20;UTC;NF17
Pierre;Dupont;20;UTC;NF26
Paul;Durand;21;UTC;NF17
Jacques;Dumoulin;21;UTC;NF29
Prenom;Nom;Age;Ecole;UV
Pierre;Dupont;20;UTC;NF17
Pierre;Dupont;20;UTC;NF26
Paul;Durand;21;UTC;NF17
Jacques;Dumoulin;21;UTC;NF29
Jacques;Dumoulin;;UTC;NF29
-
Contenus annexes
24Stéphane Crozat
Les contiennent généralement des utilitaires permettant d'exporter une table ou un résultat de SGBD*
requête sous la forme d'un fichier CSV, en spécifiant un certain nombre de paramètres (caractère de séparation de valeur, caractère de fin de ligne, présence ou non d'une ligne de définition des noms des colonnes, etc.). De même ils proposent des utilitaires permettant d'importer un fichier CSV dans une table (en spécifiant les mêmes paramètres), voire de créer directement une table à partir du fichier CSV (quand les noms des colonnes sont présents).
Les fichiers à largeur de colonne fixe n'utilisent pas de séparateur de colonne, mais imposent le même pour chaque cellule. L'avantage est de ne pas avoir à spécifier le caractère de nombre de caractères
séparation, l'inconvénient est la taille de fichier supérieure si les valeurs ne font pas toutes la même largeur.
Les fichiers tendent de plus en plus à remplacer les fichiers CSV car ils permettent d'être XML*
beaucoup plus expressifs sur le schéma d'origine. Ils sont également plus standards (encodage spécifié, principe de séparation des données par les , etc.). Leur seul inconvénient est d'être plus verbeux et tagsdonc plus volumineux.
Certains SGBD, comme Oracle, permettent de créer des tables dites , qui autorisent de créer un externesschéma de table , permettant ainsi un accès SQL standard à un fichier directement sur un fichier CSVCSV, sans nécessité de l'importer d'abord dans une table.
Complément : Fichiers à largeur de colonne fixe
Complément : XML
Complément : Tables externes
-
Solutions des exercices
25Stéphane Crozat
Exercice p. 12> Solution n°3
Exercice p. 12> Solution n°2
- - -
Exercice p. 12> Solution n°1
1 d , (*) q2 f_dw_ventes v, f_dw_date d3 v =d4 GROUP d5 q ;
1 JDS Q2 ---------- -3 saturday 187106 4 tuesday 79424 5 wednesday 76152 6 thursday 75147 7 friday 74284
Conclusion : On vend plus le samediConclusion : Les magasins sont tous fermés tous les dimanche et tous les lundiHypothèse : Tous les autres jours se comportent de la même façon, on considère à présent uniquement les jours "Samedi" et "Non-Samedi"
1 avg(q) 2 (3 d jds, (*) q4 f_dw_ventes v, f_dw_date d5 v =d6 GROUP d7 q 8 )9 jds ;
1 AVG(Q)2 ------3 76251.75
1 REPLACE VIEW f_dw_ventesParJds 2 d , (*) q3 f_dw_ventes v, f_dw_date d4 v =d
Solutions des exercices
d , (*) qSELECT .jds COUNT AS
f_dw_ventes v, f_dw_date dFROM
v =dWHERE .dat .dat
GROUP dBY .jds
q ;ORDER BY desc
JDS Q
---------- -
saturday 187106
tuesday 79424
wednesday 76152
thursday 75147
friday 74284
avg(q) SELECT FROM
(
d jds, (*) qSELECT .jds AS COUNT AS
f_dw_ventes v, f_dw_date dFROM
v =dWHERE .dat .dat
GROUP dBY .jds
q ORDER BY desc
)
jds ;WHERE 'saturday'
AVG(Q)
------
76251.75
REPLACE VIEW f_dw_ventesParJds CREATE OR AS
d , (*) qSELECT .jds COUNT AS
f_dw_ventes v, f_dw_date dFROM
v =dWHERE .dat .dat
-
Solutions des exercices
26Stéphane Crozat
Exercice p. 12> Solution n°4
5 GROUP d6 q ;
1 REPLACE VIEW f_dw_ventesMoyHS 2 avg(q) m3 f_dw_ventesParJds4 jds ;
1 REPLACE VIEW f_dw_ratioVentesSamedi 2 s jds, ROUND(s /hs , ) r3 f_dw_ventesparjds s, f_dw_ventesmoyhs hs4 jds = ;
1 * f_dw_ratioVentesSamedi;
1 JDS R2 ---------- -3 saturday 2.45
1 m r1, (*) q12 f_dw_ventes v, f_dw_mag m3 v =m4 GROUP m
1 R1 Q12 ---------- --3 Year 38221 4 Author 404702 5 Editor 52214
Les magasins de type A vendent environ 10 fois plus que les Y et 7 fois plus que les E.
1 m r2, (*) q22 f_dw_mag m3 GROUP m
1 R2 Q22 ---------- --3 Year 17 4 Author 92 5 Editor 43
Les magasins de type A sont environ 5 fois plus nombreux que les Y et 2 fois plus nombreux que les E.
1 r1 Ray, q1 Ventes, q2 NbMag, ROUND(q1/q2) VentesParMag 2 ( m r1, (*) q13 f_dw_ventes v, f_dw_mag m4 v =m5 GROUP m ),6 ( m r2, (*) q27 f_dw_mag m8 GROUP m )9 r1=r2
10 ventesParMag ;
1 RAY VENTES NBMAG VENTESPARMAG
GROUP dBY .jds q ;ORDER BY desc
REPLACE VIEW f_dw_ventesMoyHS CREATE OR AS
avg(q) mSELECT as
f_dw_ventesParJdsFROM
jds ;WHERE 'saturday'
REPLACE VIEW f_dw_ratioVentesSamedi CREATE OR AS
s jds, ROUND(s /hs , ) rSELECT .jds AS .q .m 2 as
f_dw_ventesparjds s, f_dw_ventesmoyhs hsFROM
jds = ;WHERE 'saturday'
* f_dw_ratioVentesSamedi;SELECT FROM
JDS R
---------- -
saturday 2.45
m r1, (*) q1SELECT .ray AS COUNT AS
f_dw_ventes v, f_dw_mag mFROM
v =mWHERE .mag .mag
GROUP mBY .ray
R1 Q1
---------- --
Year 38221
Author 404702
Editor 52214
m r2, (*) q2SELECT .ray AS COUNT AS
f_dw_mag mFROM
GROUP mBY .ray
R2 Q2
---------- --
Year 17
Author 92
Editor 43
r1 Ray, q1 Ventes, q2 NbMag, ROUND(q1/q2) VentesParMag SELECT AS AS AS AS FROM
( m r1, (*) q1SELECT .ray AS COUNT AS
f_dw_ventes v, f_dw_mag mFROM
v =mWHERE .mag .mag
GROUP m ),BY .ray
( m r2, (*) q2SELECT .ray AS COUNT AS
f_dw_mag mFROM
GROUP m )BY .ray
r1=r2WHERE
ventesParMag ;ORDER BY DESC
RAY VENTES NBMAG VENTESPARMAG
-
Solutions des exercices
27Stéphane Crozat
Exercice p. 13> Solution n°7
Exercice p. 13> Solution n°6
Exercice p. 13> Solution n°5
2 ---------- ------ ----- ------------3 Author 404702 92 4399 4 Year 38221 17 2248 5 Editor 52214 43 1214
Les magasins de type A vendent finalement environ 2 fois plus que les Y et 4 fois plus que les E.
1 ROUND(AVG(ventes)) 2 (3 (*) ventes4 f_dw_ventes v, f_dw_produit p5 p =v6 GROUP p7 );
La moyenne est de 372 ventes par livre.
1 p , (*) ventes2 f_dw_ventes v, f_dw_produit p3 p =v4 GROUP p
Ventes par produit
On observe une augmentation importante entre 1000 et 1800.
On définit un best-seller comme un livre vendu à plus de 1800 exemplaires.
---------- ------ ----- ------------Author 404702 92 4399
Year 38221 17 2248
Editor 52214 43 1214
ROUND(AVG(ventes)) SELECT FROM
(
(*) ventesSELECT COUNT AS
f_dw_ventes v, f_dw_produit pFROM
p =vWHERE .isbn .pro
GROUP pBY .isbn
);
p , (*) ventesSELECT .isbn COUNT AS
f_dw_ventes v, f_dw_produit pFROM
p =vWHERE .isbn .pro
GROUP pBY .isbn
-
Solutions des exercices
28Stéphane Crozat
Exercice p. 13> Solution n°8
1 REPLACE VIEW f_dw_bs 23 isbn,4 titre,5 CASE WHEN ventes>= THEN ELSE END bs67 (8 isbn, titre, (*) ventes9 f_dw_ventes v, f_dw_produit p
10 p =v11 GROUP p , p , 12 );
REPLACE VIEW f_dw_bs CREATE OR ASSELECT
isbn,
titre,
CASE WHEN ventes>= THEN ELSE END bs1800 1 0 AS
FROM
(
isbn, titre, (*) ventesSELECT COUNT AS
f_dw_ventes v, f_dw_produit pFROM
p =vWHERE .isbn .pro
GROUP p , p , BY .isbn .titre
);
-
Signification des abréviations
29Stéphane Crozat
BD : Base de Données
CSV : Comma Separated Values
ETL : Extraction, Transformation, Loading
OS : Operating Système (Système d'Exploitation)
SGBD : Système de Gestion de Bases de Données
XML : eXtensible Markup Language
Abréviations
-
Bibliographie
30Stéphane Crozat
Kimball R., Ross M. (2008, 2002). The Data Warehouse Toolkit: The Complete Guide to Dimensional . Wiley Publishing, second edition.Modeling
, , , .Abbey Michael, Corez Michael, Abramson Ian Oracle 9i : Notions fondamentales CampusPress 2001
Bibliographie
ObjectifsIntroductionExploration avec l'agrégationExploration mono-dimension et mono-niveau avec GROUP BYIsolation de facteurSous-requêtes dans la clause FROMAjustement des proportions
Faciliter l'exploitation avec les vuesUsage des vuesIsolation de facteurAgrégation de faits
Application : Exploitation mono-dimensionnelle de donnéesProjet Fantastic : RappelExercice : Cas Fantastic : Exploration avec l'agrégationExercice : Cas Fantastic : Analyse en proportionExercice : Cas Fantastic : Isolation de facteurExercice : Cas Fantastic : Agrégation de faitsExercice : Cas Fantastic : Exploration de données libre
RappelsRappels Oracle pour l'exploration des donnéesSous-requêtes dans la clause FROMFenêtrage des donnéesSQL*Plus
Contenus annexesSolutions des exercicesAbréviationsBibliographie