漫谈数据仓库之维度建模
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
0x00 前言
下面的內(nèi)容,是筆者在學(xué)習(xí)和工作中的一些總結(jié),其中概念性的內(nèi)容大多來(lái)自書(shū)中,實(shí)踐性的內(nèi)容大多來(lái)自自己的工作和個(gè)人理解。由于資歷尚淺,難免會(huì)有很多錯(cuò)誤,望批評(píng)指正!
概述
數(shù)據(jù)倉(cāng)庫(kù)包含的內(nèi)容很多,它可以包括架構(gòu)、建模和方法論。對(duì)應(yīng)到具體工作中的話,它可以包含下面的這些內(nèi)容:
- 以Hadoop、Spark、Hive等組建為中心的數(shù)據(jù)架構(gòu)體系。
- 各種數(shù)據(jù)建模方法,如維度建模。
- 調(diào)度系統(tǒng)、元數(shù)據(jù)系統(tǒng)、ETL系統(tǒng)、可視化系統(tǒng)這類(lèi)輔助系統(tǒng)。
我們暫且不管數(shù)據(jù)倉(cāng)庫(kù)的范圍到底有多大,在數(shù)據(jù)倉(cāng)庫(kù)體系中,數(shù)據(jù)模型的核心地位是不可替代的。
因此,下面的將詳細(xì)地闡述數(shù)據(jù)建模中的典型代表:維度建模,對(duì)它的的相關(guān)理論以及實(shí)際使用做深入的分析。
文章結(jié)構(gòu)
本文將按照下面的順序進(jìn)行闡述:
0x01 經(jīng)典數(shù)據(jù)倉(cāng)庫(kù)模型
下面將分別介紹四種數(shù)據(jù)倉(cāng)庫(kù)模型,其中前三種模型分別對(duì)應(yīng)了三本書(shū):《數(shù)據(jù)倉(cāng)庫(kù)》、《數(shù)據(jù)倉(cāng)庫(kù)工具箱》和《數(shù)據(jù)架構(gòu) 大數(shù)據(jù) 數(shù)據(jù)倉(cāng)庫(kù)以及Data Vault》,這三本書(shū)都有中文版,非常巧的是,我只有三本數(shù)據(jù)倉(cāng)庫(kù)的書(shū),正好對(duì)應(yīng)了這三種理論。
Anchor模型我并不是特別熟悉,放在這里以供參考。
一、實(shí)體關(guān)系(ER)模型
數(shù)據(jù)倉(cāng)庫(kù)之父Immon的方法從全企業(yè)的高度設(shè)計(jì)一個(gè)3NF模型,用實(shí)體加關(guān)系描述的數(shù)據(jù)模型描述企業(yè)業(yè)務(wù)架構(gòu),在范式理論上符合3NF,它與OLTP系統(tǒng)中的3NF的區(qū)別,在于數(shù)據(jù)倉(cāng)庫(kù)中的3NF上站在企業(yè)角度面向主題的抽象,而不是針對(duì)某個(gè)具體業(yè)務(wù)流程的實(shí)體對(duì)象關(guān)系抽象,它更多的是面向數(shù)據(jù)的整合和一致性治理,正如Immon所希望達(dá)到的:“single version of the truth”。
但是要采用此方法進(jìn)行構(gòu)建,也有其挑戰(zhàn):
二、維度模型
維度模型是數(shù)據(jù)倉(cāng)庫(kù)領(lǐng)域另一位大師Ralph Kimall所倡導(dǎo),他的《The DataWarehouse Toolkit-The Complete Guide to Dimensona Modeling,中文名《數(shù)據(jù)倉(cāng)庫(kù)工具箱》,是數(shù)據(jù)倉(cāng)庫(kù)工程領(lǐng)域最流行的數(shù)倉(cāng)建模經(jīng)典。維度建模以分析決策的需求出發(fā)構(gòu)建模型,構(gòu)建的數(shù)據(jù)模型為分析需求服務(wù),因此它重點(diǎn)解決用戶如何更快速完成分析需求,同時(shí)還有較好的大規(guī)模復(fù)雜查詢的響應(yīng)性能。
典型的代表是我們比較熟知的星形模型,以及在一些特殊場(chǎng)景下適用的雪花模型。
三、DataVault
DataVault是Dan Linstedt發(fā)起創(chuàng)建的一種模型方法論,它是在ER關(guān)系模型上的衍生,同時(shí)設(shè)計(jì)的出發(fā)點(diǎn)也是為了實(shí)現(xiàn)數(shù)據(jù)的整合,并非為數(shù)據(jù)決策分析直接使用。它強(qiáng)調(diào)建立一個(gè)可審計(jì)的基礎(chǔ)數(shù)據(jù)層,也就是強(qiáng)調(diào)數(shù)據(jù)的歷史性可追溯性和原子性,而不要求對(duì)數(shù)據(jù)進(jìn)行過(guò)度的一致性處理和整合;同時(shí)也基于主題概念將企業(yè)數(shù)據(jù)進(jìn)行結(jié)構(gòu)化組織,并引入了更進(jìn)一步的范式處理來(lái)優(yōu)化模型應(yīng)對(duì)源系統(tǒng)變更的擴(kuò)展性。
它主要由:Hub(關(guān)鍵核心業(yè)務(wù)實(shí)體)、Link(關(guān)系)、Satellite(實(shí)體屬性)?三部分組成 。
四、Anchor模型
Anchor模型是由Lars. R?nnb?ck設(shè)計(jì)的,初衷是設(shè)計(jì)一個(gè)高度可擴(kuò)展的模型,核心思想:所有的擴(kuò)展只是添加而不是修改,因此它將模型規(guī)范到6NF,基本變成了K-V結(jié)構(gòu)模型。
Anchor模型由:Anchors 、Attributes 、Ties 、Knots?組成,相關(guān)細(xì)節(jié)可以參考《AnchorModeling-Agile Information Modeling in Evolving Data Environments》
0x02 維度建模
一、什么是維度建模
維度模型是數(shù)據(jù)倉(cāng)庫(kù)領(lǐng)域大師Ralph Kimall所倡導(dǎo),他的《數(shù)據(jù)倉(cāng)庫(kù)工具箱》,是數(shù)據(jù)倉(cāng)庫(kù)工程領(lǐng)域最流行的數(shù)倉(cāng)建模經(jīng)典。維度建模以分析決策的需求出發(fā)構(gòu)建模型,構(gòu)建的數(shù)據(jù)模型為分析需求服務(wù),因此它重點(diǎn)解決用戶如何更快速完成分析需求,同時(shí)還有較好的大規(guī)模復(fù)雜查詢的響應(yīng)性能。
我們換一種方式來(lái)解釋什么是維度建模。學(xué)過(guò)數(shù)據(jù)庫(kù)的童鞋應(yīng)該都知道星型模型,星型模型就是我們一種典型的維度模型。我們?cè)谶M(jìn)行維度建模的時(shí)候會(huì)建一張事實(shí)表,這個(gè)事實(shí)表就是星型模型的中心,然后會(huì)有一堆維度表,這些維度表就是向外發(fā)散的星星。那么什么是事實(shí)表、什么又是維度表嗎,下面會(huì)專(zhuān)門(mén)來(lái)解釋。
二、維度建模的基本要素
維度建模中有一些比較重要的概念,理解了這些概念,基本也就理解了什么是維度建模。
1. 事實(shí)表
發(fā)生在現(xiàn)實(shí)世界中的操作型事件,其所產(chǎn)生的可度量數(shù)值,存儲(chǔ)在事實(shí)表中。從最低的粒度級(jí)別來(lái)看,事實(shí)表行對(duì)應(yīng)一個(gè)度量事件,反之亦然。
額,看了這一句,其實(shí)是不太容易理解到底什么是事實(shí)表的。
比如一次購(gòu)買(mǎi)行為我們就可以理解為是一個(gè)事實(shí),下面我們上示例。
圖中的訂單表就是一個(gè)事實(shí)表,你可以理解他就是在現(xiàn)實(shí)中發(fā)生的一次操作型事件,我們每完成一個(gè)訂單,就會(huì)在訂單中增加一條記錄。
我們可以回過(guò)頭再看一下事實(shí)表的特征,在維度表里沒(méi)有存放實(shí)際的內(nèi)容,他是一堆主鍵的集合,這些ID分別能對(duì)應(yīng)到維度表中的一條記錄。
2. 維度表
每個(gè)維度表都包含單一的主鍵列。維度表的主鍵可以作為與之關(guān)聯(lián)的任何事實(shí)表的外鍵,當(dāng)然,維度表行的描述環(huán)境應(yīng)與事實(shí)表行完全對(duì)應(yīng)。 維度表通常比較寬,是扁平型非規(guī)范表,包含大量的低粒度的文本屬性。
我們的圖中的用戶表、商家表、時(shí)間表這些都屬于維度表,這些表都有一個(gè)唯一的主鍵,然后在表中存放了詳細(xì)的數(shù)據(jù)信息。
0x03 實(shí)踐
下面我們將以電商為例,詳細(xì)講一下維度建模的建模方式,并舉例如果使用這個(gè)模型(這點(diǎn)還是很重要的)。
一、業(yè)務(wù)場(chǎng)景
假設(shè)我們?cè)谝患译娚叹W(wǎng)站工作,比如某寶、某東。我們需要對(duì)這里業(yè)務(wù)進(jìn)行建模。下面我們分析幾點(diǎn)業(yè)務(wù)場(chǎng)景:
好,基于這幾點(diǎn),我們來(lái)設(shè)計(jì)我們的模型。
二、模型設(shè)計(jì)
下面就是我們?cè)O(shè)計(jì)出來(lái)的數(shù)據(jù)模型,和之前的基本一樣,只不過(guò)是換成了英文,主要是為了后面寫(xiě)sql的時(shí)候來(lái)用。
我就不再解釋每個(gè)表的作用了,現(xiàn)在只說(shuō)一下為什么要這樣設(shè)計(jì)。
首先,我們想一下,如果我們不這樣設(shè)計(jì)的話,我們一般會(huì)怎么做?
如果是我,我會(huì)設(shè)計(jì)下面這張表。你信不信,我能列出來(lái)50個(gè)字段!其實(shí)我個(gè)人認(rèn)為怎么設(shè)計(jì)這種表都有其合理性,我們不論對(duì)錯(cuò),單說(shuō)一下兩者的優(yōu)缺點(diǎn)。
先說(shuō)我們的維度模型:
再說(shuō)我們這張大款表的優(yōu)缺點(diǎn):
三、使用示例
數(shù)據(jù)模型的建立必須要為更好的應(yīng)用來(lái)服務(wù),下面我先舉一個(gè)例子,來(lái)切實(shí)地感受一下來(lái)怎么用我們的模型。
需求:求出2016年在帝都的男性用戶購(gòu)買(mǎi)的LV品牌商品的總價(jià)格。
實(shí)現(xiàn):
SELECTSUM(order.money)FROMorder,product,date,address,user,WHEREdate.year = '2016'AND user.sex = 'male'AND address.province = '帝都'AND product.name = 'LV'0xFF 總結(jié)
維度建模是一種十分優(yōu)秀的建模方式,他有很多的優(yōu)點(diǎn),但是我們?cè)趯?shí)際工作中也很難完全按照它的方式來(lái)實(shí)現(xiàn),都會(huì)有所取舍,比如說(shuō)為了業(yè)務(wù)我們還是會(huì)需要一些寬表,有時(shí)候還會(huì)有很多的數(shù)據(jù)冗余。
Refer:
[1]?數(shù)據(jù)倉(cāng)庫(kù)建模方法初步
http://www.cnblogs.com/hadoopdev/p/4217834.html
[2]?數(shù)據(jù)倉(cāng)庫(kù)3NF基礎(chǔ)理論和實(shí)例
http://www.cnblogs.com/hadoopdev/p/4235509.html
[3]?三個(gè)例子,讓你看懂?dāng)?shù)據(jù)倉(cāng)庫(kù)多維數(shù)據(jù)模型的設(shè)計(jì)
http://www.cnblogs.com/hadoopdev/p/4235257.html
[4]?淺談數(shù)據(jù)倉(cāng)庫(kù)建設(shè)中的數(shù)據(jù)建模方法
https://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0803zhousb/
[5]?數(shù)據(jù)倉(cāng)庫(kù)系列-為什么要維度建模
http://www.cognoschina.net/Article/121113
[6]?《數(shù)據(jù)倉(cāng)庫(kù)工具箱:維度建模權(quán)威指南》讀書(shū)心得
http://bit.ly/2rHZH37
[7]?數(shù)據(jù)庫(kù)設(shè)計(jì)三大范式
http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html
[8]?一看就懂的數(shù)據(jù)庫(kù)范式介紹(1NF,2NF,3NF,BC NF,4NF,5NF)
http://josh-persistence.iteye.com/blog/2200644
[9]?數(shù)據(jù)倉(cāng)庫(kù)學(xué)習(xí)與實(shí)踐(二)- 如何做好數(shù)據(jù)模型設(shè)計(jì)
http://bit.ly/2sFmg85
[10]?阿里巴巴大數(shù)據(jù)實(shí)踐之?dāng)?shù)據(jù)建模
http://geek.csdn.net/news/detail/228527
[11]?數(shù)據(jù)倉(cāng)庫(kù)系列--建模
http://blog.sina.com.cn/s/blog_a7a5bfd90102x6zx.html
[12]?程序員筆記|3個(gè)問(wèn)題帶你入門(mén)數(shù)據(jù)建模
http://bit.ly/2w9NkNB
轉(zhuǎn)載于:https://my.oschina.net/leejun2005/blog/69550
總結(jié)
以上是生活随笔為你收集整理的漫谈数据仓库之维度建模的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 5g会带来什么新兴产业(有什么优势和特点
- 下一篇: 运维从业人员是否需要考证?