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