清晰易懂!用5W2H方法進(jìn)行維度建模,一篇搞定!
編輯導(dǎo)語(yǔ):數(shù)據(jù)模型是數(shù)據(jù)組織和存儲(chǔ)的方法,模型的好壞,決定了數(shù)倉(cāng)能支撐企業(yè)業(yè)務(wù)多久。而維度建模是數(shù)據(jù)倉(cāng)庫(kù)建設(shè)中的一種數(shù)據(jù)建模方法。這篇文章詳細(xì)地為大家講解數(shù)倉(cāng)界的泰斗Kimball的維度建模,這種建模方式被廣泛應(yīng)用在阿里滴滴等公司。感興趣的朋友一起來(lái)看看吧。
一、維度模型介紹
Kimball大師的模型流程是:從需求→模型→數(shù)據(jù),且整個(gè)流程是自下而上的。
這種結(jié)構(gòu)也被成為數(shù)據(jù)集市總線架構(gòu)( Data Mart Bus Architecture )或者數(shù)據(jù)倉(cāng)庫(kù)總線架構(gòu) (DataWarehouse Bus Architecture)。
Kimball模型最核心的部分在于維度建模,理解好這部分,對(duì)Kimball模型的理解基本上可以事半功倍。本文重點(diǎn)來(lái)介紹下維度建模。
二、應(yīng)用環(huán)境
1. 定義
維度建模是一種數(shù)據(jù)結(jié)構(gòu)技術(shù),主要目的為了幫助用戶進(jìn)行大規(guī)模且高效的數(shù)據(jù)查詢。
2. 適用
上邊的定義說(shuō)明了維度建模的目的是優(yōu)化數(shù)據(jù)庫(kù)以更快地查詢數(shù)據(jù)。
維度模型旨在讀取、匯總、分析數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)值信息,例如:想看匯總值、分位值等等,這種特性更加適合數(shù)倉(cāng)環(huán)境。而事務(wù)數(shù)據(jù)庫(kù)(OLTP)中,不適合這種設(shè)計(jì)方式,因?yàn)槭聞?wù)數(shù)據(jù)庫(kù)有如下特點(diǎn):
- 適合快速更新和插入數(shù)據(jù)
- 鎖定一定需要被最小化
- 只適合一小部分?jǐn)?shù)據(jù)查詢
- 需要被標(biāo)準(zhǔn)化
我們?cè)賮?lái)看下數(shù)倉(cāng)環(huán)境的特點(diǎn):
- 適合更加快速的查詢數(shù)據(jù)
- 鎖定操作是非必須的
- 適合大量數(shù)據(jù)的查詢
- 插入和更新是非必要的
所以維度建模需要在數(shù)倉(cāng)環(huán)境中被應(yīng)用。
三、名詞解釋
在介紹整體建模流程之前,有些名詞需要給大家詳細(xì)介紹下,這樣下面的內(nèi)容閱讀起來(lái)會(huì)更加通暢一點(diǎn):
1. 關(guān)于事實(shí)
經(jīng)常也被成為度量,事實(shí)是可以體現(xiàn)業(yè)務(wù)流程中真實(shí)表現(xiàn)的數(shù)據(jù)。
例如:對(duì)于銷(xiāo)售業(yè)務(wù)流程,最核心的體現(xiàn)是季度銷(xiāo)售金額;對(duì)于招聘流程,最核心的體現(xiàn)是招聘人數(shù);對(duì)于技術(shù)團(tuán)隊(duì),最核心的體現(xiàn)是開(kāi)發(fā)了多少功能。
特性:不同的事實(shí)反映出不同的業(yè)務(wù)性質(zhì);事實(shí)之間相互獨(dú)立;事實(shí)是業(yè)務(wù)量化的表示。通常情況下維度要比事實(shí)更多。
2. 關(guān)于維度
維度是經(jīng)常被大家說(shuō)道的一個(gè)詞,其實(shí)維度更多的是一個(gè)視角,是從不同的角度去觀察和分析事實(shí)的一個(gè)方法。誰(shuí)在那干啥?
例如:以銷(xiāo)售流程為例,需要分析的維度有:
- 誰(shuí)買(mǎi)了商品——客戶名稱(chēng)
- 在哪買(mǎi)了商品——售賣(mài)地點(diǎn)
- 買(mǎi)了啥商品——商品名稱(chēng)
3. 關(guān)于屬性
屬性就是維度建模中維度的特征,我們以地理位置維度為例,他的屬性就是:省份、城市、區(qū)域等等。
4. 關(guān)于事實(shí)表
維度建模中的核心表,星型結(jié)構(gòu)中的中心位置表,該表包含了以下因素:
- 事實(shí)表
- 維度表的主鍵(事實(shí)表的外鍵)
5. 關(guān)于維度表
包含事實(shí)的維度,通過(guò)外鍵和事實(shí)表進(jìn)行關(guān)聯(lián)。
特點(diǎn):維度表可以為事實(shí)表進(jìn)行特征描述,維度表可以包含一個(gè)或多個(gè)層次關(guān)系。
四、建模流程
1. 描述業(yè)務(wù)過(guò)程(為啥做Why)
從實(shí)際的業(yè)務(wù)過(guò)程中提取分析維度,并且把業(yè)務(wù)過(guò)程轉(zhuǎn)化為事實(shí)。
確定所需覆蓋的實(shí)際業(yè)務(wù)流程。
根據(jù)組織的數(shù)據(jù)分析需求,可能是營(yíng)銷(xiāo)、銷(xiāo)售、人力資源等組織的訴求。
業(yè)務(wù)流程的選擇還取決于該流程可被應(yīng)用的質(zhì)量尚可的數(shù)據(jù)。這是數(shù)據(jù)建模過(guò)程中最重要的一步,如果在這一步出錯(cuò),整個(gè)維度建模必將以失敗告終,所以第一步一定要謹(jǐn)慎且細(xì)致的對(duì)業(yè)務(wù)進(jìn)行描繪。
要描述業(yè)務(wù)流程,可以通過(guò)語(yǔ)言進(jìn)行描述,也可以使用基本的業(yè)務(wù)流程建模符號(hào) (BPMN) 或統(tǒng)一建模語(yǔ)言 (UML)進(jìn)行業(yè)務(wù)描述。
比如商城業(yè)務(wù),整個(gè)商城流程分為商家端,用戶端,平臺(tái)端,運(yùn)營(yíng)需求是總訂單量,訂單人數(shù),及用戶的購(gòu)買(mǎi)情況等。
2. 聲明粒度(做到啥程度How much)
粒度可以用來(lái)確定事實(shí)表中行表示什么。
例如:一個(gè)用戶有一個(gè)身份證、一個(gè)籍貫、多個(gè)手機(jī)號(hào)、多個(gè)銀行卡,此時(shí)與用戶粒度相同的粒度屬性為身份證粒度、籍貫粒度,因?yàn)橛脩艉蜕矸葑C、籍貫都是一一對(duì)應(yīng)的。而對(duì)于手機(jī)粒度、銀行卡粒度是比用戶更加細(xì)致的粒度,因?yàn)榇嬖谝粚?duì)多的關(guān)系。
同一事實(shí)表中,必須有相同的粒度。原子粒度是最低級(jí)別的數(shù)據(jù)粒度,原子粒度能夠承受無(wú)法預(yù)期的用戶查詢。通過(guò)原子粒度進(jìn)行上卷,可以滿足各類(lèi)需求。
在此階段設(shè)計(jì)之前,你需要思考下幾個(gè)問(wèn)題:
- 是按月、每周、每天還是每小時(shí)存儲(chǔ)產(chǎn)品銷(xiāo)售信息?這個(gè)問(wèn)題取決于高管要求的報(bào)告的性質(zhì)。
- 上個(gè)問(wèn)題中的選擇將對(duì)數(shù)據(jù)庫(kù)大小有什么影響?
3. 標(biāo)識(shí)維度(是啥在哪何時(shí)What Where When)
維度是事實(shí)表的基礎(chǔ),維度是通過(guò)不同的視角去看數(shù)據(jù),把一堆數(shù)據(jù)進(jìn)行分類(lèi),從而進(jìn)行細(xì)分對(duì)比。例如:時(shí)間維度中可分天、周、月、年這樣的維度。用戶也可以分新生期、成熟期、衰退期、流失期各個(gè)生命周期這樣的維度。
細(xì)化一下這個(gè)例子: 管理者希望每天了解不同地點(diǎn)各類(lèi)產(chǎn)品的銷(xiāo)售額,此時(shí)維度、屬性、層次結(jié)構(gòu)可以進(jìn)行如下分解:
- 維度:產(chǎn)品、地點(diǎn)和時(shí)間
- 屬性:(以產(chǎn)品為例)產(chǎn)品編號(hào)(外鍵)、名稱(chēng)、類(lèi)型、規(guī)格
- 層次:(以位置為例)區(qū)域、省份、城市、區(qū)縣、街道
4. 標(biāo)識(shí)事實(shí)(解釋是啥What)
事實(shí)表示用來(lái)度量的,基本上都以數(shù)值來(lái)表示,這一步驟是用來(lái)標(biāo)識(shí)事實(shí)表中的每一行。此步驟與系統(tǒng)的業(yè)務(wù)用戶相關(guān)聯(lián),因?yàn)檫@是他們?cè)L問(wèn)存儲(chǔ)在數(shù)據(jù)倉(cāng)庫(kù)中,大多數(shù)事實(shí)表行都是數(shù)值,如價(jià)格等等等。
舉個(gè)例子:管理者希望每天了解不同地點(diǎn)特定產(chǎn)品的銷(xiāo)售額。
這里的事實(shí)表示通過(guò)產(chǎn)品分類(lèi)、銷(xiāo)售時(shí)間、銷(xiāo)售位置等得到的銷(xiāo)售額總和。
一般的維度模型講解在這里會(huì)劃上尾聲,但其實(shí)維度建模還隱藏了第五步:
5. 構(gòu)建架構(gòu)
在此步驟中,只有這一步完成其實(shí)才真正的實(shí)現(xiàn)了維度建模。模式只不過(guò)是數(shù)據(jù)庫(kù)結(jié)構(gòu)(表的排列)。有兩種流較為通用的架構(gòu):
(1)星型架構(gòu)
星型架構(gòu)很容易設(shè)計(jì)。稱(chēng)為星型模式是因?yàn)闃?gòu)建的形狀圖類(lèi)似于星形,點(diǎn)從中心向外輻射。星的中心是事實(shí)表,星的點(diǎn)是維度表(樣圖可見(jiàn)本文第3部分)。
這里要特別說(shuō)明以下星型模式中的事實(shí)表是第三范式,而維度表是非規(guī)范化的。
(2)雪花架構(gòu)
雪花模式是星型模式的擴(kuò)展。在雪花模式中,每個(gè)維度都被規(guī)范化并連接到更多維度表。所以從結(jié)構(gòu)上來(lái)看,花花模式更為復(fù)雜一點(diǎn)。
小結(jié):星型表和雪花表的對(duì)比
五、建模實(shí)例
場(chǎng)景:小明在2021.11.11 晚上12點(diǎn)買(mǎi)了3件棉服。他用支付寶的方式進(jìn)行支付,并且在2021.11.13收到了書(shū)。
拆解:由于最近天冷了(為啥Why),小明(誰(shuí) Who)2021.11.11 晚上12點(diǎn)(何時(shí) When)花費(fèi)3千(多少How much)在淘寶(在哪Where)買(mǎi)了3件棉服(啥 What)。他用支付寶(如何 How)的方式進(jìn)行支付,并且在2021.11.13收到了書(shū)。
1. 描述業(yè)務(wù)過(guò)程(為啥做Why)
由于天冷,需要保暖。
2. 聲明粒度(做到啥程度How much)
花費(fèi)3k買(mǎi)。
3. 標(biāo)識(shí)維度(是啥在哪何時(shí)What Where When)
在淘寶上于2021.11.11 晚上12點(diǎn)買(mǎi)了3件棉服。
4. 標(biāo)識(shí)事實(shí)(解釋是啥how)
用支付寶進(jìn)行購(gòu)買(mǎi)。
六、維度改變
當(dāng)維度改變時(shí),將會(huì)發(fā)生啥?
舉個(gè)場(chǎng)景來(lái)說(shuō),上海的ABC商店將會(huì)從華東區(qū)域劃分為華南區(qū)域,如果管理者想看劃分前后的對(duì)比情況應(yīng)該如何看呢?
1. 改變維度的方式一
- 用新的信息去重寫(xiě)已知維度;
- 優(yōu)點(diǎn):方便實(shí)施;
- 缺點(diǎn):無(wú)法去看之前的表現(xiàn);
- 實(shí)施之后,所有歷史的數(shù)據(jù)信息將看不到。
2. 改變維度的方式二
- 保留所有歷史的維度信息;
- 有點(diǎn):更加方便的看出歷史的情況;
- 缺點(diǎn):實(shí)施起來(lái)復(fù)雜性較高;
- 實(shí)施之后,更容易看到在華東區(qū)域的歷史數(shù)據(jù)。
3. 改變維度的方式三
- 保留所有歷史的信息,并且新增一個(gè)值;
- 有點(diǎn):同時(shí)提供歷史數(shù)據(jù)和新的數(shù)據(jù)情況;
- 缺點(diǎn):歷史數(shù)據(jù)表現(xiàn)將會(huì)受限制;
- 實(shí)施之后,變化前后的數(shù)據(jù)都將可以看到,但是查看歷史數(shù)據(jù)的情況將會(huì)受限制。
本文由 @業(yè)務(wù)數(shù)智化 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載
題圖來(lái)自 pexels,基于CC0協(xié)議
- 目前還沒(méi)評(píng)論,等你發(fā)揮!