1.數據倉庫建模的目的?
爲什麼要進行數據倉庫建模?大數據的數倉建模是通過建模的方法更好的組織、存儲數據,以便在 性能、成本、效率和數據質量之間找到最佳平衡點。一般主要從下面四點考慮
- 訪問性能:能夠快速查詢所需的數據,減少數據I/O
- 數據成本:減少不必要的數據冗餘,實現計算結果數據複用,降低大數 據系統中的存儲成本和計算成本
- 使用效率:改善用戶應用體驗,提高使用數據的效率
- 數據質量:改善數據統計口徑的不一致性,減少數據計算錯誤 的可能性,提供高質量的、一致的數據訪問平臺
2.常見的數據建模方法
數據倉庫本質是從數據庫衍生出來的,所以數據倉庫的建模也是不斷衍生髮展的。從最早的借鑑數據庫的範式建模,到逐漸提出維度建模,Data Vault模型,Anchor模型等等,越往後建模的要求越高,越需滿足3NF,4NF等。但是對於數據倉庫來說,目前主流還是維度建模,會夾雜着範式建模。
數據倉庫建模方法論可分爲:範式建模、維度建模、Data Vault模型、Anchor模型。
3.常見四種建模方法的建模步驟與演示
3.1.範式建模(E-R模型)
- 抽象出主體 (教師,課程)
- 梳理主體之間的關係 (一個老師可以教多門課,一門課可以被多個老師教)
- 梳理主體的屬性 (教師:教師名稱,性別,學歷等)
- 畫出E-R關係圖
3.2.維度建模
維度建模,是數據倉庫大師Ralph Kimball提出的,是數據倉庫工程領域最流行的數倉建模經典。
維度建模以分析決策的需求出發構建模型,構建的數據模型爲分析需求服務,因此它重點解決用戶如何更快速完成分析需求,同時還有較好的大規模複雜查詢的響應性能。維度建模是面向分析的,爲了提高查詢性能可以增加數據冗餘,反規範化的設計技術。
Ralph Kimball提出對數據倉庫維度建模,並且將數據倉庫中的表劃分爲事實表、維度表兩種類型。
3.2.1.事實表
在ER模型中抽象出了有實體、關係、屬性三種類別,在現實世界中,每一個操作型事件,基本都是發生在實體之間的,伴隨着這種操作事件的發生,會產生可度量的值,而這個過程就產生了一個事實表,存儲了每一個可度量的事件。
以電商行業爲例:電商場景:一次購買事件,涉及主體包括客戶、商品、商家,產生的可度量值 包括商品數量、金額、件數等
事實表根據粒度的角色劃分不同,可分爲事務事實表、週期快照事實表、累積快照事實表。注意:這裏需要值得注意的是,在事實表的設計時,一定要注意一個事實表只能有一個粒度,不能將不同粒度的事實建立在同一張事實表中。
- 事務事實表,用於承載事務數據,通常粒度比較低,它是面向事務的,其粒度是每一行對應一個事務,它是最細粒度的事實表,例如產品交易事務事實、ATM交易事務事實。
- 週期快照事實表,按照一定的時間週期間隔(每天,每月)來捕捉業務活動的執行情況,一旦裝入事實表就不會再去更新,它是事務事實表的補充。用來記錄有規律的、固定時間間隔的業務累計數據,通常粒度比較高,例如賬戶月平均餘額事實表。
- 累積快照事實表,用來記錄具有時間跨度的業務處理過程的整個過程的信息,每個生命週期一行,通常這類事實表比較少見。
3.2.2.維度表
涉及到事實表爲訂單表、訂單明細表,維度包括商品維度、用戶維度、商家維度、區域維 度、時間維度
商品維度:商品ID、商品名稱、商品種類、單價、產地等
用戶維度:用戶ID、姓名、性別、年齡、常住地、職業、學歷等
時間維度:日期ID、日期、周幾、上/中/下旬、是否週末、是否假期等
維度分爲:
(1)退化維度(DegenerateDimension)
在維度類型中,有一種重要的維度稱作爲退化維度,亦維度退化一說。這種維度指的是直接把一些簡單的維度放在事實表中。退化維度是維度建模領域中的一個非常重要的概念,它對理解維度建模有着非常重要的作用,退化維度一般在分析中可以用來做分組使用。
(2)緩慢變化維(Slowly Changing Dimensions)
維度的屬性並不是始終不變的,它會隨着時間的流逝發生緩慢的變化,這種隨時間發生變化的維度我們一般稱之爲緩慢變化維(SCD)。比如員工表中的部門維度,員工的所在部門有可能兩年後調整一次。
3.2.3.維度建模模型的分類
星型模型主要是維表和事實表,以事實表爲中心,所有維度直接關聯在事實表上,呈星型分佈。
(2)雪花模型
雪花模型,在星型模型的基礎上,維度表上又關聯了其他維度表。這種模型維護成本高,性能方面也較差,所以一般不建議使用。尤其是基於hadoop體系構建數倉,減少join就是減少shuffle,性能差距會很大。
- 星型模型和雪花模型主要區別就是對維度表的拆分
- 對於雪花模型,維度表的涉及更加規範,一般符合3NF,有效降低數據冗餘,維度表之間不會相互關聯,但是
- 而星型模型,一般採用降維的操作,反規範化,不符合3NF,利用冗餘來避免模型過於複雜,提高易用性和分析效率,效率相對較高。
(3)星座模型
星座模型,是對星型模型的擴展延伸,多張事實表共享維度表。數倉模型建設後期,大部分維度建模都是星座模型。
3.2.4. 維度建模步驟
維度建模步驟:選擇業務過程->聲明粒度->確定維度->確定事實。旨在重點解決數據粒度、維度設計和事實表設計問題。
聲明粒度,爲業務最小活動單元或不同維度組合。以共同粒度從多個組織業務過程合併度量的事實表稱爲合併事實表,需要注意的是,來自多個業務過程的事實合併到合併事實表時,它們必須具有同樣等級的粒度。
3.3 DataVault模型
Data Vault是Dan Linstedt發起創建的一種模型方法論,Data Vault是在ER模型的基礎上衍生而來,模型設計的初衷是有效的組織基礎數據層,使之易擴展、靈活的應對業務的變化,同時強調歷史性、可追溯性和原子性,不要求對數據進行過度的一致性處理。同時設計的出發點也是爲了實現數據的整合,並非爲數據決策分析直接使用。
Data Vault模型是一種中心輻射式模型,其設計重點圍繞着業務鍵的集成模式。這些業務鍵是存儲在多個系統中的、針對各種信息的鍵,用 於定位和唯一標識記錄或數據
Data Vault模型包含三種基本結構 :
- 中心表-Hub :唯一業務鍵的列表,唯一標識企業實際業務,企業的業務主體集合
- 鏈接表-Link: 表示中心表之間的關係,通過鏈接表串聯整個企業的業務關聯關係
- 衛星表- Satellite: 歷史的描述性數據,數據倉庫中數據的真正載體
3.3.1 中心表-Hub
3.3.2 鏈接表-Link
3.3.3 衛星表- Satellite
3.3.4 Data Vault模型建模流程
- 梳理所有主要實體
- 將有入邊的實體定義爲中心表
- 將沒有入邊切僅有一個出邊的表定義爲中心表
- 源苦衷沒有入邊且有兩條或以上出邊的表定義爲連接表
- 將外鍵關係定義爲鏈接表
3.4Anchor模型
- Anchor是對Data Vault模型做了更近一步的規範會處理,初衷是爲了 設計高度可擴展的模型,核心思想是所有的擴張只添加而不修改,於 是設計出的模型基本變成了k-v結構的模型,模型範式達到了6NF
- 由於過度規範化,使用中牽涉到太多的join操作,目前木有實際案例,僅作了解
4.四種模型總結
- ER模型常用於OLTP數據庫建模,應用到構建數倉時更偏重數據整合, 站在企業整體考慮,將各個系統的數據按相似性一致性、合併處理,爲 數據分析、決策服務,但並不便於直接用來支持分析。缺陷:需要全面梳理企業所有的業務和數據流,週期長,人員要求高。
- 維度建模是面向分析場景而生,針對分析場景構建數倉模型;重點關注快 速、靈活的解決分析需求,同時能夠提供大規模數據的快速響應性能。針對性 強,主要應用於數據倉庫構建和OLAP引擎低層數據模型。優點:不需要完整的梳理企業業務流程和數據,實施週期根據主題邊界而定,容易快速實現demo
- 數倉模型的選擇是靈活的,不侷限於某一種模型方法
- 數倉模型的設計也是靈活的,以實際需求場景爲導向
- 模型設計要兼顧靈活性、可擴展,而對終端用戶透明性
-
模型設計要考慮技術可靠性和實現成本
5.常用建模工具
建模工具,一般企業以Erwin、powerdesigner、visio,甚至Excel等爲主。也有些企業自行研發工具,或使用阿里等成熟套裝組件產品。