01 什么是數(shù)據(jù)倉(cāng)庫(kù)?
Bill Inmon:數(shù)據(jù)倉(cāng)庫(kù)是一個(gè)面向主題的、集成的、隨時(shí)間變化的、但信息本身相對(duì)穩(wěn)定的數(shù)據(jù)集合,用于對(duì)管理決策過(guò)程的支持。
Ralph Kimball:數(shù)據(jù)倉(cāng)庫(kù)是一個(gè)將源系統(tǒng)數(shù)據(jù)抽取、清洗、規(guī)格化、提交到維度數(shù)據(jù)存儲(chǔ)的系統(tǒng),為決策的制定提供查詢(xún)和分析功能的支持與實(shí)現(xiàn)。
Inmon的表述側(cè)重于數(shù)據(jù)倉(cāng)庫(kù)的性質(zhì)和特點(diǎn),Kimball的表述側(cè)重于數(shù)據(jù)倉(cāng)庫(kù)建設(shè)的過(guò)程,綜合而言,數(shù)據(jù)倉(cāng)庫(kù)是從源系統(tǒng)通過(guò)一系列操作匯集的、為管理決策提供支持的數(shù)據(jù)集合,具有面向主題、集成、隨時(shí)間變化、信息相對(duì)穩(wěn)定的特點(diǎn)。
02 為什么要建數(shù)據(jù)倉(cāng)庫(kù)?
如其定義所言,數(shù)據(jù)倉(cāng)庫(kù)的目的是為管理決策提供支持,因此數(shù)據(jù)倉(cāng)庫(kù)的建設(shè)需要圍繞這個(gè)目的進(jìn)行。
那么如何為管理決策提供支持呢?假設(shè)是一家銷(xiāo)售公司,那最基本的支持就是提供銷(xiāo)售業(yè)績(jī)數(shù)據(jù)。如果沒(méi)有數(shù)據(jù)倉(cāng)庫(kù),那么當(dāng)管理者需要查詢(xún)這些數(shù)據(jù)并以此制定相應(yīng)決策時(shí),就需要從生產(chǎn)庫(kù)中直接拉取,那么顯然存在兩個(gè)問(wèn)題:
1、影響生產(chǎn)業(yè)務(wù)
2、數(shù)據(jù)不可復(fù)用
因此需要有一個(gè)倉(cāng)庫(kù)存儲(chǔ)數(shù)據(jù)實(shí)現(xiàn)聯(lián)機(jī)分析處理(OLAP,Online Analytical Processing)。
03 數(shù)據(jù)倉(cāng)庫(kù)的相關(guān)理論和模型
既然是一個(gè)倉(cāng)庫(kù),那么里面無(wú)論是貨物還是數(shù)據(jù)都不能雜亂無(wú)章地堆放,而如何有效組織數(shù)據(jù)就成了研究數(shù)據(jù)倉(cāng)庫(kù)的重點(diǎn),不同的組織方式形成了關(guān)于數(shù)據(jù)倉(cāng)庫(kù)的不同建模理論。
1、ER模型(Entity-Relationship Modeling)
ER模型常用于OLTP數(shù)據(jù)庫(kù)建模,應(yīng)用到構(gòu)建數(shù)倉(cāng)時(shí)更偏重?cái)?shù)據(jù)整合, 站在企業(yè)整體考慮,將各個(gè)系統(tǒng)的數(shù)據(jù)按相似性一致性、合并處理,為數(shù)據(jù)分析、決策服務(wù),但并不便于直接用來(lái)支持分析。缺陷:需要全面梳理企業(yè)所有的業(yè)務(wù)和數(shù)據(jù)流,周期長(zhǎng),人員要求高。
ER模型是站在企業(yè)的角度從上往下按主題進(jìn)行相似性組合和合并,并進(jìn)行一致性處理,最經(jīng)典的實(shí)踐就是Teradata公司基于金融業(yè)務(wù)發(fā)布的FS-LDM(Finacial Services Logical Data Model),它將金融業(yè)務(wù)劃分為10大主題,企業(yè)可基于這個(gè)模型快速落地自己的數(shù)據(jù)倉(cāng)庫(kù)。

2、維度模型(Dimensional Modeling)
維度建模是面向分析場(chǎng)景而生,針對(duì)分析場(chǎng)景構(gòu)建數(shù)倉(cāng)模型;重點(diǎn)關(guān)注快速、靈活的解決分析需求,同時(shí)能夠提供大規(guī)模數(shù)據(jù)的快速響應(yīng)性能。針對(duì)性強(qiáng),主要應(yīng)用于數(shù)據(jù)倉(cāng)庫(kù)構(gòu)建和OLAP引擎低層數(shù)據(jù)模型。優(yōu)點(diǎn):不需要完整的梳理企業(yè)業(yè)務(wù)流程和數(shù)據(jù),實(shí)施周期根據(jù)主題邊界而定,容易快速實(shí)現(xiàn)demo,而且相對(duì)來(lái)說(shuō)便于理解、提高查詢(xún)性能、對(duì)稱(chēng)并易擴(kuò)展。
維度模型更側(cè)重于完成具體的分析決策需求,是一種從下往上的構(gòu)建思路。同時(shí),它關(guān)注大規(guī)模復(fù)雜查詢(xún)的響應(yīng)性能,星型模型是其具體形式。

以事實(shí)表為中心,用代理鍵把維度表關(guān)聯(lián)起來(lái)
除了以上兩種外,還有Dan Linstedt提出的Data Valut模型和對(duì)其做進(jìn)一步規(guī)范化處理的Anchor模型,但就目前實(shí)際使用情況而言,普遍采用的都是Kimball的維度模型及其變型,因此下面主要介紹維度模型框架下的相關(guān)概念。
04 維度建模下的主要概念
開(kāi)展維度建模首先需要理解兩個(gè)最重要的概念:維度和事實(shí)。
維度
維度建模的語(yǔ)境下,維度指的是環(huán)境,如你所處的城市、小區(qū)、公司、部門(mén),商品所歸屬的一級(jí)大類(lèi)、二級(jí)大類(lèi)等。更通俗地理解是,維度指的是where和by后面跟著的字段,用來(lái)查詢(xún)約束、分類(lèi)匯總和排序。
事實(shí)
維度建模中的事實(shí)比維度更難理解,其實(shí)這里的事實(shí)指的是度量,如商品數(shù)量、成交金額、利潤(rùn)率等。度量業(yè)務(wù)過(guò)程的事實(shí),一般為整型或浮點(diǎn)型的十進(jìn)制數(shù)值,可分為可加、半可加和不可加三種類(lèi)型。可加的事實(shí)指能夠以任意維度直接匯總;半可加事實(shí)只能以特定維度匯總,如房屋面積可以按小區(qū)匯總,但不能按時(shí)間匯總,因?yàn)榻裉斓姆课菝娣e加昨天的房屋面積是沒(méi)有意義的;不可加事實(shí)不具有可加性,如比率型事實(shí),在任何維度下利潤(rùn)率加利潤(rùn)率都不具有實(shí)際含義。
維度表
維度表又稱(chēng)維表,維表存儲(chǔ)的一般是對(duì)事實(shí)描述的信息。每一張維表對(duì)應(yīng)現(xiàn)實(shí)世界中的一個(gè)對(duì)象或者概念。例如:用戶(hù)、商品、日期、地區(qū)等。

維度表的簡(jiǎn)單示例
緩慢變化維
緩慢變化維指維度并不是靜態(tài)的,而是會(huì)隨著時(shí)間的推移發(fā)生緩慢變化。通用的處理方法是,在不考慮存儲(chǔ)成本的情況下可通過(guò)每天保留一份全量的快照數(shù)據(jù)來(lái)處理變化的維度,當(dāng)有需要的時(shí)候取最近的維度表進(jìn)行關(guān)聯(lián)。除此之外,還有全量重寫(xiě)、增加行、增加列、開(kāi)發(fā)拉鏈表等方法來(lái)處理這個(gè)問(wèn)題。
事實(shí)表
事實(shí)表主要圍繞業(yè)務(wù)過(guò)程設(shè)計(jì),表中的每行數(shù)據(jù)代表一個(gè)業(yè)務(wù)事件(下單、支付、退款、評(píng)價(jià)等)。每一個(gè)事實(shí)表的行包括:具有可加性的數(shù)值型的度量值、與維表相連接的外鍵。通常具有兩個(gè)和兩個(gè)以上的外鍵,外鍵之間表示維表之間多對(duì)多的關(guān)系。

事實(shí)表的簡(jiǎn)單示例
就應(yīng)用場(chǎng)景而言,事實(shí)表主要包括如下三種類(lèi)型:
1、事務(wù)事實(shí)表
用于描述業(yè)務(wù)過(guò)程,按業(yè)務(wù)過(guò)程的單一性或多業(yè)務(wù)過(guò)程可進(jìn)一步分為單事務(wù)事實(shí)表和多事務(wù)事實(shí)表。其中單事務(wù)事實(shí)表分別記錄每個(gè)業(yè)務(wù)過(guò)程,如下單業(yè)務(wù)記入下單事實(shí)表,支付業(yè)務(wù)記入支付事實(shí)表。多事務(wù)事實(shí)表在同一個(gè)表中包含了不同業(yè)務(wù)過(guò)程,如下單、支付、簽收等業(yè)務(wù)過(guò)程記錄在一張表中,通過(guò)新增字段來(lái)判斷屬于哪一個(gè)業(yè)務(wù)過(guò)程。
2、周期快照事實(shí)表
在一個(gè)確定的時(shí)間間隔內(nèi)對(duì)業(yè)務(wù)狀態(tài)進(jìn)行度量,如用戶(hù)每月使用信用卡的消費(fèi)情況。
3、累計(jì)快照事實(shí)表
用于查看不同事件之間的時(shí)間間隔,例如分析用戶(hù)從購(gòu)買(mǎi)到支付的市場(chǎng)、從下單到訂單完結(jié)的時(shí)長(zhǎng)等,一般適用于有明確時(shí)間間隔的業(yè)務(wù)過(guò)程。

雪花模型

雪花模型是用以組織事實(shí)表和維度的模型之一。如上圖,雪花模型的維度表會(huì)分得較為細(xì)碎,往往一張維度表下會(huì)包含好幾個(gè)外鍵用以與下層的維度進(jìn)行關(guān)聯(lián)。
星型模型

星型模型是雪花模型的退化形式。如上圖,星型模型的地域維度表收斂成一張,當(dāng)需要地域維度時(shí)事實(shí)表只需與這一張地域維度表關(guān)聯(lián)即可。
退化和冗余
雪花模型和星座模型的組織形式很重要的目的就是節(jié)省存儲(chǔ)空間。如中國(guó)可以用CHN表示,當(dāng)有需要的時(shí)候再與維度表關(guān)聯(lián)上展示全稱(chēng)“中華人民共和國(guó)”,假設(shè)通過(guò)這個(gè)方法每條記錄可節(jié)省11個(gè)字節(jié)的話,那么一百萬(wàn)條記錄就可節(jié)省約1MB,這在二十年前硬盤(pán)容量較少的情況下還是需要考慮的。
但是嚴(yán)格按照星型模型或雪花模型組織事實(shí)表和維度度帶來(lái)的問(wèn)題就是查詢(xún)和應(yīng)用事實(shí)表時(shí)需要多層關(guān)聯(lián),影響分析效率,因此目前實(shí)際采用的做法普遍都是把一些通用和使用頻繁的維度表信息退化進(jìn)事實(shí)表里形成一定程度的冗余,這樣做法的原因如下:
1、從過(guò)去20的技術(shù)發(fā)展來(lái)看,存儲(chǔ)成本的下降幅度要大于cpu和內(nèi)存的下降幅度,同時(shí)存儲(chǔ)成本占企業(yè)開(kāi)銷(xiāo)的占比也在不斷下降,因此節(jié)約存儲(chǔ)空間不是目前數(shù)倉(cāng)建設(shè)最主要考慮的因素之一。
2、時(shí)間成本變得越來(lái)越重要。如果嚴(yán)格區(qū)分事實(shí)表和維度表,當(dāng)需要事實(shí)表和維度表關(guān)聯(lián)時(shí)join的時(shí)間開(kāi)銷(xiāo)是不得不考慮的。當(dāng)業(yè)務(wù)急需某數(shù)據(jù)時(shí),明明是一個(gè)select就能解決的事情,卻要join好幾張表花上好幾倍時(shí)間才能得到相同的結(jié)果,這其實(shí)是很劃不來(lái)的,更遑論需要維護(hù)的表的數(shù)量也是冗余后的好幾倍乃至幾十倍。
3、目前所采用的Hadoop框架下,擔(dān)心的不是存儲(chǔ)空間的大小,而是需要考慮如何減少M(fèi)R啟動(dòng)的次數(shù)和查詢(xún)時(shí)所用的到j(luò)ob的數(shù)量,這些會(huì)嚴(yán)重影響查詢(xún)和統(tǒng)計(jì)的效率。由于每次join都要增加一個(gè)job,而嚴(yán)格按照星型模型和雪花模型組織時(shí)是需要大量join的,這就與目前的技術(shù)路線相悖了。
數(shù)據(jù)域
指面向業(yè)務(wù)分析,將業(yè)務(wù)過(guò)程或維度進(jìn)行抽象的集合。業(yè)務(wù)過(guò)程是一個(gè)個(gè)不可拆分的行為事件,維度指度量的環(huán)境。在劃分?jǐn)?shù)據(jù)域時(shí),既能涵蓋當(dāng)前所有的業(yè)務(wù)需求,又能在新業(yè)務(wù)進(jìn)入時(shí)無(wú)影響地被包含進(jìn)已有的數(shù)據(jù)域中。常見(jiàn)的數(shù)據(jù)域劃分:商品域、日志域、交易域、互動(dòng)域等。
業(yè)務(wù)過(guò)程
指企業(yè)的業(yè)務(wù)活動(dòng)事件,如下單、支付、退款都是業(yè)務(wù)過(guò)程,通俗地講,業(yè)務(wù)過(guò)程就是企業(yè)活動(dòng)中不可拆分的行為事件。
粒度
粒度指的就是每一行的含義,如日志表中的粒度就是用戶(hù)每一次的操作記錄,訂單表中的粒度就是用戶(hù)所下的訂單。
以上便是目前數(shù)據(jù)倉(cāng)庫(kù)領(lǐng)域中最為重要的一些概念了,掌握這些概念有助于對(duì)數(shù)倉(cāng)建設(shè)形成全面的認(rèn)識(shí)。
(部分內(nèi)容來(lái)源網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系刪除)