Differences between current version and predecessor to the previous major change of Cube.

Other diffs: Previous Revision, Previous Author

Newer page: version 36 Last edited on October 6, 2017 6:22 pm by bdmd
Older page: version 1 Last edited on March 13, 2012 12:01 pm by bdmd Revert
@@ -2,92 +2,108 @@
  
 L'objectif de ce TD/TME est de savoir calculer, transformer et interroger un cube en SQL 
  
 !!Documentation 
-Voir le cours et le livre Data Warehousing, chapitre 20 [SQL for aggregation | http ://www-ari .ufr-info-p6.jussieu .fr /OUTILS /documentation/doc/oracle/doc10G-2 /server.102/b14223/aggreg .htm#i1007462 ] : les opérateurs [ rollup | http://www-ari.ufr-info-p6.jussieu.fr/OUTILS/documentation/doc/oracle/doc10G-2/server.102/b14223/aggreg.htm#i1007413] , [ cube |http://www-ari.ufr-info-p6.jussieu.fr/OUTILS/documentation/doc/oracle/doc10G-2/server.102/b14223/aggreg.htm#i1007428] et la fonction [ grouping | http://www-ari.ufr-info-p6.jussieu.fr/OUTILS/documentation/doc/oracle/doc10G-2/server.102/b14223/aggreg.htm#i1007434]
+Voir le cours et le livre Data Warehousing, chapitre 20 [SQL for aggregation | https ://docs .oracle .com /cd /B19306_01 /server.102/b14223/part5 .htm].  
+Consulter les opérateurs rollup, cube et la fonction grouping.  
+  
+  
+  
 Lire également les questions fréquentes ci-dessous. 
  
 !!Présentation 
 On considère la base de données de TPC-H (voir [TpcH]) 
  
-Soit le cube C1 représentant la somme des ventes d'articles commandés, selon 3 dimensions :  
-* dimension ''x'' : les produits  
-* dimension ''y'' : les fournisseurs  
-* dimension ''z'' : la date de commande 
+Soit les cubes représentant la somme des ventes d'articles commandés, selon 3 dimensions :  
+* dimension ''x'' : les ** produits**  
+* dimension ''y'' : les **clients**  
+* dimension ''z'' : la ** date de commande**  
  
-Les niveaux de la hiérarchie des produits sont : nom et type (plusieurs produits par type). %%%  
-Les niveaux de la hiérarchie des fournisseurs sont : nom, pays, continent %%%  
-Les niveaux de la hiérarchie de la date sont : jour, mois, année 
+Les niveaux de la hiérarchie des ** produits** sont : ** nom, type** (plusieurs produits par type). %%%  
+Les niveaux de la hiérarchie des **clients** sont : ** nom, pays, continent** (le nom d'un continent est l'atribut r_name dans la table Region) %%%  
+Les niveaux de la hiérarchie de la ** date** sont : ** jour, mois, année**  
  
-Le cube C1 contient des données sur les ventes, au niveau le plus détaillé de chaque dimension (ie. nom de produit, nom de fournisseur et jour). 
+Le cube C1 contient des données sur les ventes, au niveau ** le plus détaillé** de chaque dimension (ie. nom de produit, nom de client et jour).  
+ Voir un extrait de [C1 | http://www-poleia.lip6.fr/~naacke/ens/phpwiki/wiki/extra/c1-res.txt]. Le cube C1 a 60098 cellules
  
 !!Question 1 : Opérations algébriques 
-On considère le cube C2 obtenu à partir de C1 tel que :  
-* On s'intéresse seulement aux ventes de produits en cuivre (dont le type se termine par ''COPPER'') effectuées avant le 1er janvier 1993 .  
-* On considère seulement le niveau ''type'' de la dimensions produit et le niveau ''nom'' de la dimension fournisseur
+On considère le cube C2 à deux dimensions obtenu à partir de C1 tel que :  
+* On s'intéresse seulement aux ventes de produits en cuivre (dont le type se termine par ''COPPER'' : like '%COPPER ') effectuées après le 1er juin 1998 .  
+* On considère seulement le niveau ''type'' de la dimensions produit et le niveau ''nom'' de la dimension client
  
 Les valeurs des cellules de C2 représentent la somme des ventes quelle que soit la date. 
  
-a) Quelles sont, d'après le cours, les opérations à appliquer sur C1 pour obtenir C2 ? Donner l'ordre dans lequel les opérations sont appliquées 
+a) Quelles sont, d'après le cours, les opérations à appliquer sur C1 pour obtenir C2 ? Donner l'ordre dans lequel les opérations sont appliquées.  
  
-b) Donner la requête SQL dont le résultat contient toutes les valeurs de C2. 
+b) Donner la requête SQL calculant toute les cellules de C2 (264 cellules).Voir un extrait de [C2 | http://www-poleia.lip6.fr/~naacke/ens/phpwiki/wiki/extra/c2-res.txt]
  
  
-!!Question 2 : Navigation  
-On suppose qu'une application graphique permet de naviguer, à partir de C2, au travers des diff érents niveaux hiérarchiques de la dimension fournisseurs. Pour que la navigation soit fluide, l'application pré-calcule (en SQL) toutes les données du cube, rencontrées lors de cette navigation.  
+!!Question 2 : Agr égation sur les niveaux d'une dimension 
  
-a) Exprimer en SQL la requête pos par l 'application . Le résultat de la requête doit contenir toutes les données du cube, à tous les niveaux de la dimension fournisseurs. Utiliser le mot cl é ''rollup '' 
+On veut calculer, en une seule requête T2, tous les cubes obtenus par agrégation sur la dimension ''client'' (ayant 3 niveaux) .  
+ Le résultat de la requête contient toutes les données des cubes à tous les niveaux d'agr égation sur la dimension ''client ''.  
  
-b ) Idem sans utiliser ni ''rollup'' ni ''cube'', mais ''union ''. 
+a ) T2R: Ecrire T1 en utilisant le mot-clé ''ROLLUP ''. Voir le résultat de [T2R | http://www-poleia.lip6.fr/~naacke/ens/phpwiki/wiki/extra/t2r-res.txt]
  
-c ) Idem en utilisant ''cube ''. Obtenez-vous un résultat équivalent ? Décrire précisément la différence de résultat entre les requêtes a) et c)  
+b ) T2U: Ecrire T1 sans utiliser ''rollup'' mais ''UNION ''. 
  
  
  
-!!Question 3: Pr ésentation du résultat  
-a) On considère la requête 2.a). Compléter la projection (clause select) pour marquer chaque tuple avec le niveau de hiérarchie auquel il se situe. Afin de repérer le sous-total pour un type de produit, ajouter des attributs nommés STF, STP et STR, TM :  
-* STF : __S__ous __T__otal des ventes par __F__ournisseur pour un type de produit  
-* STP : ventes nationales pour un type de produit  
-* STR : ventes continentales pour un type de produit  
-* TM : __T__otal des ventes __M__ondiales : pour un type de produit  
+!!Question 3: Projection agr égative sur une ou plusieurs dimensions  
  
-Utiliser la fonction grouping () 
+a) En utilisant le mot clé ''CUBE'' écrire la requête T3 calculant tous les cubes obtenus à partir de C1 par projection agrégative sur toutes les combinaisons des dimensions ''client'' (au niveau region r_name), ''produits'' (au niveau du type p_type) et ''date'' au niveau de l'année qu'on obtient avec ''extract(year from o_orderdate)''.  
+Le schéma de T3 est:  
+* __T3__ (p_type, r_name, annee, total_ventes ). Expliquer ce que représente le 1er tuple du résultat qui a 3 valeurs NULL.  
  
-b) Compl éter la requête avec les sous -totaux tous types de produits confondus (sous total par pays et r égion , et le total mondial ). 
+Voir le résultat de [T3 | http://www-poleia.lip6.fr/~naacke/ens/phpwiki/wiki/extra/t3-res.txt].  
+  
+ b) Soit la requête R1 donnant le total des ventes effectu ées en afrique.  
+* R1: Exprimer cette requête sur le schéma TPC -H directement.  
+* R2: Exprimer une requête équivalente , posée sur la vue ''T3''.  
+  
+c) Les requêtes R1 er R2 sont-elle traitées de manière identique par le SGBD ?  
+  
+d ) Donner un exemple de requête calculant un cube qui ne peut pas être obtenu seulement à partir de T3
  
  
-!!Question 4: Cube en 3D avec dimension temporelle  
-On veut calculer les donn tous les cubes obtenus par navigation sur les 3 dimensions : produit, fournisseur , date. Pour cela on définit la vue : 
+!!Question 4: Agrégation sur trois dimensions  
+On veut calculer, en une seule requ tous les cubes obtenus à partir de C1 par navigation sur les 3 dimensions : produit, client , date.  
+ Pour cela on définit la vue : 
 * __Date_commande__ (orderdate, numMois, numAnnée). L'attribut orderdate correspond au jour de la commande. 
 a) Définir en SQL la vue Date_commande 
  
-b) Expliquer comment calculer toutes les données souhaitées en utilisant Date_commande. 
+b) Ecrire T4 en utilisant Date_commande. 
  
  
-!!Question 5: Interrogation d'un cube  
  
-a) D éfinir en SQL une vue repr les cubes obtenus par navigation sur les 3 niveaux de la dimension ''fournisseur'' et les 2 niveaux de la dimension ''produits'' .  
-* __Les_cubes__ (nom_prod, type_prod, fournisseur, pays, continent, montant_ventes)  
+!!Question 5: S électionner un cube parmi un ensemble de cubes  
+On a vu qu' une requ les mots-clés ROLLUP ou CUBE calcule en ensemble de cubes . On veut sélectionner un certain cube contenu dans  
+le résultat d'une requête.  
  
-b ) Soit la requête R1 donnant le total des ventes effectu ées en afrique.  
-* R1: Exprimer cette requ éma TPC-H directement .  
-* R2: Exprimer une requ , pos ée sur la vue ''Les_cubes''
+a ) On considère la requête T2R d éfinie pr édemment .  
+En utilisant la fonction grouping(), apr ,  
+compl éter la projection (clause select) pour marquer chaque tuple avec le niveau de hiérarchie auquel il se situe
  
-c ) Les requ -elle trait ées de mani par le SGBD ?  
+b ) Afin de rep -total pour un type de produit, ajouter des attributs nomm és STF, STP et STR, TM :  
+* STC : __S__ous __T__otal des ventes par __C__client pour un type de produit  
+* STP : ventes nationales pour un type de produit  
+* STR : ventes continentales pour un type de produit  
+* TM : __T__otal des ventes __M__ondiales : pour un type de produit  
+  
+  
+c) Compl par pays et région, et le total mondial).  
  
-d) Donner une expression simplifiée de R2. Expliquer les transformations  
-algébriques que vous appliquez sur R2 pour la simplifier.  
  
-e) Donner un exemple de requête qui aggrège des données de la base TPC-H mais qu'il est impossible de poser sur la vue Les_cubes.  
  
 !! Questions fréquentes 
  
 * Comment obtenir une valeur de type __date__ à partir d'une chaîne de caractères ? 
 ** préciser le format par défaut: alter session set nls_date_format = 'DD/MM/YY'; 
 ** ou appeler la fonction de conversion to_date('01/01/93', 'DD/MM/YY'). Exemple de formats :'YYYY-MM-DD' ou 'YYYY-MM-DD HH24:MI:SS' (en précisant l'heure) 
  
 * Comment obtenir le mois et l'année d'une __date__ ? 
-** to_char(o_orderdate, 'MM') et to_char(o_orderdate, 'YY') 
+** to_char(o_orderdate, 'MM') to_char(o_orderdate, 'YY')  
+** extract( month from d) extract( year from d
  
 * L'ordre des attributs du __rollup__ importe--t-il ? 
 ** oui : group by rollup(a, b, c) est différent de group by rollup(c, b, a) 
  

current version

Cube : manipulation de données multi-dimensionnellles

L'objectif de ce TD/TME est de savoir calculer, transformer et interroger un cube en SQL

Documentation

Voir le cours et le livre Data Warehousing, chapitre 20 SQL for aggregation. Consulter les opérateurs rollup, cube et la fonction grouping.

Lire également les questions fréquentes ci-dessous.

Présentation

On considère la base de données de TPC-H (voir TpcH)

Soit les cubes représentant la somme des ventes d'articles commandés, selon 3 dimensions :

Les niveaux de la hiérarchie des produits sont : nom, type (plusieurs produits par type).
Les niveaux de la hiérarchie des clients sont : nom, pays, continent (le nom d'un continent est l'atribut r_name dans la table Region)
Les niveaux de la hiérarchie de la date sont : jour, mois, année

Le cube C1 contient des données sur les ventes, au niveau le plus détaillé de chaque dimension (ie. nom de produit, nom de client et jour).

Voir un extrait de C1. Le cube C1 a 60098 cellules.

Question 1 : Opérations algébriques

On considère le cube C2 à deux dimensions obtenu à partir de C1 tel que :

Les valeurs des cellules de C2 représentent la somme des ventes quelle que soit la date.

a) Quelles sont, d'après le cours, les opérations à appliquer sur C1 pour obtenir C2 ? Donner l'ordre dans lequel les opérations sont appliquées.

b) Donner la requête SQL calculant toute les cellules de C2 (264 cellules).Voir un extrait de C2.

Question 2 : Agrégation sur les niveaux d'une dimension

On veut calculer, en une seule requête T2, tous les cubes obtenus à partir de C2 par agrégation sur la dimension client (ayant 3 niveaux). Le résultat de la requête contient toutes les données des cubes à tous les niveaux d'agrégation sur la dimension client.

a) T2R: Ecrire T1 en utilisant le mot-clé ROLLUP. Voir le résultat de T2R.

b) T2U: Ecrire T1 sans utiliser rollup mais UNION.

Question 3: Projection agrégative sur une ou plusieurs dimensions

a) En utilisant le mot clé CUBE écrire la requête T3 calculant tous les cubes obtenus à partir de C1 par projection agrégative sur toutes les combinaisons des dimensions client (au niveau region r_name), produits (au niveau du type p_type) et date au niveau de l'année qu'on obtient avec extract(year from o_orderdate). Le schéma de T3 est:

Voir le résultat de T3.

b) Soit la requête R1 donnant le total des ventes effectuées en afrique.

c) Les requêtes R1 er R2 sont-elle traitées de manière identique par le SGBD ?

d) Donner un exemple de requête calculant un cube qui ne peut pas être obtenu seulement à partir de T3.

Question 4: Agrégation sur trois dimensions

On veut calculer, en une seule requête T4, tous les cubes obtenus à partir de C1 par navigation sur les 3 dimensions : produit, client, date. Pour cela on définit la vue :

a) Définir en SQL la vue Date_commande

b) Ecrire T4 en utilisant Date_commande.

Question 5: Sélectionner un cube parmi un ensemble de cubes

On a vu qu'une requête utilisant les mots-clés ROLLUP ou CUBE calcule en ensemble de cubes. On veut sélectionner un certain cube contenu dans le résultat d'une requête.

a) On considère la requête T2R définie précédemment. En utilisant la fonction grouping(), après avoir lu la documentation sur grouping(), compléter la projection (clause select) pour marquer chaque tuple avec le niveau de hiérarchie auquel il se situe.

b) Afin de repérer le sous-total pour un type de produit, ajouter des attributs nommés STF, STP et STR, TM :

c) Compléter la requête avec les sous-totaux tous types de produits confondus (sous total par pays et région, et le total mondial).

Questions fréquentes


LesTme, LesCours, Accueil