【總結】維度數據建模過程及舉例

數據倉庫2.png

1. 摘要

本文介紹數據倉庫中維度數據建模的過程描述,并舉一個示例以加深對相關概念的理解。

2. 內容

2.1 維度模型定義

維度模型是數據倉庫領域大師Ralph Kimall所倡導,他的《數據倉庫工具箱》,是數據倉庫工程領域最流行的數倉建模經典。維度建模以分析決策的需求出發構建模型,構建的數據模型為分析需求服務,因此它重點解決用戶如何更快速完成分析需求,同時還有較好的大規模復雜查詢的響應性能。

2.2 維度建模過程

第一步:選擇業務過程

1、通過對業務需求以及可用數據源的綜合考慮,確定對哪種業務過程開展建模工作

2、建立的第一個維度模型應該是一個最有影響的模型——它應該對最緊迫的業務問題作出回答,并且對數據的抽取來說是最容易的。

第二步:定義粒度

注:粒度是指數據倉庫的數據單位中保存數據的細化或綜合程度的級別,細化程度越高,粒度就越小

1、應該先優先考慮為業務處理獲取最有原子性的信息而開發維度模型。原子型數據是所收集的最詳細的信息,這樣的數據不能再做更進一步的細分。

2、數據倉庫幾乎總是要求在每個維度可能得到的最低粒度上對數據進行表示的原因,并不是因為查詢想看到每個低層次的行,而是因為查詢希望以很精確的方式對細節知識進行抽取。

第三步:選定維度

一個經過仔細考慮的粒度定義確定了事實表的基本維度特性。同時,經常也可能向事實表的基本粒度加入更多的維度,而這些附加的維度會在基本維度的每個組合值方面自然地取得唯一的值。如果附加的維度因為導致生成另外的事實行而違背了這個基本的粒度定義,那么必須對粒度定義進行修改以適應這個維度的情景。

第四步:確定事實

確定將哪些事實放到事實表中。粒度聲明有助于穩定相關的考慮。事實必須與粒度吻合。在考慮可能存在的事實時,可能會發現仍然需要調整早期的粒度聲明和維度選擇

2.3 維度建模的基本要素

維度建模中有一些比較重要的概念,理解了這些概念,基本也就理解了什么是維度建模。

1. 事實表

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

額,看了這一句,其實是不太容易理解到底什么是事實表的。

比如一次購買行為我們就可以理解為是一個事實,下面我們上示例。

圖中的訂單表就是一個事實表,你可以理解他就是在現實中發生的一次操作型事件,我們每完成一個訂單,就會在訂單中增加一條記錄。

我們可以回過頭再看一下事實表的特征,在維度表里沒有存放實際的內容,他是一堆主鍵的集合,這些ID分別能對應到維度表中的一條記錄。

2. 維度表

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

我們的圖中的用戶表、商家表、時間表這些都屬于維度表,這些表都有一個唯一的主鍵,然后在表中存放了詳細的數據信息。

2.4 維度建模過程舉例

下面我們將以電商為例,詳細講一下維度建模的建模方式,并舉例如果使用這個模型(這點還是很重要的)。

一、業務場景

假設我們在一家電商網站工作,比如某寶、某東。我們需要對這里業務進行建模。下面我們分析幾點業務場景:

  1. 電商網站中最典型的場景就是用戶的購買行為。
  2. 一次購買行為的發起需要有這幾個個體的參與:購買者、商家、商品、購買時間、訂單金額。
  3. 一個用戶可以發起很多次購買的動作。

好,基于這幾點,我們來設計我們的模型。

二、模型設計

下面就是我們設計出來的數據模型,和之前的基本一樣,只不過是換成了英文,主要是為了后面寫sql的時候來用。

我就不再解釋每個表的作用了,現在只說一下為什么要這樣設計。

首先,我們想一下,如果我們不這樣設計的話,我們一般會怎么做?

如果是我,我會設計下面這張表。你信不信,我能列出來50個字段!其實我個人認為怎么設計這種表都有其合理性,我們不論對錯,單說一下兩者的優缺點。

先說我們的維度模型:

  1. 數據冗余小(因為很多具體的信息都存在相應的維度表中了,比如用戶信息就只有一份)
  2. 結構清晰(表結構一目了然)
  3. 便于做OLAP分析(數據分析用起來會很開心)
  4. 增加使用成本,比如查詢時要關聯多張表
  5. 數據不一致,比如用戶發起購買行為的時候的數據,和我們維度表里面存放的數據不一致

再說我們這張大款表的優缺點:

  1. 業務直觀,在做業務的時候,這種表特別方便,直接能對到業務中。
  2. 使用方便,寫sql的時候很方便。
  3. 數據冗余巨大,真的很大,在幾億的用戶規模下,他的訂單行為會很恐怖
  4. 粒度僵硬,什么都寫死了,這張表的可復用性太低。

三、使用示例

數據模型的建立必須要為更好的應用來服務,下面我先舉一個例子,來切實地感受一下來怎么用我們的模型。

需求:求出2016年在帝都的男性用戶購買的LV品牌商品的總價格。

實現

  SELECT
    SUM(order.money)
  FROM
    order,
    product,
    date,
    address,
    user,
  WHERE
    date.year = '2016'
    AND user.sex = 'male'
    AND address.province = '帝都'
    AND product.name = 'LV'

四、總結

維度建模是一種十分優秀的建模方式,他有很多的優點,但是我們在實際工作中也很難完全按照它的方式來實現,都會有所取舍,比如說為了業務我們還是會需要一些寬表,有時候還會有很多的數據冗余。

3. 參考

  1. 《Hadoop構建數據倉庫實踐》

  2. 漫談數據倉庫之維度建模
    https://zhuanlan.zhihu.com/p/27426819

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,250評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,923評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,041評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,475評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,253評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,801評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,882評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,023評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,530評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,494評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,639評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,177評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,890評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,289評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,552評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,242評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,626評論 2 370

推薦閱讀更多精彩內容