在GeeksforGeeks上看到了幾篇關於數據倉庫架構、維度數據建模的文章,進行翻譯整理並加入了一些自己的理解,輸出了這篇文章。
一、數據倉庫架構
數據倉庫是將不同來源的數據在統一的模式下組織起來的異構集合。構建數據倉庫有兩種方法:自頂向下和自底向上。
1. 自頂向下的方法
自頂向下的架構如下圖:
圖中各主件的作用如下:
-
External Sources
外部源是不管收集的數據是何種類型的數據源。數據可以是結構化的、半結構化的和非結構化的。結構化的數據,比如:關係型數據庫中的表等;半結構化的數據,比如:Json串、XML文件等;非結構化的數據,比如:圖片、音頻、視頻等。 -
Stage Area
由於從外部數據源抽取的數據沒有特定的格式,因此需要對這些數據進行處理,以將其加載到數據倉庫中。爲此,建議使用ETL工具:E(Extracted): 從外部數據源抽取數據。
T(Transform): 將抽取的數據轉換成標準格式。
L(Load): 將標準格式的數據加載進數據倉庫。 -
Data-warehouse
在自頂向下的方法中,數據倉庫存儲最原始的數據。 -
Data Marts
數據集市也是存儲組件中的一部分。它存儲由不同主題組織起來的數據。 -
Data Mining
數據挖掘就是對數據倉庫中的大量數據進行分析處理。利用數據挖掘算法找出數據倉庫中隱藏的數據價值。
自頂向下的方法是被數據倉庫之父Bill Inmon定義的——數據倉庫作爲公司的中央倉庫,而數據集市從完整的數據倉庫創建而來。
自頂向下方法的優點:
- 由於數據集市是從數據倉庫創建而來,因此提供了數據集市的一致維度視圖。
- 這種模型可以很好的應對業務數據的變化。大公司會更喜歡採用這種方法。
- 從數據倉庫創建數據集市比較容易。
自頂向下方法的缺點
- 設計和維護的成本比較高。
2.自底向上
自底向上架構如下圖:
整個數據的流轉過程:
- 首先,數據會從外部數據源被抽取過來。
- 數據經過ETL之後,不再進入數據倉庫,而是被加載進數據集市。每個數據集市針對的是不同的業務主題,並且可以直接提供報表功能。
- 將數據集市整合進數據倉庫。
自下而上的方法是Ralph Kimball(數據倉庫和BI領域的權威專家)提出的——首先創建數據集市,併爲分析提供單個業務視圖,在創建完整的數據集市之後再創建數據倉庫。
自底向上方法的優點
- 由於是先創建數據集市,所以會快速生成報表。
- 數據倉庫可以根據數據集市進行擴展。
- 設計成本比較低。
自底向上方法的缺點
- 由於維度視圖的侷限性,造成這種方法沒有對數據的一個全局把控。
二、維度數據建模
維度建模的概念是由Ralph Kimball提出的,是許多OLAP(Online Analytical Processing,聯機分析處理)系統使用的數據模型。維度建模有兩個比較常用的建模模型:星型模型和雪花模型,模型由事實表和維度表組成。
維度建模步驟如下圖:
- Identifying the business objective
第一步就是確定業務對象,比如,銷售(Sales)、人力資源(HR)、促銷(Marketing)等。業務對象的選擇直接影響着之後所用數據的質量,是數據建模中非常重要的一步。 - Identifying Granularity
確定要存儲到表中的數據的粒度。 - Indentify Dimensions and ites Attributes
維度用來對數據倉庫中的事實數據進行分類。比如,數據維度可能會是時間中的年、月、日,也可能是地域中的省、市、區縣等等。 - Indentifying the Fact
確認事實表,比如,商品價格、尺寸等。 - Building of Schema
構建模型,比較常用的模型有:星型模型和雪花模型。
三、星型模型和雪花模型
1. 星型模型
星型模型時數倉建模中較爲常用的模型,它包含一個或多個事實表,以及連接到事實表上的維度表。星型模型相較於雪花模型在查詢處理方面是更爲高效的。
星型模型之所以被稱爲星型,是因爲它的物理模型就像是一個恆星的形狀,中心是一個事實表,事實表上連着維度表。如下圖:
在上圖中,SALES就是一個事實表,其他的都是維度表,並各自都有屬於自己的屬性。事實表中存儲業務流程中的定量數據;維度表中存儲事實數據的描述性特徵。事實數據,比如圖中的:銷售價格、數量、重量等。
星型模型的優點:
- 關聯查詢比較簡單,沒有過於複雜的關聯關係。
- 由於一些維度表已經預先進行了合併,因此不需要過多的join操作,那麼關聯查詢效率就會更高。
星型模型的缺點:
- 數據並不像3NF那樣規範化。
- 由於一些維度表已經預先進行了合併,就會造成數據的冗餘存儲,佔用了更多的空間。
2. 雪花模型
雪花模型可以認爲是星型模型的變體。雪花模型在星型模型的基礎上,對維度表進行了更規範化的拆分,就會促使某些維度表拆分出更細分的維度表。看下圖:
圖中就把Employee表拆分成了Employee和Department兩張維度表,Department維度表可以提供一個部門更詳細的信息,比如名字和位置。還有也把Customer維度表拆分成了Customer和City兩張維度表,City維度表有關於一個城市的詳細信息,比如城市名、郵政編碼、所屬省和國家。
雪花模型和星型模型的主要區別在於,雪花模型的維度表是規範化存儲的,減少了冗餘。這樣做的好處是易於維護和節省存儲空間,缺點就是需要更多的連接來執行查詢,性能較差。
通常情況下,不建議使用雪花模型,因爲它會增加維度模型的複雜度,可理解性差,而且需要連接更多的表來滿足查詢,性能低。
最後總結一下雪花模型有哪些優缺點。
優點:
- 提供了規範化的數據,數據完整性高。
- 由於數據時高度規範化的,因此佔用的存儲空間較小。
缺點:
- 高度結構化的數據,在另一方面也增加了模型的複雜度。
- 規範化的數據,在查詢的時候會有更多的join連接,就會導致較差的性能。