數(shù)據(jù)倉(cāng)庫(kù)?真的有必要嗎?
我曾經(jīng)和一個(gè)業(yè)務(wù)系統(tǒng)負(fù)責(zé)人聊起數(shù)據(jù)倉(cāng)庫(kù),他感到很疑惑,“我們數(shù)據(jù)庫(kù)里不是有現(xiàn)成的數(shù)據(jù)嗎?你們數(shù)據(jù)分析師直接用就好了,為什么還要花人力物力去建設(shè)什么數(shù)據(jù)倉(cāng)庫(kù)”,最后甚至直接說(shuō)“我們的數(shù)據(jù)庫(kù)就是你要的數(shù)據(jù)倉(cāng)庫(kù)”。
為什么公司要建立數(shù)據(jù)倉(cāng)庫(kù),而不直接使用業(yè)務(wù)系統(tǒng)保存的數(shù)據(jù)?
回答這個(gè)問(wèn)題之前,我們先來(lái)看看業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)的區(qū)別。
業(yè)務(wù)系統(tǒng)需要確保自身的正常運(yùn)轉(zhuǎn),并能快速的處理事務(wù),因此一般是一次處理一個(gè)事務(wù)。通過(guò)與用戶的交互,將注冊(cè)信息、訂單信息、活動(dòng)狀態(tài)、用戶投訴等信息記錄下來(lái)。業(yè)務(wù)系統(tǒng)只要根據(jù)既定的業(yè)務(wù)過(guò)程完成相應(yīng)的任務(wù)即可,因此,業(yè)務(wù)系統(tǒng)通常不用維護(hù)歷史數(shù)據(jù),只需修改數(shù)據(jù)以反映業(yè)務(wù)的最新?tīng)顟B(tài)。
如:我續(xù)費(fèi)了一年的視頻會(huì)員,在我付完款后,視頻App里的會(huì)員狀態(tài)就要及時(shí)更新
而數(shù)據(jù)倉(cāng)庫(kù)用于分析企業(yè)的運(yùn)營(yíng)狀況,計(jì)算新成交的訂單金額,對(duì)比過(guò)去一個(gè)月找到成交金額波動(dòng)的原因,通過(guò)用戶提交的投訴找到用戶不滿意的根源。數(shù)據(jù)倉(cāng)庫(kù)不會(huì)一次只處理一個(gè)事務(wù),因?yàn)橛脩舻囊淮尾樵兺ǔP枰阉鞒汕先f(wàn)條事務(wù),并將查詢結(jié)果放入到一個(gè)查詢集合中。而且,為了滿足更廣闊的分析需求,數(shù)據(jù)倉(cāng)庫(kù)通常需要保存歷史數(shù)據(jù),以便于能精確評(píng)估公司在某一段時(shí)間內(nèi)的經(jīng)營(yíng)情況。
如:用戶每次續(xù)費(fèi)視頻會(huì)員時(shí),數(shù)據(jù)倉(cāng)庫(kù)需要記錄下每次狀態(tài)的改變,以用于后續(xù)場(chǎng)景的復(fù)現(xiàn)和分析。
因此,業(yè)務(wù)系統(tǒng)和數(shù)據(jù)倉(cāng)庫(kù)面向的用戶及其需求是完全不一樣的。
- 關(guān)聯(lián)取數(shù)效率低
業(yè)務(wù)系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)基本滿足三范式,因此取數(shù)分析時(shí)需要關(guān)聯(lián)很多的數(shù)據(jù)表才能得到想要的數(shù)據(jù),比較麻煩,而且數(shù)據(jù)還無(wú)法復(fù)用,導(dǎo)致分析效率比較低。
- 無(wú)法支持某些分析場(chǎng)景
基于業(yè)務(wù)系統(tǒng)數(shù)據(jù)的特性,往往不能支持某些場(chǎng)景的分析。業(yè)務(wù)系統(tǒng)不記錄歷史數(shù)據(jù),只保留當(dāng)前狀態(tài),比如我們想知道某個(gè)視頻會(huì)員從試用、開(kāi)通、使用、到期這段時(shí)間內(nèi)的完整情況,但是業(yè)務(wù)系統(tǒng)里只有最新的會(huì)員等級(jí)和到期時(shí)間,是無(wú)法支持這種場(chǎng)景下的分析的。
你可能經(jīng)常在企業(yè)經(jīng)營(yíng)管理者口中聽(tīng)到這些:
1)我們收集了海量的數(shù)據(jù),但是一直無(wú)法充分利用起來(lái)
2)我們需要以各種方式方便的對(duì)數(shù)據(jù)進(jìn)行處理
3)業(yè)務(wù)/運(yùn)營(yíng)/銷(xiāo)售/分析/算法需要更加方便的獲取數(shù)據(jù)
4)我需要隨時(shí)隨地了解企業(yè)的經(jīng)營(yíng)狀況, 并將最值得關(guān)注的內(nèi)容展示給我
5)會(huì)議自始至終爭(zhēng)論的是誰(shuí)的數(shù)據(jù)正確,而不是聚焦于分析和決策
6)希望管理者能夠使用數(shù)據(jù)來(lái)制定基于事實(shí)的決策
而以上問(wèn)題構(gòu)成了數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的基本需求。
數(shù)倉(cāng)分層設(shè)計(jì)
數(shù)據(jù)總是用于兩個(gè)目的,業(yè)務(wù)系統(tǒng)的應(yīng)用和分析決策的制定。將數(shù)據(jù)縱向分層,將一個(gè)復(fù)雜的數(shù)據(jù)處理任務(wù)拆解成多個(gè)步驟來(lái)完成,每一層只處理一個(gè)步驟,簡(jiǎn)單且容易理解。
將數(shù)據(jù)倉(cāng)庫(kù)分為三層:
- 數(shù)據(jù)引入層(ODS,Operational Data Store)
- 數(shù)據(jù)公共層(CDM,Common Dimenions Model)
- 數(shù)據(jù)應(yīng)用層(ADS,Application Data Store)
數(shù)據(jù)引入層(ODS):與目前業(yè)務(wù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)保持一致,方便核對(duì)數(shù)據(jù),追溯源頭。
數(shù)據(jù)公共層(CDM):維度表(DIM)、公共匯總層(DWS)、明細(xì)事實(shí)表(DWD)
以維度模型方法作為理論基礎(chǔ),提高明細(xì)數(shù)據(jù)表的易用性,提升公共指標(biāo)的復(fù)用性,減少重復(fù)加工。
數(shù)據(jù)應(yīng)用層(ADS):數(shù)據(jù)產(chǎn)品和數(shù)據(jù)報(bào)表的數(shù)據(jù)來(lái)源
數(shù)據(jù)分析師一般使用的是公共層,里面有維度數(shù)據(jù),明細(xì)數(shù)據(jù)和輕度匯總數(shù)據(jù),基本能滿足各類分析需求。
維度建模方法
ODS層中的數(shù)據(jù)與業(yè)務(wù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)基本保持一致。業(yè)務(wù)系統(tǒng)是按照流程組織數(shù)據(jù)的,為保證流程的完整和使用的方便,并沒(méi)有按照業(yè)務(wù)的本質(zhì)來(lái)組織數(shù)據(jù),不適合做分析和挖掘。
對(duì)于數(shù)倉(cāng)來(lái)說(shuō),最重要的就是CDM公共層,從業(yè)務(wù)完整性的角度出發(fā),不考慮系統(tǒng)流程,重新組織數(shù)據(jù)。公共層的目標(biāo)是建設(shè)一套覆蓋全業(yè)務(wù)域、涵蓋所有歷史數(shù)據(jù)的企業(yè)數(shù)據(jù)體系,利用這套數(shù)據(jù)體系可以還原企業(yè)在任意時(shí)刻的業(yè)務(wù)運(yùn)轉(zhuǎn)狀態(tài)。
建設(shè)CDM公共層最常用的技術(shù)就是維度建模,因?yàn)樗m合大數(shù)據(jù)時(shí)代數(shù)據(jù)量巨大的特點(diǎn)。簡(jiǎn)單來(lái)說(shuō),就是一張事實(shí)表+多張維度表。
當(dāng)所有維表都直接連接到“ 事實(shí)表”上時(shí),整個(gè)圖解就像星星一樣,故也將該模型稱為星型模型。
與業(yè)務(wù)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)對(duì)比,我們可以發(fā)現(xiàn),維度建模有以下特點(diǎn):
1)模型簡(jiǎn)單易理解
站在業(yè)務(wù)的角度上,用“一張事實(shí)表+多張維度表”的模式組織數(shù)據(jù),僅有維度、事實(shí)兩種類型數(shù)據(jù)??梢院?jiǎn)單的理解星型模型,就是我們把where和group后面的字段放入維度表中,把sum和count中的字段放入事實(shí)表中,并在事實(shí)表中加入維度的鍵值用于關(guān)聯(lián)。
2)可擴(kuò)展性好
可以在不改變數(shù)據(jù)粒度的情況下,方便地增加新的分析維度和事實(shí),不會(huì)影響正在使用的報(bào)表和數(shù)據(jù)應(yīng)用。
4)數(shù)據(jù)冗余
構(gòu)建維度表和事實(shí)表都需要大量的數(shù)據(jù)預(yù)處理,導(dǎo)致大量的ETL工作,并且可以看出,相比業(yè)務(wù)系統(tǒng)的精簡(jiǎn),星型模型明顯是“用空間換易用和效率”,存在大量的數(shù)據(jù)冗余。






