Nom : Prénom : Page 1 Université Pierre et Marie Curie Paris 6 BDMD EXAMEN - 26 MARS 2007 Master d'informatique Version CORRIGEE Documents autorisés Lorsqu un cadre suggère des réponses, entourer la (les) bonne(s) réponse(s). La qualité de la rédaction sera prise en compte. Ecrire à l encre bleue ou noire. Exercice 1. BD décisionnelle : schémas étoile et flocon Soit le schéma TPCH simplifié : Part (partkey, name, mfgr, brand, type, size, container, retailprice) mfgr est le nom de groupe du fabricant, brand est la marque du fabricant. Supplier (suppkey, name, address, nationkey, acctbal) PartSupp ( partkey, suppkey, availqty, supplycost) Customer ( custkey, name, address, nationkey, acctbal, mktsegment) mktsegment est le secteur de marché (automobile, bâtiment,...) Orders (orderkey, custkey, orderstatus, totalprice, orderdate, orderpriority, clerk, shippriority) LineItem (orderkey, partkey, suppkey, linenumber, quantity, extendedprice, discount, tax, returnflag, linestatus, shipdate, commitdate, receiptdate, shipmode) Nation (nationkey, name, regionkey) Region ( regionkey, name) 3 pts Question 1. On veut transformer le schéma TPCH en un schéma étoile de telle sorte qu on ne perdre aucune information contenue dans la base. a) Les attributs availqty et supplycost de PartSupp appartiendront-ils à la table des faits ou à une dimension? Justifier brièvement Entourer: fait dimension Justif. : Réponse : ils feront partie de la table des faits En effet,. availqty et supplycost sont des attributs de la table de Faits. Ils ne décrivent pas une dimension mais l association entre 2 dimensions (Fournisseur et Produit). Il faut donc ajouter ces 2 attributs à ceux de Orders et LineItem b) Définir la table des faits sous la forme d une requête SQL (i.e., dont le résultat est l ensemble des faits)
Nom : Prénom : Page 2 Table des faits : jointure entre Orders LineItem et PartSupp. c) Définir la dimension temporelle telle que son schéma soit : Date (d Date, mois Number(2), année Number(4)) L attribut mois est le numéro du mois dans [1, 12]. Dimension temporelle: On veut Date(d, mois, année) : la date sert d identifiant, il faut obtenir toutes les dates possibles : union des projections sur les attributs shipdate, commitdate et receiptdate, with ItemDate as (select receiptdate as d from LineItem union select shipdate as d from LineItem union select commitdate as d from LineItem) Select d, extract( month from d) as mois, extract( year from d) as annee From ItemDate Order by d; Syntaxe correcte : Voir fichier d.sql d) Définir chaque autre dimension sous la forme d une expression algébrique.
Nom : Prénom : Page 3 Dim des fournisseurs : jointure enntre Supplier, Nation et Région Dim des clients : jointure entre Customer, Nation et Region Dim des produits : select * from Part Question 2. On veut transformer le schéma TPCH en un schéma en flocon. En particulier la dimension concernant les clients (qui passent des commandes) est décomposée en 3 relations C1, C2, C3 telles que C1 est associée à la table des faits. C2 et C3 sont associées uniquement à C1. La relation C2 décrit la localisation géographique des clients. La relation C3 décrit le secteur de marché de la clientèle. On suppose que la clientèle est sectorisée par activité (automobile, bâtiment, meuble) et par revenu (faible, moyen, fort). a) Quels sont les attributs, inexistant dans le schéma TPCH, à ajouter pour définir la dimension des clients? L attribut mktsegment correspond à activité On ajoute un attribut revenu Et un attribut secteur pour identifier le secteur de marché b) Donner le schéma de C1, C2 et C3. C1 = Customer Déplacer l attribut mktsegment vers C3 Ajouter l attribut secteur qui fait référence à C3.secteur C2 = CustomerNation = jointure Nation,Région C3 = CustomerSegment(secteur, mktsegment, revenu)
Nom : Prénom : Page 4 Rmq : l attribut mktsegment correspond à activité Exercice 2. Requêtes analytiques Le journal des accès à un site web est stocké dans une BD. Son schéma est : A (u, m, s, d, url, taille) u est l identifiant de l utilisateur qui navigue sur le site web m est l adresse IP du client s est le nom de domaine du client (ex : aol.com, jussieu.fr,...) : d est la date de l accès 4 pts la date est composée de 5 attributs numériques dj : jour dans [0, 31], dm : mois dans [1, 12], da : année dans [1980, 2008], dh : heure dans [0, 23] dmn : minutes dans [0, 59] url est la page web consultée par l utilisateur taille est la taille d une page en octets Ecrire les requêtes en SQL en utilisant si possible les fonctions analytiques de classement et d agrégation sur une plage glissante. Question 1 : Pour toutes les dates existant dans la base, donner le nombre d accès qui ont eu lieu pendant les 10 minutes précédentes. Le schéma du résultat est (d, accès). select distinct d, count(*) over (order by d range between interval '10' minute preceding and current row) as acces from A order by d desc; Question 2 : Donner le classement des 10 utilisateurs qui ont téléchargé le plus gros volume de données. Afficher leur rang. Le schéma du résultat est (u, volume, rang). Voir TP AP
Nom : Prénom : Page 5 Question 3 : Pour chaque page web, donner le classement des domaines (attribut s) ayant fait le plus d accès à cette page. Le schéma du résultat est (url, s, accès, rang) select url, s, count(*) as accès, rank() over ( partition by url order by count(*) desc) as rang from A group by url, s ; Question 4 : On considère que la session d un utilisateur se termine lorsque l utilisateur ne consulte plus le site pendant 3 minutes ou plus. Afficher le nombre de sessions pour chaque utilisateur. Le schéma du résultat est (u, nb_session).
Nom : Prénom : Page 6 Sol1 : fenetre temporelle glissante Sol 2 : On commence par sélectionner les accès qui ne sont pas des débuts de sessions T1 = Select distinct a2.u, a2.d From A a1, A a2 Where a1.u = a2.u and a2.d - a1.d <=3 Puis select u, count(*) as nb_session From T1 Group by u Exercice 3. Entrepôts de données 6 pts On considère un entrepôt de données permettant d observer les ventes de produits d une entreprise. Le schéma des tables est le suivant : CUSTOMER (cust_id, city, state, region, country) PRODUCT (prod_id, prod_name, category, cost_price, sell_price, supplier) TIME (time_key, month, month_name, quarter, year) PURCHASES(prod_id, time_key, cust_id, ship_date, purchase_price, shipping_charge) Question 1. Indiquez quelles sont les tables de faits et les tables de dimension du schéma en étoile de cet entrepôt. Table de fait : purchases Tables de dimensions : customer, product, time. Question 2. On veut transformer ce schéma en schéma en flocon. Donnez la nouvelle représentation de la table TIME. La table TIME est décomposée en plusieurs tables : TIME (time_key, month_key) MONTH (month_key, month, month_name, quarter_key) QUARTER(quarter_key, quarter, year) Question 3. Ecrire la requête SQL permettant d afficher la moyenne des ventes (purchase_price) par catégorie (category) et par année (year). SELECT p.category, t.year AVG(purchase_price) average_sales FROM product p, time t, purchases f Where p.prod_id = f.prod_id And t.time_key = f.time_key GROUP BY p.category, t.year ; Question 4. Calculer le cube permettant d obtenir la somme des ventes par categorie, par année et par région en utilisant la clause GROUP BY CUBE. Select p.category, t.year, c.region, sum(f.purchase_price) total_sales From product p, time t, purchases f, customer c Where p.prod_id = f.prod_id And t.time_key = f.time_key AND c.cust_id = f.cust_id GROUP BY CUBE (p.category, t.year, c.region);
Nom : Prénom : Page 7 Question 5. On considère la même requête, mais en remplaçant la clause GROUP BY CUBE par la clause GROUPE BY ROLLUP. Quelles différences ce changement implique-t-il? Vous pouvez expliquer les différences à l aide d un exemple. Dans le premier cas (CUBE) on a des agrégations sur tous les niveaux de regroupement (category, year, region), tandis que dans le deuxième, on se limite aux regroupements (category, year, region), (category, year ) et (category). On n a que des résultats partiels du cube. Question 6. On souhaite maintenant observer les ventes de 2006 par région, et étudier particulièrement les ventes qui ont lieu pendant les vacances. On veut obtenir une relation de schéma (region, month_name, sales), qui contient, pour chaque région, la somme des ventes par mois ainsi que la somme des ventes qui ont eu lieu pendant les vacances (somme des ventes des mois de juillet et août). Dans ce dernier cas, l attribut month_name prendra la valeur vacances. Ecrire la requête permettant d obtenir ce résultat. Select region, month_name, sales From (select t.month_name, c.region, sum(f.pourchase_price) sales from purchases f, time t, customer c Model Where f.time_key = t.time_key and t.year = 2006 and c.cust_id = f.cust_id Group by c.region, t.month_name) Partition by (region) Dimension by (month_name) Measures (sales) Rules (sales[ vacances ] = sales[ juillet ] + sales[ août ])