前言
數(shù)據(jù)倉庫作為大數(shù)據(jù)技術(shù)最重要的組件之一, 是大部分數(shù)據(jù)分析和算法的底層存儲中心,
在最近幾年來隨著大數(shù)據(jù)的蓬勃發(fā)展而為業(yè)界所知, 但是真正系統(tǒng)化深入介紹該領(lǐng)域的仍然比較少。
筆者因最近幾年的工作均對此有所涉獵, 同時有感于相較于業(yè)務(wù)系統(tǒng)的底層技術(shù)-數(shù)據(jù)庫而言,眾多的從業(yè)人員對數(shù)據(jù)倉庫也是一知半解的狀況,
而市面上真正的系統(tǒng)的綜合性介紹也相對較少,故開篇作此文。
什么是數(shù)據(jù)倉庫
數(shù)據(jù)倉庫, 最早有由數(shù)據(jù)倉庫之父比爾·恩門(Bill Inmon)于1990年提出,主要功能是將組織透過資訊系統(tǒng)之聯(lián)機事務(wù)處理(OLTP)經(jīng)年累月所累積的大量資料,透過數(shù)據(jù)倉庫理論所特有的資料儲存架構(gòu),進行系統(tǒng)的分析整理,
以利于各種分析方法如聯(lián)機分析處理(OLAP)、數(shù)據(jù)挖掘(Data Mining)之進行,并進而支持如決策支持系統(tǒng)(DSS)、主管信息系統(tǒng)(EIS)之創(chuàng)建,幫助決策者能快速有效的自大量資料中,分析出有價值的資訊,以利決策擬定及快速回應(yīng)外在環(huán)境變動,幫助建構(gòu)商業(yè)智能(BI)。
目前, 被廣泛接受的數(shù)據(jù)倉庫的定義是由Bill Inmon在1991年出版的 "Building the Data Warehouse"一書中所提出的,其定義如下:
數(shù)據(jù)倉庫(Data Warehouse)是一個面向主題的(Subject Oriented)、集成的(Integrated)、反映歷史變化(Time Variant)、相對穩(wěn)定的(Non-Volatile)的數(shù)據(jù)集合,用于支持管理決策(Decision Making Support)。
其實,在大數(shù)據(jù)時代,隨著機器學(xué)習(xí)和人工智能的興起,我覺得這個定義應(yīng)該可以做個少許的修正,數(shù)倉倉庫不只是是用于構(gòu)建支持管理決策的商業(yè)智能BI的基礎(chǔ), 也是大量的機器學(xué)習(xí)和人工智能算法的底層基礎(chǔ)之一。
展開來講:
面向主題的(Subject Oriented):數(shù)據(jù)倉庫是用來分析特定的主題域的。比如, "sales"就是一個特定的主題域。
這是數(shù)據(jù)倉庫也是區(qū)別于常見的操作型數(shù)據(jù)庫的最重要的特征(操作型數(shù)據(jù)庫如Mysql是面試事務(wù)處理的)。
這個一個非常關(guān)鍵的點,它是貫穿數(shù)據(jù)倉庫建設(shè)過程的始終的,而并非某個階段的,是數(shù)倉設(shè)計者和使用者始終該牢記心中的。筆者見過很多的數(shù)據(jù)倉庫的模型建設(shè),或多或少的偏離了這個核心點。
其中,"主題"二字的理解,也是非常重要的。何為"主題"?我個人的理解是對你所要分析的一系列的業(yè)務(wù)領(lǐng)域問題的上層歸類(此處歡迎大家拍磚)。
總結(jié)好這個"主題"的前提是對業(yè)務(wù)域的理解,同時也決定了你的數(shù)倉設(shè)計方法是會采用自頂而上的方式還是自底而下的方式(后面再詳談)。集成的(Integrated): 數(shù)據(jù)倉庫集成了多個數(shù)據(jù)源,某個產(chǎn)品的相關(guān)源數(shù)據(jù)可能存在不同類型的數(shù)據(jù)庫中、緩存中、日志文件中等。
例如:數(shù)據(jù)源A和數(shù)據(jù)源B可能是識別某個產(chǎn)品的不同的方向,但是在數(shù)據(jù)倉庫中,僅有一個方式來識別某個產(chǎn)品, 對于同一產(chǎn)品中分散在不同的數(shù)據(jù)源中的不同信息數(shù)據(jù)倉庫需要進行數(shù)據(jù)抽取、清洗、整合;
對于分散在不同的數(shù)據(jù)源中的同一冗余信息則需要消除不同數(shù)據(jù)源的不一致性,以保證數(shù)據(jù)倉庫內(nèi)的信息是關(guān)于整個企業(yè)/業(yè)務(wù)/主題的一致的全局信息。反映歷史變化**(Time Variant): 數(shù)據(jù)倉庫保存的是比較長期的歷史數(shù)據(jù),這點是相對數(shù)據(jù)庫而言, 因為后者通常保持是是最近一段時間的數(shù)據(jù)。
例如:我們可以從數(shù)據(jù)倉庫中獲取3個月, 6個月,12個月甚至10年的訂單數(shù)據(jù); 而數(shù)據(jù)庫里可能只能獲取最近3年的訂單數(shù)據(jù)。
數(shù)據(jù)倉庫中的關(guān)鍵結(jié)構(gòu)都隱式或顯式地包含時間元素。-
相對穩(wěn)定的(Non-Volatile): 一個數(shù)據(jù)一旦進入數(shù)據(jù)倉庫,則不可改變。數(shù)據(jù)倉庫的歷史數(shù)據(jù)是不應(yīng)該被更新的。
Non-Volatile在有的文檔里面會翻譯成不可更新。這里用的是相對穩(wěn)定,是一個比較準確的描述。
個人理解,主要反映在以下幾個方面:(歡迎大家補充)
** 一是歷史一旦形成,不可更改。幾乎所有的數(shù)據(jù)倉庫產(chǎn)品都不支持更新修改操作,但是是支持重載操作,所以是相對的,而非絕對不可更改。
(YY一下,一方面是尊重歷史,另一方面也給數(shù)據(jù)作假和數(shù)據(jù)篡改帶來難度。當然如果你從數(shù)據(jù)源上篡改數(shù)據(jù),那當然是方便得多。)- 存儲的穩(wěn)定性(非易失的)),數(shù)據(jù)在數(shù)據(jù)倉庫中是存儲在穩(wěn)定的底層存儲介質(zhì)文件中的,而不會存儲在cache中、內(nèi)存中; 同時數(shù)據(jù)倉庫產(chǎn)品應(yīng)該具備相應(yīng)的安全措施
以防止重要的歷史數(shù)據(jù)丟失(因為一旦丟失,可能就是真的失去,同時也就失去的對歷史的認知)。 - 數(shù)據(jù)倉庫大都保存的是長期的歷史數(shù)據(jù),大都以只讀的格式保存, 基本是穩(wěn)定的,記錄已然發(fā)生的歷史事實數(shù)據(jù)基本不隨未來的時間變化而改變。
- 存儲的穩(wěn)定性(非易失的)),數(shù)據(jù)在數(shù)據(jù)倉庫中是存儲在穩(wěn)定的底層存儲介質(zhì)文件中的,而不會存儲在cache中、內(nèi)存中; 同時數(shù)據(jù)倉庫產(chǎn)品應(yīng)該具備相應(yīng)的安全措施
另外, Ralph Kimball提供了一個更為簡潔的定義:
"A data warehouse is a copy of transaction data specifically structured for query and analysis"
數(shù)據(jù)倉庫其實質(zhì)就是一種專門為查詢和分析而構(gòu)建的事務(wù)性數(shù)據(jù)的拷貝。 這其實是單純的從功能的視角來定義的。[我倒覺是單純的從技術(shù)實現(xiàn)的視角來看的:-), 的確如此。]
參考: https://www.1keydata.com/datawarehousing/inmon-kimball.html
數(shù)據(jù)倉庫的發(fā)展歷史和成熟度模型
數(shù)據(jù)倉庫和數(shù)據(jù)庫一樣歷史悠久,但是顯然并沒有如數(shù)據(jù)庫技術(shù)一樣,被廣大技術(shù)人所熟知。
隨著大數(shù)據(jù)和人工智能的興起,我覺得這些數(shù)據(jù)倉庫作為面向未來的基礎(chǔ)之一,應(yīng)該被軟件開發(fā)工程是、數(shù)據(jù)工程師、數(shù)據(jù)分析師、算法工程師、算法科學(xué)家所共知。
筆者最早接觸數(shù)據(jù)倉庫這一概念的時候,是來自研究生數(shù)據(jù)挖掘方向?qū)?推薦的必修課書籍《數(shù)據(jù)挖掘概念與技術(shù)》(韓家煒版), 但是當時,完全不知道是講什么,跟數(shù)據(jù)挖掘的關(guān)系是什么,
而后作數(shù)據(jù)挖掘相關(guān)研究時候,也沒有使用過數(shù)據(jù)倉庫產(chǎn)品,所以一直是半懵逼狀態(tài)。在工作后從事BI軟件的開發(fā),大數(shù)據(jù)開發(fā)以及其他的數(shù)據(jù)工程之后,才真正把這些東西完全串通起來。
前兩年再重溫這本書以及相關(guān)數(shù)據(jù)倉庫書籍時,已然是比較通透了。然而在教育界,可能隨著時代的發(fā)展,大數(shù)據(jù)相關(guān)課程也在一些學(xué)校興起,但是與真實的工業(yè)界的發(fā)展還是有差距的。
而在工業(yè)界,各種概念漫天飛舞,參差不齊,很多人會在概念上將hive等同于數(shù)據(jù)倉庫, 這顯然同把mysql等同數(shù)據(jù)庫的犯的錯誤是一樣的。
早在1983年,數(shù)據(jù)倉庫的雛形就誕生了,也就是原子數(shù)據(jù)。對粒狀的,整合的歷史數(shù)據(jù)的需求催生了前所未有的數(shù)據(jù)處理方式。
1990年,ETL出現(xiàn)了,有了ETL, 很多遺留下來的應(yīng)用環(huán)境數(shù)據(jù)就可以訪問和集成了。ETL大大促進了商務(wù)智能的發(fā)展。世界頂級BI軟件公司微策略也是誕生這段時期。
1994年左右, 數(shù)據(jù)倉庫出現(xiàn)了各種各樣的擴展。比如多維的OLAP數(shù)據(jù)計算,探索性數(shù)據(jù)倉庫和ODS。正式在這個時期,數(shù)據(jù)倉庫演變成企業(yè)信息工程(CIF)。
在2000年左右出現(xiàn)了網(wǎng)絡(luò)大爆炸,這個事情,DSS應(yīng)用軟件出現(xiàn)了,企業(yè)的績效管理成為現(xiàn)實。此外,適應(yīng)性數(shù)據(jù)集市出現(xiàn)在商務(wù)智能領(lǐng)域。適應(yīng)性數(shù)據(jù)集市是一個臨時的結(jié)構(gòu),
有一些數(shù)據(jù)集市和探索型數(shù)據(jù)倉庫的特點。
CIF起源于數(shù)據(jù)倉庫。美國911事件發(fā)生以后,政府信息工廠(GIF)就出現(xiàn)了。(CIF和GIF之間的區(qū)別之一就是數(shù)據(jù)分享和集成的范圍有所不同).
從數(shù)據(jù)倉庫除非演變到企業(yè)的信息工廠(CIF)。CIF的中心就是數(shù)據(jù)倉庫。環(huán)繞著CIF就是體系實體,例如數(shù)據(jù)集市,探索型數(shù)據(jù)庫,ODS等等。
互聯(lián)網(wǎng)行業(yè)的數(shù)據(jù)倉庫和之前的傳統(tǒng)的數(shù)據(jù)倉庫就用途而言,差別不大,且都要求數(shù)據(jù)倉庫具有較好的穩(wěn)定性和可靠性。近幾年來,大的互聯(lián)網(wǎng)由于數(shù)量量大,業(yè)務(wù)繁多,
基本都會圍繞數(shù)據(jù)倉庫建立數(shù)據(jù)平臺,阿里的ODPS就是這樣一個大數(shù)據(jù)平臺。互,
2017年, TDWI(Transforming Data With Intelligence)提出了一個數(shù)據(jù)分析成熟度模型(僅供參考), 來衡企業(yè)組織內(nèi)數(shù)據(jù)分析的成熟度水平。這個模型提供了一分析項目的全貌,告訴你
現(xiàn)在在哪,下一步該走向哪,你應(yīng)該集中精力在哪塊去創(chuàng)造你數(shù)據(jù)的價值。(才發(fā)現(xiàn)該Paper居然來自前司的support,瞬間有絲絲商業(yè)軟文的感覺)

該模型有6個階段組成:孕育期、嬰兒期、兒童期、少年期、成人期、長者期。此處只作簡述,有興趣的同學(xué)可以詳見附件論文。
- 孕育期(Spreadsheet):大多數(shù)組織都有一個報表系統(tǒng)、制作、打印一堆標準報表,并定期分發(fā)給員工,常常是每周、每月、每季度。
- 嬰兒期(Spreadmarts):這個階段可能是通過Excel表格或桌面數(shù)據(jù)庫等Spreadmarts來完成數(shù)據(jù)集市的功能。每個Spreadmarts包含一系列單獨的數(shù)據(jù)、標準、規(guī)則。
Spreadmarts之間相互不統(tǒng)一,和報表、分析系統(tǒng)之間也不統(tǒng)一。但是,由于Spreadmarts方便,簡單,它無處不在,幾乎所有的組織都有大量的Spreadmarts。
但Spreadmarts讓組織(或者CEO)無法得到一個清晰、統(tǒng)一的數(shù)據(jù)全貌。Spreadmarts 很難消除,因為使用方便,自由。只有在企業(yè)到達了最后兩個階段時,
本地控制和整個組織的數(shù)據(jù)才能有效的整合在一起。 - 兒童期(Data Marts): Data marts是指一個共享的分析結(jié)構(gòu),支持一個單獨的應(yīng)用程序,業(yè)務(wù)流程或者部門。
各部門的人員搜集本部門的需求并以此對data mart進行裁剪,用來滿足本部門的需求。它能很好的滿足本部門的需求,
但是如果有跨部門的分析需求時,它就顯得力不從心了。 - 少年期(Data Warehouse): 在創(chuàng)建了幾個data marts之后,大多數(shù)的部門會意識到,他們需要把一些數(shù)據(jù)定義、規(guī)則、維度標準化,以防止將來的數(shù)據(jù)整合噩夢。
于是就數(shù)據(jù)倉庫就形成了。為了更好的監(jiān)控企業(yè)中跨部門的流程和企業(yè)的價值鏈,企業(yè)還會部署儀表盤程序,儀表盤程序的價值在于,它讓企業(yè)中更多的人從商務(wù)智能中受益,
而不僅僅是少數(shù)的高級用戶。這樣,在決策層的眼里,DW/BI可以提高企業(yè)的效率,讓更多的用戶獲得信息,并在這些信息基礎(chǔ)上做出決定,而不是拍腦袋做決定。 -
成人期(EDW):盡管數(shù)據(jù)倉庫帶來許多好處,但是仍無法完全解決數(shù)據(jù)一致性的問題?;蛘呤且驗閮?nèi)部開發(fā),或者是因為企業(yè)并購,當今許多企業(yè)有不止一個數(shù)據(jù)倉庫。
在成人期,企業(yè)強調(diào)唯一的可靠的數(shù)據(jù)來源,用以反映事實。在成人期,企業(yè)級數(shù)據(jù)倉庫作為企業(yè)內(nèi)戰(zhàn)略性的資源,用于整合數(shù)據(jù)來支持一些驅(qū)動業(yè)務(wù)的關(guān)鍵應(yīng)用程序。
在成人期,數(shù)據(jù)倉庫帶來的價值開始超過對其的投資了,尤其是在規(guī)模經(jīng)濟和快速開發(fā)上(見圖3)。
而且,這時候用戶開始發(fā)現(xiàn)數(shù)據(jù)倉庫的新的用途,這些用途甚至當時的開發(fā)人員都沒有預(yù)料到,這又進一步提高了投資回報率。
7oucaob1vv.jpeg - 長者期(BI): 一旦數(shù)據(jù)倉庫變成戰(zhàn)略性的企業(yè)資源并且和關(guān)鍵應(yīng)用程序一起驅(qū)動整個業(yè)務(wù),你的工作就基本做完了。一旦你的數(shù)據(jù)倉庫進入了長者期,它的價值將指數(shù)級增長,而用戶將漸漸感覺不到它的存在。
作為BI服務(wù),數(shù)據(jù)倉庫和分析服務(wù)器退居幕后,變?yōu)榛A(chǔ)設(shè)施的一部分。如果它不出問題,你甚至察覺不到它的存在。在社會發(fā)展過程中,我們接受了無數(shù)的服務(wù),例如電力,污水處理,交通,等等。BI服務(wù)也將成為下一個這樣的服務(wù)。
你可以參考該模型,根據(jù)公司和企業(yè)的規(guī)模來通來評估你的分析平臺的成熟度。具體來講,可以通過下面5個層面的成熟度來進行(詳見下圖的框架):
- Organization(組織): 公司戰(zhàn)略、文化、領(lǐng)導(dǎo)力、資金等方面是何種粒度支持自助分析服務(wù)的?分析已然廣泛的用于日常決策了嗎?
(我阿里的支持粒度絕對是國內(nèi)數(shù)一數(shù)二的。) - DATA MANAGEMENT(數(shù)據(jù)管理): 自助服務(wù)應(yīng)該對企業(yè)提供靈活且非??煽康臄?shù)據(jù),公司如何管理支撐自助分析的數(shù)據(jù)?
公司如何處理數(shù)據(jù)質(zhì)量問題以及數(shù)據(jù)準備、集成和獲取問題? - INFRASTRUCTURE(基礎(chǔ)設(shè)施):數(shù)據(jù)是任何一個分析活動(analytics initiative此處沒找到更貼切的翻譯,請讀者自行體會)的關(guān)鍵部分。用戶支撐
自助分析活動的體系架構(gòu)是一致的、先進的嗎?底層的基礎(chǔ)設(shè)施支撐公司所有部門和潛在用戶的自助分析到了哪種程度?能夠滿足性能要求嗎?
是否利用了新的計算來支持需求? - ANALYTICS(分析):自助分析的范圍是什么?業(yè)務(wù)分析人員、IT人員和其他量化人員之外的用戶能夠使用它做什么?
這里面包括各種不同的分析(方法)的使用以及結(jié)果如何發(fā)布到組織機構(gòu)。當然也包括培訓(xùn)。 - GOVERNANCE(管理):公司里面支撐自助分析的數(shù)據(jù)管理策略是一致的嗎?公司能夠管理用戶的數(shù)據(jù)發(fā)現(xiàn)和數(shù)據(jù)探索嗎?
是否設(shè)置了太多的限制而阻礙了用戶對(數(shù)據(jù))洞見的探索?所有的政策都是到位的,合適的嗎?是有專人負責(zé)的嗎?
16_14_34__02_02_2019.jpg
參考:https://cloud.tencent.com/developer/article/1102315
英文原文:https://tdwi.org/pages/maturity-model/analytics-maturity-model-assessment-tool.aspx?m=1
數(shù)據(jù)倉庫系統(tǒng)的體系架構(gòu)
雖然不同的數(shù)據(jù)倉庫系統(tǒng)有不同的結(jié)構(gòu), 但大體上而言,基本所有的數(shù)據(jù)倉庫系統(tǒng)都有以下幾層(來自Kimball的劃分):

- Data Source Layer : 源數(shù)據(jù)層, 這層表示將要feed到數(shù)據(jù)倉庫各種數(shù)據(jù)源。
可以分為以下幾個類別:操作型的數(shù)據(jù)、日志數(shù)據(jù)、內(nèi)部市場調(diào)研數(shù)據(jù)、第三方數(shù)據(jù)(如人口普查數(shù)據(jù)) - Data Extraction Layer : 數(shù)據(jù)抽取層, 表示從源數(shù)據(jù)里面基本不做轉(zhuǎn)換的拉到數(shù)據(jù)滄海的數(shù)據(jù) (個人更傾向于將其理解為數(shù)據(jù)連接層,這樣更便于后面的ETL層區(qū)分開來)。
- Staging Area : 數(shù)據(jù)準備(聚集)區(qū), 這層數(shù)據(jù)通常存在數(shù)據(jù)倉庫或者數(shù)據(jù)集市中。這樣一個公共區(qū)的存在是為了后續(xù)進一步的數(shù)據(jù)處理和整合更加便利。
- ETL Layer:ETL層,這層使得數(shù)據(jù)具有了"Intelligence"屬性, 因為該層主要的邏輯是將具有事物屬性的數(shù)據(jù)轉(zhuǎn)換成具有分析屬性。
- Data Storage Layer: 數(shù)據(jù)存儲區(qū), 數(shù)據(jù)儲存層里面存儲的是已經(jīng)經(jīng)過ETL轉(zhuǎn)換的干凈的數(shù)據(jù)。根據(jù)不同的功能和范疇,存儲層可以分為類型的實體ODS、Data Mart、Data Warehouse。
在一個給定的系統(tǒng)里面,你可能擁有三個實體中的其中一個或者二個或者全部。 - Data Logic Layer: 數(shù)據(jù)邏輯層, 這是商業(yè)規(guī)則的存儲層。該層的存在不影響底層的數(shù)據(jù)轉(zhuǎn)換規(guī)則,但是影響上層的報表展示形式。
- Data Presentation Layer: 數(shù)據(jù)展示層, 這層涉及信息如何到達用戶。它可能是瀏覽器中的表格或者圖表報表,或者是每日自動生成并發(fā)送的Email報表,或者是一些異常警告等等形勢。
- Metadata Layer:元數(shù)據(jù)層,該層用于描述數(shù)據(jù)倉庫存儲的數(shù)據(jù)。
- System Operations Layer: 系統(tǒng)操作層,該層包括了數(shù)據(jù)倉庫系統(tǒng)中操作的信息,比如ETL任務(wù)的狀態(tài)、系統(tǒng)的性能,用戶access記錄等。
其中Data Storage Layer中,ODS、Data Mart、Data Warehouse中三個概念相對較難理解,再展開下:
ODS(Operational Data Store)
數(shù)據(jù)庫用戶ODS數(shù)據(jù)層主要管理把業(yè)務(wù)數(shù)據(jù)層的數(shù)據(jù)存儲到ODS數(shù)據(jù)層,它的數(shù)據(jù)表主要就是來源于業(yè)務(wù)數(shù)據(jù)表,通過一些存儲過程把業(yè)務(wù)數(shù)據(jù)表結(jié)構(gòu)改變成基層的數(shù)據(jù)倉庫的表結(jié)構(gòu)。
ODS是一個面向主題的、集成的、可變的、當前的細節(jié)數(shù)據(jù)集合,用于支持企業(yè)對于即時性的、操作性的、集成的全體信息的需求。常常被作為數(shù)據(jù)倉庫的過渡,也是數(shù)據(jù)倉庫項目的可選項之一。
為什么需要有一個ODS系統(tǒng)呢?一般在帶有ODS的系統(tǒng)體系結(jié)構(gòu)中,ODS都具備如下幾個作用:
1) 在業(yè)務(wù)系統(tǒng)和數(shù)據(jù)倉庫之間形成一個隔離層。
2) 轉(zhuǎn)移一部分業(yè)務(wù)系統(tǒng)細節(jié)查詢的功能。
3) 完成數(shù)據(jù)倉庫中不能完成的一些功能。
在實際應(yīng)用中,如果ETL過程中從業(yè)務(wù)數(shù)據(jù)表映射到數(shù)據(jù)倉庫比較復(fù)雜,可以考慮ods這個中間層。有點類似中間表,這樣可以方便開發(fā)人員debug,查看數(shù)據(jù)出錯的環(huán)節(jié)。然后再從ods層到數(shù)據(jù)倉庫層進一步映射。比如說你的基礎(chǔ)事實表,涉及多個業(yè)務(wù)數(shù)據(jù)源的融合或者join等。
Data Warehouse vs Data Mart
簡單的說:數(shù)據(jù)倉庫是面向整個企業(yè)的,而數(shù)據(jù)集市可能是面向部門或者某個地區(qū)的分公司等。類似于中國電信和中國電信浙江分公司關(guān)系。
數(shù)據(jù)倉庫的設(shè)計方法論上有兩種方式:自頂向上,自上向下。這樣,你可以先有數(shù)據(jù)集市提取組織成你的數(shù)據(jù)倉庫,也可以先有數(shù)據(jù)倉庫,然后通過地區(qū)粗維度生產(chǎn)中間數(shù)據(jù)作為部分或者區(qū)域性的數(shù)據(jù)集市。
DW數(shù)據(jù)層
數(shù)據(jù)庫用戶DW主要管理把ODS數(shù)據(jù)層的數(shù)據(jù)存儲到DW數(shù)據(jù)層,它的數(shù)據(jù)表主要就是來源于ODS數(shù)據(jù)表,通過一些存儲過程把ODS數(shù)據(jù)表結(jié)構(gòu)改變成項目主題數(shù)據(jù)倉庫的表結(jié)構(gòu)。
DW數(shù)據(jù)層還管理一些對存儲過程的記錄表,方便數(shù)據(jù)倉庫的維護和管理。
從技術(shù)實現(xiàn)的角度來講,一個完整的數(shù)倉體系大都要解決下面的幾個重點問題:
- 元數(shù)據(jù)管理:回答"數(shù)據(jù)倉庫里面的數(shù)據(jù)是怎么樣"的問題。-"元"。
- 數(shù)據(jù)采集:解決如何將源數(shù)據(jù)進入數(shù)據(jù)倉庫。-"入"。
- 數(shù)據(jù)存儲與計算:回答數(shù)據(jù)如何存儲?如何計算?- "存" "算"
- 調(diào)度與監(jiān)控:如何調(diào)度采集、存儲、計算任務(wù)?如何監(jiān)控這些任務(wù)?-"調(diào)度"
- 數(shù)據(jù)應(yīng)用:解決如何將數(shù)據(jù)倉庫的數(shù)據(jù) -"出" "用"
數(shù)據(jù)倉庫的設(shè)計
數(shù)據(jù)倉庫項目的生命周期
一個完整的數(shù)據(jù)倉庫應(yīng)用項目的周期,可能包括下面幾個步驟:
- Requirement Gathering: 需求收集階段,這塊數(shù)據(jù)開發(fā)工程區(qū)別于一般業(yè)務(wù)應(yīng)用系統(tǒng)開發(fā)工程比較難以控制的一步。
一方面一般用戶很難清楚的知道自己的真實需求, 另外一方面很多的深層次需求是在看到數(shù)據(jù)之后才能,用戶才能想到的。 - Physical Environment Setup: 這塊包括兩塊, 一塊是物理機器的準備,另外一塊是相關(guān)軟件、工具的選址和安裝。在阿里這塊比較簡單, 整個odps的生態(tài)系統(tǒng)已經(jīng)很完善了。大家基本可以忽略。
- Data Modeling: 數(shù)倉數(shù)據(jù)模型的建立是數(shù)倉項目非常重要的步驟,包括物理模型和邏輯模型兩部分。對于已有數(shù)倉的基礎(chǔ)設(shè)施的企業(yè)而言,則主要需要做的是數(shù)據(jù)模型的建立。
- ETL: ETL是數(shù)倉項目中不是技術(shù)最難的一步,但是卻是最重要最耗時的一步。實際生產(chǎn)中的數(shù)據(jù)總數(shù)由于各種原因?qū)е赂鞣N難以預(yù)料數(shù)據(jù)問題,除非你在調(diào)研階段看到了每一條數(shù)據(jù),
否則你永遠無法精確預(yù)知它所消耗的時間工時。 - OLAP Cube Design: 這塊涉及與Data Modeling所設(shè)計的數(shù)據(jù)模型緊密相關(guān), 它源于Requirement Gathering, 但是應(yīng)該不限于你所收集到的需求,你的設(shè)計應(yīng)該盡可能的讓它滿足
當前和未來可能的需求。 - Front End Development: 不管OLAP和數(shù)據(jù)整合的多強, 如果用戶無法可視化報表, 數(shù)據(jù)倉庫的價值對應(yīng)用戶而言, 則是0.
所以前端的開發(fā)對于數(shù)據(jù)倉庫項目的啟動非常重要,不過你不是非要一個前端開發(fā)來參與項目,除非現(xiàn)有的可視化工具(一般有BI工具提供)不能滿足你的可視化需求。- Report Development: 報表的開發(fā)工作, 報表的specification通常直接來源于需求階段。對應(yīng)終端用戶而言,最直接的就是他們直接要求的報表樣式。
但有時候,受限于實際數(shù)據(jù)情況、BI工具的支持情況、工時影響等,最終可能并非完全是用戶所要求的展示樣式。
另外有些時候,最終用戶所要求的樣式,并非他所想說明問題的最佳展示方式,這時候都需要開發(fā)人員主動把握。
- Report Development: 報表的開發(fā)工作, 報表的specification通常直接來源于需求階段。對應(yīng)終端用戶而言,最直接的就是他們直接要求的報表樣式。
- Performance Tuning: 調(diào)優(yōu)并非在所有的應(yīng)用中都會遇到。調(diào)優(yōu)主要可能存在三個階段中:ETL階段、Query Process階段、Report Delivery階段。另外也應(yīng)該包括對存儲和計算的調(diào)優(yōu)。
- 其中Query Optimization比較重要, 這塊最主要的是計算任務(wù)的調(diào)優(yōu),計算任務(wù)的執(zhí)行周期,決定了你后續(xù)報表更新的周期。
- Quality Assurance: 質(zhì)量保障,很少有公司會為數(shù)倉項目設(shè)立獨立的AQ team來對結(jié)果進行測試,或者說QA通常來自于最終的用戶。一般的QA team對數(shù)倉知之甚少。
因此,實際中,通常這一步驟被skip了。 - Rolling out to Production: 生產(chǎn)環(huán)境發(fā)布。
- Production Maintenance: 生產(chǎn)環(huán)境維護。一旦進入生產(chǎn)環(huán)境,數(shù)據(jù)倉庫必須維護。
- Incremental Enhancements: 迭代改進。在業(yè)務(wù)變化迅速的事情,迭代改進基本是必須的。
實際過程中,上面的步驟并不會嚴格執(zhí)行。而且,在互聯(lián)網(wǎng)行業(yè)的數(shù)據(jù)倉庫,由于數(shù)據(jù)和業(yè)務(wù)變化迅速,所以可以稱之為當代的數(shù)倉開發(fā)過程為敏捷數(shù)據(jù)倉庫開發(fā)。
數(shù)據(jù)倉庫設(shè)計模型
數(shù)據(jù)倉庫的設(shè)計方法主要有自頂向下和自底向上兩種方式,這個大家一般比較容易理解。
但具體采取哪種方式,實際取決于企業(yè)內(nèi)部業(yè)務(wù)的大小,一般對于比較大型的企業(yè)有中業(yè)務(wù),自頂向下的方式會比較不現(xiàn)實,因為沒有人能全局把握所有的業(yè)務(wù),
而對于小公司而言,時間允許的情況下,自頂向下則更佳。
數(shù)倉建模的主要有三種方法:維度建模法、實體建模、3NF建模。其中實體建模和3NF建模比較不常用,了解一下即可,此處重點介紹常用的維度建模方法。
根據(jù)維度維度建模法可以創(chuàng)建下面3種模型:
-
星型:簡單事實和維表
Screen Shot 2016-11-28 at 4.14.11 PM.png 雪花型:在星型基礎(chǔ)上,分解維表

-
星系型:多個事實表的雪花型的組合
Screen Shot 2016-11-28 at 4.14.44 PM.png
維度模型中概念簡介(Fact,Attribute,Dimension,Metric) Fact:對于detail的某些數(shù)字類型的列, Metric則為在事實列基礎(chǔ)上進行的聚合函數(shù)的計算結(jié)果。事實表則有需要用戶group by的attribute和fact 列組成。
Attribute:為業(yè)務(wù)表中的某些列,需要i走 group 的列
多個Attribute 組成 Dimension。當然單個attribute也可以是1維的dimension。
Metric(Measure):需要考察的數(shù)據(jù)指標/度量。通常在事實表或者其他中間表的某些列上做聚合而成。
Slowly Changing Dimension
在數(shù)據(jù)倉庫的實際建設(shè)過程中,還有普遍面臨的問題是Slowly Changing Dimension(緩慢變化維度):
例如:
Christina是ABC公司的一個客戶,最初她住在Chicago, Illinois。所以,最早的記錄是這樣子的:
| Customer Key | Name | State |
|---|---|---|
| 1001 | Christina | Illinois |
一段時間之后,她遷居到了Los Angeles, California(January, 2003), 那么ABC公司如何更改上表來反應(yīng)這種變化呢?
這就是一個簡單的"Slowly Changing Dimension"問題。
一般來講,我們有三種方式來解決這類問題:
Type 1: The new record replaces the original record. No trace of the old record exists.
在上例中,則替換原始記錄,則變成:
| Customer Key | Name | State |
|---|---|---|
| 1001 | Christina | California |
這是最簡單的方式,我們有50%的case是這么干的,但是會損失重要的歷史信息。
Type 2: A new record is added into the customer dimension table. Therefore, the customer is treated essentially as two people.
在上例中,新的記錄會添加進表格中:
| Customer Key | Name | State |
|---|---|---|
| 1001 | Christina | Illinois |
| 1005 | Christina | California |
這種方式會保留所有的歷史記錄,但是數(shù)倉存儲會迅速增長。也有50%的case是這樣做的。
Type 3: The original record is modified to reflect the change.
在上例中,會擴展成一張寬表:
| Customer Key | Name | Original State | Current State | Effective Date |
|---|---|---|---|---|
| 1001 | Christina | Illinois | California | 15-JAN-2003 |
在實際中,這種類型比較少用。如果這種變化是有限次的,可預(yù)估的,也可以使用。
- Factless Fact Table:沒有事實的事實表可能看起來很愚蠢,但是在現(xiàn)實生活中,無事實的事實表時比較有用的。
例如:學(xué)生上課記錄,這個case中,事實表包含3個維度:學(xué)生維度、時間維度、課程維度。無事實的事實表時這樣子的:
| STUDENT_ID |
|---|
| CLASS_ID |
| TIME_ID |
在數(shù)倉設(shè)計中,無事實的事實表是最簡單也是最靈活的。如上圖的表,雖然簡單,它已經(jīng)能夠回答下面的兩個問題:
- 在指定的某天,有多少學(xué)生參加了某堂課?
- 在給定的某天,學(xué)生平均參加了多少節(jié)課?
在建立多維模型之前,我們一般會根據(jù)需求首先詳細的設(shè)計模型,應(yīng)該包含哪些維和度量,應(yīng)該讓數(shù)據(jù)保持在哪個粒度上才能滿足用戶的分析需求。
其他參考:
http://www.cnblogs.com/mq0036/p/4155832.html
http://www.myexception.cn/data-warehouse/1821560.html
http://blog.itpub.net/23659908/viewspace-1118762/
http://www.cnblogs.com/hadoopdev/p/4235257.html
http://webdataanalysis.net/web-data-warehouse/multidimensional-data-model/
http://www.cnblogs.com/wuhuacong/archive/2010/05/11/1732710.html
辛苦總結(jié),轉(zhuǎn)載請注明出處。謝謝!



