1. 程式人生 > >【資料倉庫】1.資料模型

【資料倉庫】1.資料模型

0x00 前言

翻出來之前零零散散寫的資料倉庫的內容,重新修正整理成一個系列,此為第一篇《資料模型》。

資料倉庫包含的內容很多,比如系統架構、建模和方法論。對應到具體工作中的話,它可以包含下面的這些內容:

  • 以Hadoop、Spark、Hive等元件為中心的資料架構體系

  • 排程系統、元資料系統、ETL系統這類輔助系統

  • 各種資料建模方法,如維度建模

我們暫且不管資料倉庫的範圍到底有多大,在資料倉庫體系中,資料模型的核心地位是不可替代的。因此,本篇會對經典的資料模型做一個大致的介紹,下一篇會專門分享一下資料模型中的維度建模。

0x01 經典資料倉庫模型

資料倉庫中有幾種經典的資料模型:正規化模型、維度模型、DataVault。個人感覺,很多模型的設計都在同構化,而且在工作中也不是單獨地用一種模型,會根據業務場景做出各種取捨。

一、正規化模型

正規化是資料庫邏輯模型設計的基本理論,一個關係模型可以從第一正規化到第五正規化進行無損分解。在資料倉庫的模型設計中目前一般採用第三正規化。一個符合第三正規化的關係具有以下三個條件 :

  • 資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值

  • 資料庫表中的每個例項或行必須可以被惟一地區分

  • 資料庫表中不包含已在其它表中已包含的非主關鍵字資訊。

我們提到的正規化模型由資料倉庫之父 Inmon 提倡 ,可以大致地按照OLTP設計中的3NF來理解,它在正規化理論上符合3NF,它與OLTP系統中的3NF的區別在於資料倉庫中的3NF上站在企業角度面向主題的抽象,而不是針對某個具體業務流程的實體物件關係抽象,它更多的是面向資料的整合和一致性治理。

關於正規化模型,在有些文章裡面也叫ER模型、實體模型,感覺很多描述都很接近,就不再區分了。

二、維度模型

維度模型是資料倉庫領域另一位大師 Ralph Kimball 所倡導,他的《The DataWarehouse Toolkit-The Complete Guide to Dimensona Modeling,中文名《資料倉庫工具箱》,是資料倉庫工程領域最流行的數倉建模經典。

按照書中所講,維度建模並不要求維度模型必須滿足第3正規化。資料庫中強調的 3NF 主要是為了消除冗餘。規範化的  3NF 將資料劃分為多個不同的實體,每個實體構成一個關係表。比如說訂單資料庫,開始可能是每個訂單中的一行表示一條記錄,到後來為了滿足 3NF會變成蜘蛛網狀圖,也許會包含上百個規範化表。而且對於 BI 查詢來講,規範化模型太複雜,使用者會難以理解和記錄這些模型的使用。 而維度建模解決了模式過分複雜的問題。

維度模型的典型代表是我們比較熟知的星形模型,以及在一些特殊場景下適用的雪花模型和星座模型。維度模型裡面有兩個十分重要的概念:事實表和維度表。

事實表:

發生在現實世界中的操作型事件,其所產生的可度量數值,儲存在事實表中。從最低的粒度級別來看,事實錶行對應一個度量事件,反之亦然。

維度表:

每個維度表都包含單一的主鍵列。維度表的主鍵可以作為與之關聯的任何事實表的外來鍵,當然,維度錶行的描述環境應與事實錶行完全對應。 維度表通常比較寬,是扁平型非規範表,包含大量的低粒度的文字屬性。

感覺解釋的不清楚?沒關係,後面專門有文字來討論維度建模。

三、Data Vault

Data Vault 是 Dan Linstedt 發起建立的一種模型方法論,現在應該叫做Data Vault 2.0了,它也是一套完整的資料倉庫理論,其中也有專門的一部分關於資料模型設計。

個人理解 Data Vault 模型 應該說是正規化模型和維度模型的一種混合,它相容了兩種模型的優勢。

Data Vault 通常可以分為三種類型,中心體,連結體和附屬體
它主要由:Hub(中心表)、Link(連結表)和 Satellite(衛星表) 三部分組成 。

中心表:

中心表主要是儲存一些日常用的一些業務關鍵碼,比如客戶號,發票號,流水號等等。它包括三個要素:

  • 代理鍵:這就是一些操作性的元件,包括客戶號,發票號等等

  • 裝載時間戳:這裡可以理解為ETL進行日載入的時間。

  • 資料來源:就是可以追索到的原系統,比如,CRM,ERP等

連結表:

是3NF的多對多關係的物理表現形式,它表現的是多個業務鍵之間的關係。它和正規化模型的最大區別是將關係作為一個獨立單元抽象出來,可以提升模型的擴充套件性。它主要包含以下特徵:

  • 代理鍵

  • 代理鍵間的對映關係

  • 裝載時間戳:這裡可以理解為ETL進行日載入的時間。

  • 資料來源:就是可以追索到的原系統,比如,CRM,ERP等

衛星表:

業務領域中的其餘資訊可能隨著時間而變化,所以衛星表必須有能力儲存新的或者變化的各種粒度的資料,他們將被儲存在衛星表內。衛星表是中心表的詳細描述內容,一箇中心表會有多個衛星表。它由中心表的代理鍵、裝載時間、來源型別、詳細的中心表描述資訊等組成。

0xFF 總結

目前市面上容易買到的資料倉庫領域的經典書有三本:《資料倉庫》、《資料倉庫工具箱》和《資料架構 大資料 資料倉庫以及Data Vault》,這三本書分別對應了前面提到的三種資料模型,個人感覺書有點些枯燥,而且不太容易理解,不過做過一段資料倉庫後再回頭學習一下這些書還是會有很多收穫的,參考價值很大。

關於資料模型,個人感覺在實際的場景中會有很多個性化的設計,有時候還不得不做一些反模式的設計。模型很重要,業務場景也很重要。

轉載