實(shí)例剖析四種數(shù)據(jù)倉庫的建模方法
數(shù)據(jù)倉庫,這個(gè)幾乎是所有大數(shù)據(jù)開發(fā)面試必問的話題。比如數(shù)據(jù)倉庫的分層架構(gòu)?為什么需要數(shù)據(jù)倉庫建模?數(shù)據(jù)倉庫建模的原則是什么?結(jié)合業(yè)務(wù)舉例說明數(shù)據(jù)倉庫建模的步驟,以及注意事項(xiàng)?什么是緩慢變化維?維度該如何選擇建設(shè),原則是什么,主鍵如何設(shè)計(jì)等等?
一眾問題搞得小伙伴們死去活來,甚至工作好幾年的小伙伴都沒搞清楚過,尤其是大廠特別愛問這些問題。有些小伙伴甚至覺得這些都是形而上學(xué),不懂這些我不一樣搞了很多年開發(fā)?即使感興趣的買了一本厚厚的數(shù)據(jù)倉庫工具書也看不懂!那么實(shí)際數(shù)據(jù)倉庫建模到底是什么,開發(fā)人員該掌握哪些?
數(shù)據(jù)倉庫前世今生
來一起看個(gè)官方定義:數(shù)據(jù)倉庫,英文名稱為DataWarehouse,可簡寫為DW或DWH。數(shù)據(jù)倉庫,是為企業(yè)所有級(jí)別的決策制定過程,提供所有類型數(shù)據(jù)支持的戰(zhàn)略集合。它出于分析性報(bào)告和決策支持目的而創(chuàng)建。為需要業(yè)務(wù)智能的企業(yè),提供指導(dǎo)業(yè)務(wù)流程改進(jìn)、監(jiān)視時(shí)間、成本、質(zhì)量以及控制。
數(shù)據(jù)倉庫之父 Bill Inmon 在 1991 年出版的 Building the Data Warehouse 一書中首次提出了被廣為認(rèn)可的數(shù)據(jù)倉庫定義。Inmon 將數(shù)據(jù)倉庫描述為一個(gè)面向主題的、集成的、隨時(shí)間變化的、非易失的數(shù)據(jù)集合,用于支持管理者的決策過程。
簡單點(diǎn)來說,現(xiàn)實(shí)情況是一個(gè)企業(yè)有很多數(shù)據(jù)源,比如有的業(yè)務(wù)數(shù)據(jù)存放在Mysql,PG庫,有的存放在Oracle,有的日志存放在Ftp,Nginx服務(wù)器上等,有的是外部采集的爬蟲數(shù)據(jù)等等。那么對(duì)于企業(yè)來說沉淀了這么多數(shù)據(jù),如何將這些數(shù)據(jù)放到一起進(jìn)行數(shù)據(jù)融合,數(shù)據(jù)分析,給企業(yè)挖掘數(shù)據(jù)價(jià)值呢?這些不同數(shù)據(jù)源,不同數(shù)據(jù)存儲(chǔ)格式,不同的數(shù)據(jù)更新周期,如果讓你把企業(yè)這些數(shù)據(jù)融合分析,你怎么辦?
首先,你是不是要把這些不同數(shù)據(jù)按照統(tǒng)一的格式,一定的規(guī)范存儲(chǔ)到一起,然后在通過特定的工具做數(shù)據(jù)計(jì)算分析?那么對(duì)于企業(yè)來說,把企業(yè)各種數(shù)據(jù)源的數(shù)據(jù)放到一起存儲(chǔ)和計(jì)算的地方就叫數(shù)據(jù)倉庫(約定俗稱的叫法),所以本質(zhì)上數(shù)據(jù)倉庫上融合各個(gè)數(shù)據(jù)源,存儲(chǔ)加工數(shù)據(jù)的地方,早期大數(shù)據(jù)沒有發(fā)展起來的時(shí)候,企業(yè)數(shù)據(jù)倉庫的載體一般是Oracle,那時(shí)候主要給企業(yè)做BI報(bào)表(Business Intelligence商業(yè)智能)。
后來隨著企業(yè)數(shù)字化,互聯(lián)網(wǎng)的發(fā)展,企業(yè)收集到數(shù)據(jù)越來越多,發(fā)現(xiàn)原有的技術(shù)框架已經(jīng)滿足不了業(yè)務(wù)存儲(chǔ)和分析的需求了。于是乎就有了現(xiàn)在Hadoop生態(tài)為主的數(shù)倉倉庫。
數(shù)據(jù)倉庫建模的目的?
為什么要進(jìn)行數(shù)據(jù)倉庫建模?大數(shù)據(jù)的數(shù)倉建模是通過建模的方法更好的組織、存儲(chǔ)數(shù)據(jù),以便在性能、成本、效率和數(shù)據(jù)質(zhì)量之間找到最佳平衡點(diǎn)。一般主要從下面四點(diǎn)考慮:
- 訪問性能:能夠快速查詢所需的數(shù)據(jù),減少數(shù)據(jù)I/O。
- 數(shù)據(jù)成本:減少不必要的數(shù)據(jù)冗余,實(shí)現(xiàn)計(jì)算結(jié)果數(shù)據(jù)復(fù)用,降低大數(shù) 據(jù)系統(tǒng)中的存儲(chǔ)成本和計(jì)算成本。
- 使用效率:改善用戶應(yīng)用體驗(yàn),提高使用數(shù)據(jù)的效率。
- 數(shù)據(jù)質(zhì)量:改善數(shù)據(jù)統(tǒng)計(jì)口徑的不一致性,減少數(shù)據(jù)計(jì)算錯(cuò)誤 的可能性,提供高質(zhì)量的、一致的數(shù)據(jù)訪問平臺(tái)。
常見的數(shù)據(jù)建模方法
數(shù)據(jù)倉庫本質(zhì)是從數(shù)據(jù)庫衍生出來的,所以數(shù)據(jù)倉庫的建模也是不斷衍生發(fā)展的。從最早的借鑒數(shù)據(jù)庫的范式建模,到逐漸提出維度建模,Data Vault模型,Anchor模型等等,越往后建模的要求越高,越需滿足3NF,4NF等。但是對(duì)于數(shù)據(jù)倉庫來說,目前主流還是維度建模,會(huì)夾雜著范式建模。
數(shù)據(jù)倉庫建模方法論可分為:范式建模、維度建模、Data Vault模型、Anchor模型。
常見四種建模方法
1、范式建模(E-R模型)
將事物抽象為“實(shí)體”、“屬性”、“關(guān)系”來表示數(shù) 據(jù)關(guān)聯(lián)和事物描述;實(shí)體:Entity,關(guān)系:Relationship,這種對(duì)數(shù)據(jù)的抽象 建模通常被稱為ER實(shí)體關(guān)系模型
ER模型是數(shù)據(jù)庫設(shè)計(jì)的理論基礎(chǔ),當(dāng)前幾乎所有的OLTP系統(tǒng)設(shè)計(jì)都采用ER模型建模的方式,且該建模方法需要滿足3NF。Bill Inom提出的數(shù)倉理論,推薦采用ER關(guān)系模型進(jìn)行建模,BI架構(gòu)提出分層架構(gòu),數(shù)倉底層ods、dwd也多采用ER關(guān)系模型就行設(shè)計(jì)。
但是逐漸隨著企業(yè)數(shù)據(jù)的高增長,復(fù)雜化,數(shù)倉全部使用ER模型建模顯得越來越不合時(shí)宜。為什么呢,因?yàn)槠浒床烤桶嗟牟襟E,三范式等,不適合現(xiàn)代化復(fù)雜,多變的業(yè)務(wù)組織。
E-R模型建模的步驟(滿足3NF)如下:
- 抽象出主體 (教師,課程)
- 梳理主體之間的關(guān)系 (一個(gè)老師可以教多門課,一門課可以被多個(gè)老師教)
- 梳理主體的屬性 (教師:教師名稱,性別,學(xué)歷等)
- 畫出E-R關(guān)系圖
2、維度建模
維度建模,是數(shù)據(jù)倉庫大師Ralph Kimball提出的,是數(shù)據(jù)倉庫工程領(lǐng)域最流行的數(shù)倉建模經(jīng)典。
維度建模以分析決策的需求出發(fā)構(gòu)建模型,構(gòu)建的數(shù)據(jù)模型為分析需求服務(wù),因此它重點(diǎn)解決用戶如何更快速完成分析需求,同時(shí)還有較好的大規(guī)模復(fù)雜查詢的響應(yīng)性能。維度建模是面向分析的,為了提高查詢性能可以增加數(shù)據(jù)冗余,反規(guī)范化的設(shè)計(jì)技術(shù)。
Ralph Kimball提出對(duì)數(shù)據(jù)倉庫維度建模,并且將數(shù)據(jù)倉庫中的表劃分為事實(shí)表、維度表兩種類型。
1)事實(shí)表
在ER模型中抽象出了有實(shí)體、關(guān)系、屬性三種類別,在現(xiàn)實(shí)世界中,每一個(gè)操作型事件,基本都是發(fā)生在實(shí)體之間的,伴隨著這種操作事件的發(fā)生,會(huì)產(chǎn)生可度量的值,而這個(gè)過程就產(chǎn)生了一個(gè)事實(shí)表,存儲(chǔ)了每一個(gè)可度量的事件。
以電商行業(yè)為例:電商場景:一次購買事件,涉及主體包括客戶、商品、商家,產(chǎn)生的可度量值 包括商品數(shù)量、金額、件數(shù)等。
事實(shí)表根據(jù)粒度的角色劃分不同,可分為事務(wù)事實(shí)表、周期快照事實(shí)表、累積快照事實(shí)表。注意:這里需要值得注意的是,在事實(shí)表的設(shè)計(jì)時(shí),一定要注意一個(gè)事實(shí)表只能有一個(gè)粒度,不能將不同粒度的事實(shí)建立在同一張事實(shí)表中。
- 事務(wù)事實(shí)表,用于承載事務(wù)數(shù)據(jù),通常粒度比較低,它是面向事務(wù)的,其粒度是每一行對(duì)應(yīng)一個(gè)事務(wù),它是最細(xì)粒度的事實(shí)表,例如產(chǎn)品交易事務(wù)事實(shí)、ATM交易事務(wù)事實(shí)。
- 周期快照事實(shí)表,按照一定的時(shí)間周期間隔(每天,每月)來捕捉業(yè)務(wù)活動(dòng)的執(zhí)行情況,一旦裝入事實(shí)表就不會(huì)再去更新,它是事務(wù)事實(shí)表的補(bǔ)充。用來記錄有規(guī)律的、固定時(shí)間間隔的業(yè)務(wù)累計(jì)數(shù)據(jù),通常粒度比較高,例如賬戶月平均余額事實(shí)表。
- 累積快照事實(shí)表,用來記錄具有時(shí)間跨度的業(yè)務(wù)處理過程的整個(gè)過程的信息,每個(gè)生命周期一行,通常這類事實(shí)表比較少見。
2)維度表
維度,顧名思義,業(yè)務(wù)過程的發(fā)生或分析角度。比如從顏色、尺寸的角度來比較手機(jī)的外觀,從cpu、內(nèi)存等較比比較手機(jī)性能維。維度表一般為單一主鍵,在ER模型中,實(shí)體為客觀存在的事物,會(huì)帶有自己的 描述性屬性,屬性一般為文本性、描述性的,這些描述被稱為維度。
比如商品,單一主鍵:商品ID,屬性包括產(chǎn)地、顏色、材質(zhì)、尺寸、單價(jià)等, 但并非屬性一定是文本,比如單價(jià)、尺寸,均為數(shù)值型描述性的,日常主要的維度抽象包括:時(shí)間維度表、地理區(qū)域維度表等。
案例:某電商平臺(tái),經(jīng)常需要對(duì)訂單進(jìn)行分析,以某寶的購物訂單為例,以維度建 模的方式設(shè)計(jì)該模型
涉及到事實(shí)表為訂單表、訂單明細(xì)表,維度包括商品維度、用戶維度、商家維度、區(qū)域維 度、時(shí)間維度。
- 商品維度:商品ID、商品名稱、商品種類、單價(jià)、產(chǎn)地等。
- 用戶維度:用戶ID、姓名、性別、年齡、常住地、職業(yè)、學(xué)歷等。
- 時(shí)間維度:日期ID、日期、周幾、上/中/下旬、是否周末、是否假期等圖片。
維度分為:
① 退化維度(DegenerateDimension)
在維度類型中,有一種重要的維度稱作為退化維度,亦維度退化一說。這種維度指的是直接把一些簡單的維度放在事實(shí)表中。退化維度是維度建模領(lǐng)域中的一個(gè)非常重要的概念,它對(duì)理解維度建模有著非常重要的作用,退化維度一般在分析中可以用來做分組使用。
② 緩慢變化維(Slowly Changing Dimensions)
維度的屬性并不是始終不變的,它會(huì)隨著時(shí)間的流逝發(fā)生緩慢的變化,這種隨時(shí)間發(fā)生變化的維度我們一般稱之為緩慢變化維(SCD)。比如員工表中的部門維度,員工的所在部門有可能兩年后調(diào)整一次。
3)維度建模模型的分類
維度建模按數(shù)據(jù)組織類型劃分可分為星型模型、雪花模型、星座模型。
① 星型模型
星型模型主要是維表和事實(shí)表,以事實(shí)表為中心,所有維度直接關(guān)聯(lián)在事實(shí)表上,呈星型分布。
② 雪花模型
雪花模型,在星型模型的基礎(chǔ)上,維度表上又關(guān)聯(lián)了其他維度表。這種模型維護(hù)成本高,性能方面也較差,所以一般不建議使用。尤其是基于hadoop體系構(gòu)建數(shù)倉,減少join就是減少shuffle,性能差距會(huì)很大。
尖叫提示:所以由上可以看出:
- 星型模型和雪花模型主要區(qū)別就是對(duì)維度表的拆分。
- 對(duì)于雪花模型,維度表的涉及更加規(guī)范,一般符合3NF,有效降低數(shù)據(jù)冗余,維度表之間不會(huì)相互關(guān)聯(lián)。
- 星型模型,一般采用降維的操作,反規(guī)范化,不符合3NF,利用冗余來避免模型過于復(fù)雜,提高易用性和分析效率,效率相對(duì)較高。
③ 星座模型
星座模型,是對(duì)星型模型的擴(kuò)展延伸,多張事實(shí)表共享維度表。數(shù)倉模型建設(shè)后期,大部分維度建模都是星座模型。
4)維度建模步驟
維度建模步驟:選擇業(yè)務(wù)過程->聲明粒度->確定維度->確定事實(shí)。旨在重點(diǎn)解決數(shù)據(jù)粒度、維度設(shè)計(jì)和事實(shí)表設(shè)計(jì)問題。
聲明粒度,為業(yè)務(wù)最小活動(dòng)單元或不同維度組合。以共同粒度從多個(gè)組織業(yè)務(wù)過程合并度量的事實(shí)表稱為合并事實(shí)表,需要注意的是,來自多個(gè)業(yè)務(wù)過程的事實(shí)合并到合并事實(shí)表時(shí),它們必須具有同樣等級(jí)的粒度。
3、DataVault模型
Data Vault是Dan Linstedt發(fā)起創(chuàng)建的一種模型方法論,Data Vault是在ER模型的基礎(chǔ)上衍生而來,模型設(shè)計(jì)的初衷是有效的組織基礎(chǔ)數(shù)據(jù)層,使之易擴(kuò)展、靈活的應(yīng)對(duì)業(yè)務(wù)的變化,同時(shí)強(qiáng)調(diào)歷史性、可追溯性和原子性,不要求對(duì)數(shù)據(jù)進(jìn)行過度的一致性處理。同時(shí)設(shè)計(jì)的出發(fā)點(diǎn)也是為了實(shí)現(xiàn)數(shù)據(jù)的整合,并非為數(shù)據(jù)決策分析直接使用。
Data Vault模型是一種中心輻射式模型,其設(shè)計(jì)重點(diǎn)圍繞著業(yè)務(wù)鍵的集成模式。這些業(yè)務(wù)鍵是存儲(chǔ)在多個(gè)系統(tǒng)中的、針對(duì)各種信息的鍵,用于定位和唯一標(biāo)識(shí)記錄或數(shù)據(jù)。
Data Vault模型包含三種基本結(jié)構(gòu) :
- 中心表-Hub :唯一業(yè)務(wù)鍵的列表,唯一標(biāo)識(shí)企業(yè)實(shí)際業(yè)務(wù),企業(yè)的業(yè)務(wù)主體集合。
- 鏈接表-Link:表示中心表之間的關(guān)系,通過鏈接表串聯(lián)整個(gè)企業(yè)的業(yè)務(wù)關(guān)聯(lián)關(guān)系。
- 衛(wèi)星表- Satellite:歷史的描述性數(shù)據(jù),數(shù)據(jù)倉庫中數(shù)據(jù)的真正載體。
1)中心表-Hub
2)鏈接表-Link
3)衛(wèi)星表- Satellite
4)Data Vault模型建模流程
- 梳理所有主要實(shí)體
- 將有入邊的實(shí)體定義為中心表
- 將沒有入邊切僅有一個(gè)出邊的表定義為中心表
- 源苦衷沒有入邊且有兩條或以上出邊的表定義為連接表
- 將外鍵關(guān)系定義為鏈接表
尖叫提示:Hub想像成人體的骨架,那么Link就是連接骨架的韌帶組織, 而satelite就是骨架上的血肉。Data Vault是對(duì)ER模型更近一步的規(guī)范化,由于對(duì)數(shù)據(jù)的拆解和更偏向于基礎(chǔ)數(shù)據(jù)組織,在處理分析類場景時(shí)相對(duì)復(fù)雜, 適合數(shù)倉低層構(gòu)建,目前實(shí)際應(yīng)用場景較少。
4、Anchor模型
Anchor是對(duì)Data Vault模型做了更近一步的規(guī)范會(huì)處理,初衷是為了 設(shè)計(jì)高度可擴(kuò)展的模型,核心思想是所有的擴(kuò)張只添加而不修改,于 是設(shè)計(jì)出的模型基本變成了k-v結(jié)構(gòu)的模型,模型范式達(dá)到了6NF。
由于過度規(guī)范化,使用中牽涉到太多的join操作,目前木有實(shí)際案例,僅作了解。
四種模型總結(jié)
以上為四種基本的建模方法,當(dāng)前主流建模方法為:ER模型、維度模型。
1)ER模型常用于OLTP數(shù)據(jù)庫建模,應(yīng)用到構(gòu)建數(shù)倉時(shí)更偏重?cái)?shù)據(jù)整合,站在企業(yè)整體考慮,將各個(gè)系統(tǒng)的數(shù)據(jù)按相似性一致性、合并處理,為數(shù)據(jù)分析、決策服務(wù),但并不便于直接用來支持分析。
缺陷:需要全面梳理企業(yè)所有的業(yè)務(wù)和數(shù)據(jù)流,周期長,人員要求高。
2)維度建模是面向分析場景而生,針對(duì)分析場景構(gòu)建數(shù)倉模型;重點(diǎn)關(guān)注快速、靈活的解決分析需求,同時(shí)能夠提供大規(guī)模數(shù)據(jù)的快速響應(yīng)性能。針對(duì)性強(qiáng),主要應(yīng)用于數(shù)據(jù)倉庫構(gòu)建和OLAP引擎低層數(shù)據(jù)模型。
優(yōu)點(diǎn):不需要完整的梳理企業(yè)業(yè)務(wù)流程和數(shù)據(jù),實(shí)施周期根據(jù)主題邊界而定,容易快速實(shí)現(xiàn)demo。
3)數(shù)倉模型的選擇是靈活的,不局限于某一種模型方法。
4)數(shù)倉模型的設(shè)計(jì)也是靈活的,以實(shí)際需求場景為導(dǎo)向。
5)模型設(shè)計(jì)要兼顧靈活性、可擴(kuò)展,而對(duì)終端用戶透明性。
6)模型設(shè)計(jì)要考慮技術(shù)可靠性和實(shí)現(xiàn)成本。
常用建模工具
建模工具,一般企業(yè)以Erwin、powerdesigner、visio,甚至Excel等為主。也有些企業(yè)自行研發(fā)工具,或使用阿里等成熟套裝組件產(chǎn)品。