維度建模

若葉時代發表於2020-12-01

目錄

1 維度表

1.1 概念

1.2 維度分類

1.2.1 緩慢變化維

1.2.2 一致性維度

1.2.3 退化維度

1.2.4 漸變維度

1.3 常用的維度表

2 事實表

2.1 根據粒度劃分

2.2 根據用途劃分

3 維度建模模式

3.1 星型模式

3.2 雪花模式

3.3 星座模式


維度建模(dimensional modeling)是專門用於分析型資料庫、資料倉儲、資料集市建模的方法.

1 維度表

1.1 概念

維度:表示對資料進行分析時所用的一個量,比如你要分析產品銷售情況, 你可以選擇按類別來進行分析,或按區域來分析.再比如"昨天下午我在星巴克花費200元喝了一杯卡布奇諾".那麼以消費為主題進行分析,可從這段資訊中提取三個維度:時間維度(昨天下午),地點維度(星巴克), 商品維度(卡布奇諾).通常來說維度表資訊比較固定,且資料量小.

代理關鍵字:一般是指維度表中使用順序(序列)分配的整數值作為主鍵,用於維度表和事實表的連線.使用代理關鍵字,而不應該使用自然關鍵字或者智慧關鍵字.資料倉儲中的主鍵不應該是智慧的,要避免通過主鍵的值就可以瞭解一些業務資訊.

 

1.2 維度分類

1.2.1 緩慢變化維

在現實世界中,維度的屬性並不是靜態的,它會隨著時間的流失發生緩慢的變化.代理關鍵字可以用來處理緩慢變化維.

 

1.2.2 一致性維度

一致性維度的範圍是匯流排架構中的維度,即可能會在多個資料集市中都存在的維度.在後臺建立好的維度同步複製到各個資料集市,這樣所有資料集市的這部分維度都是完全相同的.建立新的資料集市時,需要在後臺進行一致性維度處理,根據情況來決定是否新增和修改一致性維度,然後同步複製到各個資料集市.這是不同資料集市維度保持一致的要點.

在同一個集市內,一致性維度的意思是兩個維度如果有關係,要麼就是完全一樣的,要麼就是一個維度在數學意義上是另一個維度的子集.例如建立月維度的話,月維度的各種描述必須與日期維度中的完全一致.

維度保持一致後,事實就可以儲存在各個資料集市中.雖然在物理上是獨立的,但在邏輯上由一致性維度使所有的資料集市是聯絡在一起,隨時可以進行交叉探察等操作,也就組成了資料倉儲.

 

1.2.3 退化維度

一般都是事務的編號,如訂單編號、發票編號等.這類編號需要儲存到事實表中,但是不需要對應的維度表.退化維度經常會和其他一些維度一起組合成事實表的主鍵,在分析中可以用來做分組使用.

 

1.2.4 漸變維度

大多數維度值是隨著時間改變的,有必要記錄維度的歷史變化資訊.漸變維(SCD)是一種在多維資料倉儲中實現維度歷史的技術,有三種不同的SCD技術.

(1) SCD1:通過更新維度記錄直接覆蓋已存在的值,它不維護記錄的歷史.一般用於修改錯誤的資料. 

(2) SCD2:在源資料發生變化時,給維度記錄建立一個新的"版本"記錄,從而維護維度歷史.SCD2不刪除、修改已存在的資料. 

(3) SCD3:通常用作保持維度記錄的幾個版本.它通過給某個資料單元增加多個列來維護歷史.SCD3可以有效維護有限的歷史,而不像SCD2那樣儲存全部歷史.SCD3 很少使用,只適用於資料的儲存空間不足並且使用者接受有限維度歷史的情況.

 

1.3 常用的維度表

(1) 時間維度表:描述星型模式中記錄的事件所發生的時間,具有所需的最低階別的時間粒度.

(2) 地理維度表:描述位置資訊的資料,如國家、省份、城市、區縣、郵編等.

(3) 產品維度表:描述產品及其屬性.

(4) 人員維度表:描述人員相關的資訊,如銷售人員、市場人員、開發人員等.

(5) 範圍維度表:描述分段資料的資訊,如高階、中級、低階等.

 

2 事實表

事實表存放用來描述業務的大量資料,包含了與各維度表相關聯的外來鍵.比如上面的消費例子,它的消費事實表結構示例如下:消費事實表:Prod_id(引用商品維度表), TimeKey(引用時間維度表), Place_id(引用地點維度表), Unit(銷售量).

以粒度作為化分依據,主要有三種事實表,分別是事務粒度事實表,週期快照粒度事實表和累積快照粒度事實表;從用途的不同來說,事實表可以分為三類,分別是原子事實表,聚集事實表和合並事實表.

 

2.1 根據粒度劃分

(1) 事務粒度事實表:記錄事務層面的事實,儲存的是最原子的資料,也稱"原子事實表".事務事實表中的資料在事務事件發生後產生,資料的粒度通常是每個事務一條記錄.一旦事務被提交,事實表資料被插入,資料就不再進行更改,其更新方式為增量更新.使用者可以通過事務事實表對事務行為進行特別詳細的分析.

(2) 週期快照粒度事實表:週期快照事實表以具有規律性的、可預見的時間間隔來記錄事實.週期快照事實表的日期維度通常是記錄時間段的終止日,記錄的事實是這個時間段內一些聚集事實值.通常比事務事實表的粒度要粗,是在事務事實表之上建立的聚集表.週期快照事實表的維度個數比事務事實表要少,但是記錄的事實要比事務事實表多.事實表的資料一旦插入即不能更改,其更新方式為增量更新.

(3) 累計快照事實表:累積快照事實表代表的是完全覆蓋一個事務或產品的生命週期的時間跨度,它通常具有多個日期欄位,用來記錄整個生命週期中的關鍵時間點.還會有一個用於指示最後更新日期的附加日期欄位.週期快照事實表記錄的確定的週期的資料,而累積快照事實表記錄不確定的週期的資料.

2.2 根據用途劃分

(1) 原子事實表:是儲存較細粒度資料的事實表.

(2) 聚集事實表:是原子事實表上的彙總資料,也稱為彙總事實表.

(3) 合併事實表:是指將位於不同事實表中處於相同粒度的事實進行組合建模而成的一種事實表,它的維度是兩個或多個事實表的相同維度的集合.合併事實表的粒度可以是原子粒度也可以是聚集粒度.

 

3 維度建模模式

3.1 星型模式

星形模式(Star Schema)是最常用的維度建模方式.星型模式是以事實表為中心,所有的維度表直接連線在事實表上,像星星一樣.

星形模式的維度建模由一個事實表和一組維表成,且具有以下特點:

        a. 維表只和事實表關聯,維表之間沒有關聯;

        b. 每個維表主鍵為單列,且該主鍵放置在事實表中,作為兩邊連線的外來鍵;

        c. 以事實表為核心,維表圍繞核心呈星形分佈;

 

3.2 雪花模式

雪花模式的維度表可以擁有其他維度表的,使用的是規範化資料,減少了資料冗餘.由於這種模型維護成本比較高,而且效能方面需要關聯多層維表,效能也比星型模型要低.

 

3.3 星座模式

星座模式是星型模式延伸而來,星型模式是基於一張事實表的,而星座模式是基於多張事實表的,而且共享維度資訊.

前面介紹的兩種維度建模方法都是多維表對應單事實表,但在很多時候維度空間內的事實表不止一個,而一個維表也可能被多個事實表用到.在業務發展後期,絕大部分維度建模都採用的是星座模式.

 

相關文章