exploitation mono-dimensionnelle d'un data warehouse en sqloffrir des sources d'accès aux données...

30
Exploitation mono- dimensionnelle d'un data warehouse en SQL Stéphane Crozat Data warehouse http://dwh.crzt.fr 21 septembre 2016

Upload: others

Post on 13-Mar-2021

1 views

Category:

Documents


0 download

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