數(shù)倉|大數(shù)據(jù)時代,維度建模過時了嗎?

20世紀(jì)80年代末期,數(shù)據(jù)倉庫技術(shù)興起。自Ralph Kimball 于1996 年首次出版The Data Warehouse Toolkit(Wiley)一書以來,數(shù)據(jù)倉庫和商業(yè)智能(Data Warehousing and Business Intelligence, DW/BI)行業(yè)漸趨成熟幢痘。Kimball提出了數(shù)據(jù)倉庫的建模技術(shù)--維度建模(dimensional modelling),該方法是在實踐觀察的基礎(chǔ)上開發(fā)的。雖然它不基于任何理論家破,但是在實踐中卻非常成功颜说。維度建模被視為設(shè)計數(shù)據(jù)倉庫和數(shù)據(jù)集市的主要方法,對數(shù)據(jù)建模和數(shù)據(jù)庫設(shè)計學(xué)科有著重要的影響汰聋。時至今日脑沿,維度建模依然是構(gòu)建數(shù)倉首選的數(shù)據(jù)建模方法,但是隨著技術(shù)的發(fā)展马僻,獲取超強的存儲與計算能力的成本會變得很廉價庄拇。這在無形之中對傳統(tǒng)的維度建模方法產(chǎn)生了一定的影響。本文將討論以下內(nèi)容:

  • 維度建模的概念
  • 維度建模的優(yōu)缺點
  • 為什么星型模型依然有用
  • 數(shù)據(jù)建模發(fā)生了哪些變化

規(guī)則是用來被打破的

First learn the rules, then break them

維度建模的概念

事實表

事實表作為數(shù)據(jù)倉庫維度建模的核心,緊緊圍繞著業(yè)務(wù)過程來設(shè)計措近,通過獲取描述業(yè)務(wù)過程的度量來表達業(yè)務(wù)過程溶弟,包含了引用的維度和與業(yè)務(wù)過程有關(guān)的度量。

事實表中一條記錄所表達的業(yè)務(wù)細(xì)節(jié)程度被稱為粒度瞭郑。通常粒度可以通過兩種方式來表述:一種是維度屬性組合所表示的細(xì)節(jié)程度辜御;一種是所表示的具體業(yè)務(wù)含義。

作為度量業(yè)務(wù)過程的事實屈张,一般為整型或浮點型的十進制數(shù)值擒权,有可加性、半可加性和不可加性三種類型阁谆√汲可加性事實是指可以按照與事實表關(guān)聯(lián)的任意維度進行匯總。半可加性事實只能按照特定維度匯總场绿,不能對所有維度匯總,比如庫存可以按照地點和商品進行匯總焰盗,而按時間維度把一年中每個月的庫存累加起來則毫無意義璧尸。還有一種度量完全不具備可加性,比如比率型事實熬拒。對于不可加性事實可分解為可加的組件來實現(xiàn)聚集爷光。

事實表通常只有很少的列和很多行,是一種"瘦高"型的表澎粟。事實表定義為以下三種類型之一:

  • 事務(wù)事實表:記錄有關(guān)特定事件的事實(例如蛀序,銷售事件,保存在原子的粒度捌议,也稱為原子事實表)
  • 周期快照事實表記錄給定時間點的事實(例如哼拔,月末的帳戶詳細(xì)信息)
  • 累積快照事實表記錄了給定時間點的匯總事實(例如,某產(chǎn)品的當(dāng)月迄今總銷售額)

維表

維度是維度建模的基礎(chǔ)和靈魂瓣颅。在維度建模中倦逐,將度量稱為事實,將環(huán)境描述為維度宫补,維度是用于分析事實所需要的多樣環(huán)境檬姥。例如,在分析交易過程時粉怕,可以通過買家健民、賣家、商品和時間等維度描述交易發(fā)生的環(huán)境贫贝。維度所包含的表示維度的列秉犹,稱為維度屬性蛉谜。維度屬性是查詢約束條件、分組和報表標(biāo)簽生成的基本來源崇堵,是數(shù)據(jù)易用性的關(guān)鍵型诚。

維度通常是限定事實的描述性信息。例如鸳劳,產(chǎn)品維度中的每個記錄代表一個特定的產(chǎn)品狰贯。與事實表相比,維表通常具有相對較少的記錄赏廓,但是每個記錄可能具有大量的屬性來描述事實數(shù)據(jù)涵紊。維度可以定義各種各樣的特征,一些常見的維表:

  • 時間維度表:以最低時間粒度級別描述時間
  • 地理維度表:描述了位置數(shù)據(jù)幔摸,例如國家/地區(qū)/城市
  • 產(chǎn)品維度表:表描述了產(chǎn)品的詳細(xì)信息
  • 員工維度表:描述了員工摸柄,例如銷售人員

星型模型

大多數(shù)的數(shù)據(jù)倉庫都采用星型模型。星型模型是由事實表和多個維表組成抚太。事實表中存放大量關(guān)于企業(yè)的事實數(shù)據(jù)塘幅,元祖?zhèn)€數(shù)通常很大昔案,而且非規(guī)范化程度很高尿贫。例如,多個時期的數(shù)據(jù)可能會出現(xiàn)在同一個表中踏揣。維表中通常存放描述性數(shù)據(jù)庆亡,維表是圍繞事實表建立的,通常來說具有較少的行捞稿。如下圖所示:

星型模型存取數(shù)據(jù)速度快又谋,主要是針對各個維做了大量預(yù)處理,如按照維度進行預(yù)先的統(tǒng)計娱局、分組合排序等彰亥。與規(guī)范化的關(guān)系型數(shù)據(jù)庫設(shè)計相比,星型模型是非規(guī)范化的衰齐,通過數(shù)據(jù)冗余提升多維數(shù)據(jù)的查詢速度任斋,增加了存儲空間的代價。當(dāng)業(yè)務(wù)問題發(fā)生變化耻涛、原來的維度不能滿足需求時废酷,需要增加新的維度。由于事實表的主鍵由所有維表的主鍵組成抹缕,這種維的變化帶來的數(shù)據(jù)變化將是非常復(fù)雜和耗時的澈蟆。一個星型模型的示例:

雪花模型

雪花模型是對星型模型的擴展,它將星型模型的維表進一步層次化卓研,原來的各個維表可能被擴展為小的事實表趴俘,形成一些局部的層次區(qū)域。在雪花模型中能夠定義多重父類維來描述某些特殊的維表,如在時間維上增加月維表和年維表寥闪,通過查看與時間有關(guān)的父類維带膀,能夠定義特殊的時間統(tǒng)計信息,如月統(tǒng)計和年統(tǒng)計等橙垢。

雪花模式通過更多的連接引入了更多的復(fù)雜性垛叨。隨著存儲變得越來越廉價,大多數(shù)情況柜某,一般不采用雪花模型方法嗽元。

雪花模型的有點是最大限度地減少數(shù)據(jù)存儲量,以及把較小的維表聯(lián)合在一起來改善查詢性能喂击。但是它增加了用戶必須處理的表的數(shù)量剂癌,增加了某些查詢的復(fù)雜性。如下所示:

維度建模的優(yōu)缺點

優(yōu)點

  • 每次需要從數(shù)據(jù)庫中獲取一些信息時翰绊,可以不用編寫冗長的查詢
  • 針對讀取進行了優(yōu)化佩谷,可以寫更少的JOIN,更快地返回結(jié)果

缺點

  • 對數(shù)據(jù)進行非規(guī)范化意味著一次性插入或更新會導(dǎo)致數(shù)據(jù)異常监嗜。在實踐中谐檀,星型模型是通過批處理實來彌補這一問題
  • 分析靈活性有限。星型模型通常是為特定目的而設(shè)計的裁奇。在分析需求方面桐猬,它不像規(guī)范化數(shù)據(jù)模型那樣靈活

為什么星型模型依然有用

多種數(shù)據(jù)源

公司從各種數(shù)據(jù)源中收集越來越多的數(shù)據(jù),因此需要對結(jié)果數(shù)據(jù)集進行整理以進行分析刽肠,從而減少異構(gòu)數(shù)據(jù)源帶來的分析復(fù)雜性溃肪。

標(biāo)準(zhǔn)

由Ralph Kimball編寫的Data Warehouse Toolkit定義了業(yè)界廣泛理解的概念。新員工可以快速掌握數(shù)據(jù)倉庫的結(jié)構(gòu)音五,而無需熟悉具體的業(yè)務(wù)系統(tǒng)數(shù)據(jù)惫撰。數(shù)據(jù)工程師和分析師通常對事實、維度躺涝、粒度這些概念比較了解厨钻,從而可以促進協(xié)作。

可擴展性

新添加的事實表可以重用現(xiàn)有的維度诞挨。通過向事實表添加更多外鍵莉撇,實現(xiàn)向事實表添加新維度。另外惶傻,對于集成新的數(shù)據(jù)集棍郎,無需對模型進行重大調(diào)整。

數(shù)據(jù)建模發(fā)生了哪些變化

大數(shù)據(jù)時代银室,日新月異的技術(shù)發(fā)展促使存儲和計算發(fā)生了天翻地覆的變化(存儲和計算比以往任何時候都便宜)涂佃,因此數(shù)據(jù)模型也相應(yīng)地發(fā)生了一些變化励翼。

緩慢變化維(SCD)

對于隨時間而變化的維度,比如:用戶可以更改其家庭住址辜荠,產(chǎn)品可以更改名稱汽抚。所以需要一種策略保存歷史某個時間點對應(yīng)的維度信息。

Kimball書中介紹了許多類型的SCD策略伯病,大多數(shù)使用UPDATE就地添加或修改信息造烁。在保留歷史記錄的維度中,當(dāng)記錄中的任何屬性發(fā)生更改時午笛,都需要復(fù)制整行數(shù)據(jù),當(dāng)屬性經(jīng)常更改時惭蟋,同樣會使用更多存儲空間。值得注意的是药磺,這些技術(shù)很復(fù)雜告组,因為它們是在嚴(yán)格的存儲約束下設(shè)計的。

其實癌佩,可以使用維度快照來解決SCD的問題木缝,雖然需要更多的存儲空間,但創(chuàng)建和查詢更簡單围辙。

維度快照

維度應(yīng)比事實小得多我碟。電子商務(wù)的交易,訂單可能數(shù)以百萬/千萬計酌畜,但是客戶(維度)的數(shù)量會少得多怎囚。

每天我們都會在版本快照中重新寫入整個維度表

/data_warehouse/dim_users/ds = 2020-01-01
/data_warehouse/dim_users/ds = 2020-01-02 
...

由于每天有一個快照數(shù)據(jù)卿叽,因此不管發(fā)生多少變化都沒有影響桥胞。這種方式非常簡單粗暴,但與復(fù)雜的不同類型的緩慢變化維策略相比考婴,不失為一種可選的方案贩虾。

使用此種方式,可以通過JOIN特定日期的維度快照來獲取歷史某個時間點的維度信息沥阱。另外缎罢,這種方式不會對查詢速度產(chǎn)生影響,因為通過分區(qū)日期可以直接定位選擇的日期考杉,而不是加載所有的數(shù)據(jù)策精。

系統(tǒng)地對維度進行快照(為每個ETL計劃周期存儲維度的完整副本,通常在不同的表分區(qū)中)崇棠,作為處理緩慢變化的維度(SCD)的通用方法咽袜,是一種簡單的通用方法,不需要太多的工程工作枕稀,并且與經(jīng)典方法相比询刹,在編寫ETL和查詢時很容易掌握谜嫉。 復(fù)雜的SCD建模技術(shù)并不直觀,并且會降低可訪問性凹联。

分區(qū)

為了避免上游數(shù)據(jù)處理錯誤導(dǎo)致事實表裝載錯誤沐兰,需要從數(shù)據(jù)源系統(tǒng)中提取日期作為分區(qū)字段,這樣可以實現(xiàn)數(shù)據(jù)裝載的冪等性蔽挠。此外住闯,建議按 事件日期 進行分區(qū),因為查詢通常會將其用作過濾器(WHERE子句)澳淑。

代理鍵與冗余維度

在維表中維護代理鍵是非常復(fù)雜的寞秃,除此之外,還會使事實表的可讀性變差偶惠。在事實表中使用自然鍵和維度冗余的方式越來越普遍春寿,這樣可以減少JOIN帶來的性能開銷。值得注意的是忽孽,支持編碼和壓縮的序列化格式(如Parquet绑改、ORC)解決了非規(guī)范化相關(guān)的大多數(shù)性能損失。

總結(jié)

本文主要介紹了維度建模的基本概念兄一,包括維表厘线、事實表、星型模型和雪花模型出革。其次對星型模型的優(yōu)缺點進行了闡述造壮。最后指出了維度建模正在發(fā)生的一些變化。

公眾號『大數(shù)據(jù)技術(shù)與數(shù)倉』骂束,回復(fù)『資料』領(lǐng)取大數(shù)據(jù)資料包

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耳璧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子展箱,更是在濱河造成了極大的恐慌旨枯,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件混驰,死亡現(xiàn)場離奇詭異攀隔,居然都是意外死亡,警方通過查閱死者的電腦和手機栖榨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門昆汹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人婴栽,你說我怎么就攤上這事满粗。” “怎么了居夹?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵败潦,是天一觀的道長本冲。 經(jīng)常有香客問我,道長劫扒,這世上最難降的妖魔是什么檬洞? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮沟饥,結(jié)果婚禮上添怔,老公的妹妹穿的比我還像新娘。我一直安慰自己贤旷,他們只是感情好广料,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幼驶,像睡著了一般艾杏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盅藻,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天购桑,我揣著相機與錄音,去河邊找鬼氏淑。 笑死勃蜘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的假残。 我是一名探鬼主播缭贡,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辉懒!你這毒婦竟也來了阳惹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耗帕,失蹤者是張志新(化名)和其女友劉穎穆端,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仿便,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年攒巍,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗽仪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡柒莉,死狀恐怖闻坚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兢孝,我是刑警寧澤窿凤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布仅偎,位于F島的核電站,受9級特大地震影響雳殊,放射性物質(zhì)發(fā)生泄漏橘沥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一夯秃、第九天 我趴在偏房一處隱蔽的房頂上張望座咆。 院中可真熱鬧,春花似錦仓洼、人聲如沸介陶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哺呜。三九已至,卻和暖如春箕戳,著一層夾襖步出監(jiān)牢的瞬間弦牡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工漂羊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驾锰,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓走越,卻偏偏與公主長得像椭豫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子旨指,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354