一、什么是數(shù)據(jù)倉庫
數(shù)據(jù)倉庫,英文名稱為DataWarehouse,可簡寫為DW或DWH。數(shù)據(jù)倉庫,是為企業(yè)所有級別的決策制定過程,提供所有類型數(shù)據(jù)支持的戰(zhàn)略集合。它出于分析性報告和決策支持目的而創(chuàng)建。為需要業(yè)務(wù)智能的企業(yè),提供指導(dǎo)業(yè)務(wù)流程改進、監(jiān)視時間、成本、質(zhì)量以及控制。
1、數(shù)據(jù)倉庫的特點
- 面向主題:傳統(tǒng)數(shù)據(jù)庫面向應(yīng)用進行數(shù)據(jù)組織的特點相對應(yīng),數(shù)據(jù)倉庫中的數(shù)據(jù)是面向主題進行組織的。面向主題的數(shù)據(jù)組織方式,就是在較高層次上對分析對象的數(shù)據(jù)的一個完整、一致的描述,能完整、統(tǒng)一地刻劃各個分析對象所涉及的企業(yè)的各項數(shù)據(jù),以及數(shù)據(jù)之間的聯(lián)系。
-
集成:數(shù)據(jù)倉庫的數(shù)據(jù)是從原有的分散的數(shù)據(jù)庫數(shù)據(jù)抽取來的。操作型數(shù)據(jù)與DSS分析型數(shù)據(jù)之間差別甚大。數(shù)據(jù)進入數(shù)據(jù)倉庫之前,必然要經(jīng)過統(tǒng)一與綜合,這一步是數(shù)據(jù)倉庫建設(shè)中最關(guān)鍵、最復(fù)雜的一步,所要完成的工作有:
(1)要統(tǒng)一源數(shù)據(jù)中所有矛盾之處,如字段的同名異義、異名同義、單位不統(tǒng)一、字長不一致,等等。
(2)進行數(shù)據(jù)綜合和計算。數(shù)據(jù)倉庫中的數(shù)據(jù)綜合工作可以在從原有數(shù)據(jù)庫抽取數(shù)據(jù)時生成,但許多是在數(shù)據(jù)倉庫內(nèi)部生成的,即進入數(shù)據(jù)倉庫以后進行綜合生成的。 - 不可更新:數(shù)據(jù)倉庫的數(shù)據(jù)主要供企業(yè)決策分析之用,所涉及的數(shù)據(jù)操作主要是數(shù)據(jù)查詢,一般情況下并不進行修改操作。數(shù)據(jù)倉庫的數(shù)據(jù)反映的是一段相當(dāng)長的時間內(nèi)歷史數(shù)據(jù)的內(nèi)容,是不同時點的數(shù)據(jù)庫快照的集合,以及基于這些快照進行統(tǒng)計、綜合和重組的導(dǎo)出數(shù)據(jù),而不是聯(lián)機處理的數(shù)據(jù)。數(shù)據(jù)庫中進行聯(lián)機處理的數(shù)據(jù)經(jīng)過集成輸入到數(shù)據(jù)倉庫中,一旦數(shù)據(jù)倉庫存放的數(shù)據(jù)已經(jīng)超過數(shù)據(jù)倉庫的數(shù)據(jù)存儲期限,這些數(shù)據(jù)將從當(dāng)前的數(shù)據(jù)倉庫中刪去。因為數(shù)據(jù)倉庫只進行數(shù)據(jù)查詢操作,所以數(shù)據(jù)倉庫管理系統(tǒng)相比數(shù)據(jù)庫管理系統(tǒng)而言要簡單得多。數(shù)據(jù)庫管理系統(tǒng)中許多技術(shù)難點,如完整性保護、并發(fā)控制等等,在數(shù)據(jù)倉庫的管理中幾乎可以省去。但是由于數(shù)據(jù)倉庫的查詢數(shù)據(jù)量往往很大,所以就對數(shù)據(jù)查詢提出了更高的要求,它要求采用各種復(fù)雜的索引技術(shù);同時由于數(shù)據(jù)倉庫面向的是商業(yè)企業(yè)的高層管理者,他們會對數(shù)據(jù)查詢的界面友好性和數(shù)據(jù)表示提出更高的要求。
-
隨時間不斷變化:這一特征表現(xiàn)在以下3方面:
(1)數(shù)據(jù)倉庫隨時間變化不斷增加新的數(shù)據(jù)內(nèi)容。數(shù)據(jù)倉庫系統(tǒng)必須不斷捕捉OLTP數(shù)據(jù)庫中變化的數(shù)據(jù),追加到數(shù)據(jù)倉庫中去,也就是要不斷地生成OLTP數(shù)據(jù)庫的快照,經(jīng)統(tǒng)一集成后增加到數(shù)據(jù)倉庫中去;但對于確實不再變化的數(shù)據(jù)庫快照,如果捕捉到新的變化數(shù)據(jù),則只生成一個新的數(shù)據(jù)庫快照增加進去,而不會對原有的數(shù)據(jù)庫快照進行修改。
(2)數(shù)據(jù)倉庫隨時間變化不斷刪去舊的數(shù)據(jù)內(nèi)容。數(shù)據(jù)倉庫的數(shù)據(jù)也有存儲期限,一旦超過了這一期限,過期數(shù)據(jù)就要被刪除。只是數(shù)據(jù)倉庫內(nèi)的數(shù)據(jù)時限要遠遠長于操作型環(huán)境中的數(shù)據(jù)時限。在操作型環(huán)境中一般只保存有60-90天的數(shù)據(jù),而在數(shù)據(jù)倉庫中則需要保存較長時限的數(shù)據(jù)(如5~10年),以適應(yīng)DSS進行趨勢分析的要求。
(3)數(shù)據(jù)倉庫中包含有大量的綜合數(shù)據(jù),這些綜合數(shù)據(jù)中很多跟時間有關(guān),如數(shù)據(jù)經(jīng)常按照時間段進行綜合,或隔一定的時間片進行抽樣等等。這些數(shù)據(jù)要隨著時間的變化不斷地進行重新綜合。因此,數(shù)據(jù)倉庫的數(shù)據(jù)特征都包含時間項,以標(biāo)明數(shù)據(jù)的歷史時期。
2、數(shù)據(jù)倉庫發(fā)展史
數(shù)據(jù)倉庫的發(fā)展大致經(jīng)歷了這樣的三個過程:
(1)簡單報表階段
這個階段,系統(tǒng)的主要目標(biāo)是解決一些日常的工作中業(yè)務(wù)人員需要的報表,以及生成一些簡單的能夠幫助領(lǐng)導(dǎo)進行決策所需要的匯總數(shù)據(jù)。這個階段的大部分表現(xiàn)形式為數(shù)據(jù)庫和前端報表工具。
(2)數(shù)據(jù)集市階段
這個階段,主要是根據(jù)某個業(yè)務(wù)部門的需要,進行一定的數(shù)據(jù)的采集,整理,按照業(yè)務(wù)人員的需要,進行多維報表的展現(xiàn),能夠提供對特定業(yè)務(wù)指導(dǎo)的數(shù)據(jù),并且能夠提供特定的領(lǐng)導(dǎo)決策數(shù)據(jù)。
(3)數(shù)據(jù)倉庫階段
這個階段,主要是按照一定的數(shù)據(jù)模型,對整個企業(yè)的數(shù)據(jù)進行采集,整理,并且能夠按照各個業(yè)務(wù)部門的需要,提供跨部門的,完全一致的業(yè)務(wù)報表數(shù)據(jù),能夠通過數(shù)據(jù)倉庫生成對對業(yè)務(wù)具有指導(dǎo)性的數(shù)據(jù),同時,為領(lǐng)導(dǎo)決策提供全面的數(shù)據(jù)支持。
通過數(shù)據(jù)倉庫建設(shè)的發(fā)展階段能夠看出,數(shù)據(jù)倉庫的建設(shè)和數(shù)據(jù)集市的建設(shè)的重要區(qū)別就在于數(shù)據(jù)模型的支持。
3、數(shù)據(jù)倉庫架構(gòu)分層
數(shù)據(jù)倉庫標(biāo)準(zhǔn)上可以分為四層: ODS(臨時存儲層)、 PDW(數(shù)據(jù)倉庫層)、 DM(數(shù)據(jù)集市層)、 APP(應(yīng)用層)
數(shù)據(jù)倉庫的標(biāo)準(zhǔn)分層只是一個建議性質(zhì)的標(biāo)準(zhǔn),實際實施時需要根據(jù)實際情況確定數(shù)據(jù)倉庫的分層,不同類型的數(shù)據(jù)也可能采取不同的分層方法。

(1)臨時存儲層/數(shù)據(jù)采集層
ODS 層的表通常包括兩類,一個用于存儲當(dāng)前需要加載的數(shù)據(jù),一個用于存儲處理完后的歷史數(shù)據(jù)。歷史數(shù)據(jù)一般保存 3-6 個月后需要清除,以節(jié)省空間。但不同的項目要區(qū)別對待,如果源系統(tǒng)的數(shù)據(jù)量不大,可以保留更長的時間,甚至全量保存
數(shù)據(jù)源種類可以有多種:
日志:所占份額最大,存儲在備份服務(wù)器上
業(yè)務(wù)數(shù)據(jù)庫:如Mysql、Oracle
來自HTTP/FTP的數(shù)據(jù):合作伙伴提供的接口
其他數(shù)據(jù)源:如Excel等需要手工錄入的數(shù)據(jù)
(2)數(shù)據(jù)倉庫層
這層的數(shù)據(jù)是干凈的數(shù)據(jù),也就是清洗后的數(shù)據(jù),它會保存BI系統(tǒng)中所有歷史數(shù)據(jù)。
HDFS是大數(shù)據(jù)環(huán)境下數(shù)據(jù)倉庫/數(shù)據(jù)平臺最完美的數(shù)據(jù)存儲解決方案。
離線數(shù)據(jù)分析與計算,也就是對實時性要求不高的部分,Hive是不錯的選擇。Spark性能比Hive好很多,適合做準(zhǔn)實時計算。
(3)數(shù)據(jù)集市層
前面使用Hive、MR、Spark、SparkSQL分析和計算的結(jié)果,還是在HDFS上,但大多業(yè)務(wù)和應(yīng)用不可能直接從HDFS上獲取數(shù)據(jù),那么就需要一個數(shù)據(jù)共享的地方,使得各業(yè)務(wù)和產(chǎn)品能方便的獲取數(shù)據(jù)。
這里的數(shù)據(jù)集市,其實指的是前面數(shù)據(jù)分析與計算后的結(jié)果存放的地方,其實就是關(guān)系型數(shù)據(jù)庫和NOSQL數(shù)據(jù)庫。
這層的數(shù)據(jù)從數(shù)據(jù)的組織方式來說,通常是星形或雪花結(jié)構(gòu)的數(shù)據(jù)。從數(shù)據(jù)粒度來說,是輕度匯總級的數(shù)據(jù),已經(jīng)不存在明細(xì)數(shù)據(jù)了。從數(shù)據(jù)的時間跨度來說,通常是 PDW 層的一部分,主要的目的是為了滿足用戶分析的需求,而從分析的角度來說,用戶通常只需要分析近幾年(如近三年的數(shù)據(jù))的即可。 從數(shù)據(jù)的廣度來說,仍然覆蓋了所有業(yè)務(wù)數(shù)據(jù)。
(4)應(yīng)用層
數(shù)據(jù)粒度高度匯總,倒不一定涵蓋所有業(yè)務(wù)數(shù)據(jù),只是數(shù)據(jù)集市層數(shù)據(jù)的一個子集。
報表:報表所使用的數(shù)據(jù),一般也是已經(jīng)統(tǒng)計匯總好的,存放于數(shù)據(jù)共享層。
接口:接口的數(shù)據(jù)都是直接查詢數(shù)據(jù)共享層即可得到。
即席查詢:即席查詢通常是現(xiàn)有的報表和數(shù)據(jù)共享層的數(shù)據(jù)并不能滿足需求,需要從數(shù)據(jù)存儲層直接查詢。一般都是通過直接操作SQL得到。
4、星型模型和雪花模型
在多維分析的商業(yè)智能解決方案中,根據(jù)事實表和維度表的關(guān)系,又可將常見的模型分為星型模型和雪花型模型。在設(shè)計邏輯型數(shù)據(jù)的模型的時候,就應(yīng)考慮數(shù)據(jù)是按照星型模型還是雪花型模型進行組織。
(1)星型模型
當(dāng)所有維表都直接連接到“ 事實表”上時,整個圖解就像星星一樣,故將該模型稱為星型模型。

星型架構(gòu)是一種非正規(guī)化的結(jié)構(gòu),多維數(shù)據(jù)集的每一個維度都直接與事實表相連接,不存在漸變維度,所以數(shù)據(jù)有一定的冗余,如在地域維度表中,存在國家 A 省 B 的城市 C以及國家 A 省 B 的城市 D 兩條記錄,那么國家 A 和省 B 的信息分別存儲了兩次,即存在冗余。
(2)雪花模型
當(dāng)有一個或多個維表沒有直接連接到事實表上,而是通過其他維表連接到事實表上時,其圖解就像多個雪花連接在一起,故稱雪花模型。

雪花模型是對星型模型的擴展。它對星型模型的維表進一步層次化,原有的各維表可能被擴展為小的事實表,形成一些局部的層次結(jié)構(gòu),這些被分解的表都連接到主維度表而不是事實表。
如上圖所示,將地域維表又分解為國家,省份,城市等維表。它的優(yōu)點是:通過最大限度地減少數(shù)據(jù)存儲量以及聯(lián)合較小的維表來改善查詢性能。 雪花型結(jié)構(gòu)去除了數(shù)據(jù)冗余。
(3)星型模型和雪花模型對比
星型模型因為數(shù)據(jù)的冗余所以很多統(tǒng)計查詢不需要做外部的連接,因此一般情況下效率比雪花型模型要高。 星型結(jié)構(gòu)不用考慮很多正規(guī)化的因素,設(shè)計與實現(xiàn)都比較簡單。雪花型模型由于去除了冗余,有些統(tǒng)計就需要通過表的聯(lián)接才能產(chǎn)生,所以效率不一定有星型模型高。正規(guī)化也是一種比較復(fù)雜的過程,相應(yīng)的數(shù)據(jù)庫結(jié)構(gòu)設(shè)計、數(shù)據(jù)的 ETL、以及后期的維護都要復(fù)雜一些。因此在冗余可以接受的前提下,實際運用中星型模型使用更多,也更有效率。
總之,雪花模型使得維度分析更加容易,比如“針對特定的廣告主,有哪些客戶或者公司是在線的?”星形模型用來做指標(biāo)分析更適合,比如“給定的一個客戶他們的收入是多少?”