Datalager och datautvinning 1
Datalager och datautvinning! Databaser kan innehålla stora mängder information om ett företags eller en organisations verksamhet" Data kan också användas för att analysera verksamheten och härleda ny kunskap som kan användas för att stöda och effektivera verksamheten." Används i beslutsstödande system (decision-support systems)." Ett datalager (data warehouse) lagrar information i ett format som är lämpat för analys av stora mängder data." Data samlas in och lagras på ett ställe, ofta från flera olika källor." Lagras med ett enhetligt schema (vanligtvis ett speciellt schema som är gjort för att stöda analys)." Med datautvinning (data mining) avses data-analys som man gör för att hitta ny kunskap om verksamheten, i form av mönster eller statistiska regler." Den nya kunskapen kan användas för att styra och effektivera verksamheten." 2
Datalager! Ett datalager (data warehouse) är en samling av data med ett enhetligt schema." Data samlas in från flera olika källor och lagras på ett ställe." Lagras vanligtvis som en specialiserad databas med ett stjärnschema." Används enbart för analytisk processering (OLAP), inte för dagliga transaktioner (OLTP)." Lagrar historisk data över en lång tidsperiod." DBMS SQL Datakällor data loaders SAS... Datalager SQL frågor och analysverktyg 3
Datautvinning! Datautvinning (data mining) innebär att man analyserar stora mängder av historisk data för att hitta ny kunskap om någon verksamhet." Mönster, regler, samband och trender." Man använder olika statistiska metoder för att analysera data." Olika användningssätt:" Förutsägelse (prediction)."! Ex: avgör om en person som ansöker om ett kreditkort kommer att utgöra en kreditrisk i framtiden." Identifiera samband."! Ex: undersök om det finns produkter (eller produktkategorier) som kunderna ofta köper tillsammans i ett varuhus." Gruppering och klassificering"! Ex: undersöker hurudana kategorier av kunder köper de dyraste smart-telefonerna" 4
Driftsdatabaser! De databaser som används för att stöda den dagliga verksamheten kallas för driftsdatabaser eller operativa databaser." Exempel:" Bankers databaser över kunder, konton, lån, placeringar, etc." Universitetens databaser över studerande, kurser, utbildningsprogram, kursanmälningar, studieprestationer, etc." Driftsdatabaser är planerade för transaktionshantering." Man gör transaktioner där man tittar på eller uppdaterar en relativt liten mängd data." Exempel: betalar en räkning, anmäler sig till en kurs, bokar en resa,... " Driftsdatabaser är designade för On-Line Transaction Processing (OLTP)" Databaserna har en enkel struktur i form av normaliserade tabeller." Stora mängder data finns lagrad i tabellerna." Uppdateringar berör små mängder data åt gången, som t.ex. en överföring av ett belopp från ett konto till ett annat." Sökningarna är relativt enkla, t.ex. när man tittar på transaktionerna för ett konto under en månads tid." 5
Beslutsstödande system! Beslutsstödande system (decision support systems) är informationssystem som används för att stöda beslutsfattande i företag och organisationer." Besluten kan baseras på kunskap om verksamheten som man t.ex. kan få fram genom att analysera information i databaser." Kan ge kunskap på en högre nivå än den detaljerade information som finns i databaserna: trender i verksamheten, prognoser för framtiden." Exempel:"! Vilka varor förväntas sälja bra under den kommande säsongen."! Till vilket kundsegment lönar det sig att marknadsföra avancerade och dyra mobiltelefoner." Man kan få fram den här typen av information genom att analysera historisk data i databaserna." Man aggregerar data över olika tidsperioder, över olika produktkategorier eller för olika kundtyper." 6
OLAP! On-line Analytical Processing (OLAP) stöder interaktiv analys av stora datamängder i ett datalager genom att summera data på olika sätt och beräkna statistiska mått på data." OLAP skiljer sig från vanlig transaktionsprocessering (OLTP)" Mycket stora datamängder"! Datalager innehåller historisk data som kan sträcka sig över en lång tidsperiod." Data lagras inte i normaliserade tabeller, utan i en form som bättre stöder aggregering på olika sätt." Frågorna som görs är ofta komplexa med många aggregatfunktioner och de hanterar mycket stora mängder data som man får genom att kombinera information från många tabeller." Datalager används främst för läsning, det uppdateras bara genom att sätta till ny data från driftsdatabaserna"! T.ex. en gång per dygn eller en gång i veckan." Man gör främst interaktiva ad-hoc frågor som användaren formulerar efter behov för att få reda på en viss sak." 7
Skillnader mellan OLTP och OLAP! De viktigaste skillnaderna mellan driftsdatabaser och databaser för analys sammanfattas i tabellen." OLTP" OLAP" Innehåller aktuell data" Innehåller detaljerad data" Data är dynamiskt, uppdateras kontinuerligt" Repetitiv processering, samma sorts transaktioner upprepas ofta" Hög genomströmning av transaktioner" Lätt att förutsäga databasens användning och belastning" Transaktionsdriven användning" Stöder den dagliga verksamheten" Stort antal dagliga användare" Innehåller historisk data" Innehåller både detaljerad data och summerad data" Data är statiskt, uppdateras bara genom att då och då sätta till ny data" Ad hoc processering, man gör unika frågor mot databasen" Medium eller låg genomströmning av transaktioner" Svårt att förutsäga användningen och belastningen" Analysdriven användning" Stöder strategiskt beslutsfattande" Litet antal användare" 8
Operationer på data! När man gör analys av data i ett datalager behöver man effektivt kunna göra följande typer av operationer:" Borra sig ner i datamängden (drill down)." Utgående från en sammanställning av data går man ner till en finare nivå av detaljer." Exempel: utgående från försäljning per månad undersöker man försäljningen per vecka eller dag." Rulla upp (roll up) eller konsolidera." Aggregerar från en finare indelning till en mera sammanfattande indelning av data." Exempel: utgående från data om försäljning av kavajer, byxor, skjortor och strumpor så summeras den här informationen till försäljning av herrkläder." Vrida och vända på data, också kallat pivotering (slicing, dicing eller pivoting)." Aggregera data på olika sätt för att undersöka kombinationer av olika faktorer." 9
Multidimensionell data! När man gör dataanalys i OLAP-tillämpningar lagrar man data i multidimensionell form i stället för i normaliserade tabeller." Gör det enklare att gruppera och aggregera värden över flera attribut." Det finns två typer av attribut:" Måttattribut, som mäter något värde och som man kan aggregera." Dimensionsattribut, som bestämmer hur man kan gruppera ihop data." Exempel: " Vi har data om försäljning av kläder i en butik i en tabell med schemat Försäljning (produkt, storlek, färg, antal) " Attributen produkt, storlek och färg är dimensionsattribut som man kan gruppera data enligt." Attributet antal är ett måttattribut som man kan aggregera." Multidimensionell data lagras i en relationsdatabas med ett schema som gör det bättre lämpat för analytisk processering." 10
Exempel! Man kan jämföra multidimensionell data med data i ett tabellkalkylprogram som t.ex. Excel." Tabellkalkylprogram är begränsade till två dimensioner, multidimensionell data kan ha flera dimensioner." Man analyserar multidimensionell data genom att gruppera och aggregera data för olika kombinationer av dimensionsattributen" Exempel: en korstabell av data från tabellen Försäljning för alla kombinationer av produkt och storlek." Värdena i tabellen har summerats ihop över alla färger (dvs. den summerat måttattributet antal över dimensionen färg). " Small Medium Large Totalt Kavaj 8 15 12 35 Byxor 6 10 18 34 Skjorta 9 21 15 45 Strumpor 22 25 18 65 Totalt 45 71 63 179 Tabellen innehåller också en summa över raderna, som ger antalet sålda produkter av varje typ, och en kolumnsumma som ger antalet sålda produkter för varje storlek, samt totala antalet sålda produkter." 11
Datakuber! Vi kan också ha multidimensionell data av tre eller flera dimensioner." En datakub är en generalisering av en korstabell till flera (3 eller flera) dimensioner." En korstabell kan fås som en vy av en datakuber genom att aggregera över någon dimension." Om vi summerar över alla färger får vi en liknande två-dimensionell tabell som på förra sidan. " 12
Datakuber i relationsdatabaser! En datakub lagras i en relationsdatabas så att varje cell i kuben blir en tuppel i en relationstabell." Kallas en faktatabell" Värdet all på ett attribut betecknar att vi har summerat på det attributet." Skapar också egna tabeller för att beskriva varje dimension." Kallas dimensionstabeller." Innehåller en rad för varje värde som kan förekomma." Varje värde ges en numerisk nyckel, en surrogatnyckel, som används i värdetabellen (t.ex. Kavaj=1, Skjorta=2, Byxor=3)." Kan också lagra andra attribut som beskriver dimensionerna (t.ex. tillverkare, material,...)." produkt! storlek! färg! antal! Kavaj" S" Svart" 3" Kavaj" M" Svart" 2" Kavaj" L" Grå" 1" Kavaj" all" all" 6" Skjorta" S" Svart" 4" Skjorta" L" Vit" 2" Skjorta" M" Blå" 1" Skjorta" M" Vit" 3" Skjorta" all" all" 10" Byxor" L" Svart" 2" Byxor" M" Blå" 1" Byxor" S" Grå" 2" Byxor" all" all" 5" 13
Stjärnschema för en datakub! En datakub beskrivs av ett schema för faktatabellen, samt ett schema för varje dimensionstabell." Faktatabellen refererar till dimensionstabellerna med en främmande nyckel." Lagrar ett enkelt numeriskt värde istället för ett långt produktnamn." Kallas en surrogatnyckel, och består av ett unikt numeriskt värde istället för en benämning." Ger ett stjärnformat diagram, med faktatabellen i centrum, omgiven av dimensionstabellerna." Scheman behöver inte vara normaliserade." Produkt id produktnamn tillverkare material Försäljning produkt_id storlek_id färg_id antal Storlek id kod Färg id färgnamn RGB-kod 14
Exempel! Vårt exempel i form av ett stjärnschema:" Produkt id! produktnamn! tillverkare! material! 1" Kavaj" Gant" Bomull" 2" Skjorta" Prada" Silke" 3" Byxor" Levis" Bomull" 4" Strumpor" Nike" Ylle" 5" Slips" Centertex" Silke" Färg Storlek id! färgnamn! RGB-kod! 1" vit" FFFFFF" id! kod! 2" gul" FFFF00" 1" S" 3" grå" B4B4B4" 2" M" 4" blå" 0000FF" 3" L" 5" röd" FF0000" 4" XL" 6" svart" 000000" Försäljning produkt_id! storlek_id! färg_id! antal! 1" 1" 6" 3" 1" 2" 6" 2" 1" 3" 3" 1" 2" 1" 6" 4" 2" 3" 1" 2" 2" 2" 4" 1" 2" 2" 1" 3" 3" 3" 6" 2" 3" 2" 4" 1" 3" 1" 3" 2" 15
Denormalisering! Faktatabellen lagras vanligtvis i normaliserad form (3NF eller BCNF)" Man tillåter dimensionstabellerna att vara onormaliserade, ofta i 2NF." Sökningar blir effektivare om man har all information om en dimension i en enda tabell." Behöver inte göra en join på flera tabeller för att få fram uppgifter om produkterna." Datalager används inte för transaktioner i den dagliga verksamheten, utan för dataanalys." Man gör främst sökningar i data, inte uppdateringar, så problemen med redundans och risk för inkonsistens vid uppdatering är mindre." Om man gör dimensionstabellerna normaliserade får man ett snöflingeschema." En dimension beskrivs inte av en en enda tabell, utan av flera tabeller." 16
SQL frågor på stjärnscheman! Vi kan formulera frågor mot stjärnschemat genom att gruppera och aggregera värden över de olika dimensionerna. " T.ex. en korstabell över antal sålda produkter indelad enligt storlek." select produkt.produktnamn, storlek.kod, sum(antal) as antal! from forsaljning, produkt, storlek! where forsaljning.produkt_id=produkt.id and! forsaljning.storlek_id=storlek.id! group by produkt_id, storlek_id;! +-------------+-----+-------+! produktnamn kod antal! +-------------+-----+-------+! Kavaj S 3! Kavaj M 2! Kavaj L 1! Skjorta S 4! Skjorta M 4! Skjorta L 2! Byxor S 2! Byxor M 1! Byxor L 2! +-------------+-----+-------+! 9 rows in set (0.00 sec)! 17
En annan exempelfråga! En korstabell över antal sålda produkter indelad enligt färg." Summerar värdena för olika storlekar." select produkt.produktnamn, farg.fargnamn, sum(antal) as antal! from forsaljning, produkt, farg! where forsaljning.produkt_id=produkt.id and! forsaljning.farg_id=farg.id! group by produkt_id, farg_id;! +-------------+----------+-------+! produktnamn fargnamn antal! +-------------+----------+-------+! Kavaj gra 1! Kavaj svart 5! Skjorta vit 5! Skjorta bla 1! Skjorta svart 4! Byxor gra 2! Byxor bla 1! Byxor svart 2! +-------------+----------+-------+! 8 rows in set (0.00 sec)! 18
Kub-operator! Operator cube genererar en datakub utgående från ett stjärnschema." Aggregerar måttattribut på alla kombinationer av de angivna dimensionerna." select produkt.produktnamn, storlek.kod, sum(antal) as antal! from forsaljning, produkt, storlek! where forsaljning.produkt_id=produkt.id and forsaljning.storlek_id=storlek.id! group by produkt_id, storlek_id with cube;! +-------------+-----+-------+! produktnamn kod antal! +-------------+------+-------+! Kavaj S 3! Kavaj M 2! Kavaj L 1! Kavaj null 6! Skjorta S 4! Skjorta M 4! Skjorta L 2! Skjorta null 10! Byxor S 2! Byxor M 1! Byxor L 2! Byxor null 5! null S 9! null M 7! null L 5! null null 21! 19
Kub-operator (forts)! Kub-operatorn gör gruppering på alla möjliga kombinationer av de angivna dimensionerna." Exempel: "select produkt, färg, storlek, sum(antal) "from försäljning "group by produkt, färg, storlek with cube;" Gör grupperingar och summering av attributet antal inom grupperna för alla kombinationer av de här tre dimensionerna:" (produkt, färg, storlek)" (produkt, färg, all)" (produkt, all, storlek)" (all, färg, storlek)" (produkt, all, all)" (all, färg, all)" (all, all, storlek)" (all, all, all)" Resultatet är en tabell som innehåller unionen av alla dessa grupperingar." 20
Rollup-operator! Rollup-operatorn gör aggregering över alla kombinationer av de dimensioner som används för gruppering." Inte över alla möjliga kombinationer av dimensioner, som cube-operatorn." MySQL stöder rollup men inte cube" mysql> select produkt.produktnamn, storlek.kod, sum(antal) as antal! from forsaljning, produkt, storlek! where forsaljning.produkt_id=produkt.id and forsaljning.storlek_id=storlek.id! group by produkt.produktnamn, storlek.kod with rollup;! +-------------+------+-------+! produktnamn kod antal! +-------------+------+-------+! Byxor L 2! Byxor M 1! Byxor S 2! Byxor NULL 5! Kavaj L 1! Kavaj M 2! Kavaj S 3! Kavaj NULL 6! Skjorta L 2! Skjorta M 4! Skjorta S 4! Skjorta NULL 10! NULL NULL 21! +-------------+------+-------+! 21
Kolumn-orienterade databaser! En alternativ lösning för effektiv data-analys i ett relationsdatabassystem är att använda en kolumn-orienterad databashanterare." Relationsdatabaser lagrar vanligtvis innehållet i tabeller radvis." Värden som hör till en rad i en tabell (dvs. en tupel) lagras fysiskt (på skivminne) som ett kontinuerligt block av data." För att aggregera över ett visst attribut måste man läsa ett värde från alla tabellrader." Det betyder att man måste läsa alla block." I en kolumn-orienterad databas lagras istället värdena i en kolumn som ett kontinuerligt block." För att aggregera över ett attribut räcker det att läsa ett enda block av data." Mycket mera effektivt för att göra aggregering av attributvärden." Lämpar sig därför mycket bättre för analytisk processering." Värdena i ett block är alla av samma typ, och samma värden kan förekomma ofta, så data kan också komprimeras effektivt." 22
Illustration! Tabell produkt! storlek! färg! antal! Kavaj" S" Svart" 3" Kavaj" M" Svart" 2" Skjorta" S" Svart" 4" Skjorta" L" Vit" 2" Byxor" M" Blå" 1" Byxor" S" Grå" 2" Rad-orienterad lagring Kavaj S Svart 3 Kavaj M Svart 2 Skjorta S Svart 4 Skjorta L Vit 2 Byxor M Blå 1 Byxor S Grå 2 Konsekutiva adresser Kolumn-orienterad lagring Kavaj Kavaj Skjorta Skjorta Byxor Byxor S M S L M S Svart Svart Svart Vit Blå Grå 3 2 4 2 1 2 23
Användning av kolumnorienterade databaser! Man kan formulera SQL-frågor på exakt samma sätt i rad- och kolumnorienterade databaser." Främsta skillnaden är att aggregering över alla värden i en kolumn är mycket effektiv i en kolumnorienterad databas." På motsvarande sätt är access till hela tabellrader mindre effektiv." Enda skillnaden är hur data fysiskt lagras." Den fysiska lagringen på skivminne sköts av lagringshanteraren." Användaren behöver inte vara medveten om hur data lagras fysiskt för att använda databasen. " Ett exempel på en kolumnorienterad databashanterare är InfiniDB" Kompatibel med MySQL" Fungerar också tillsammans med Amazon Web Service och Hadoop" 24