更新時間:2021-07-23 來源:黑馬程序員 瀏覽量:
為什么要分層?
作為一名數據的規(guī)劃者,我們肯定希望自己的數據能夠有秩序地流轉,數據的整個生命周期能夠清晰明確被設計者和使用者感知到。直觀來講就是如圖這般層次清晰、依賴關系直觀。
因此,我們需要一套行之有效的數據組織和管理方法來讓我們的數據體系更有序,這就是談到的數據分層。數據分層并不能解決所有的數據問題,但是,數據分層卻可以給我們帶來如下的好處:
1)清晰數據結構:每一個數據分層都有它的作用域和職責,在使用表的時候能更方便地定位和理解;
2)減少重復開發(fā):規(guī)范數據分層,開發(fā)一些通用的中間層數據,能夠減少極大的重復計算;
3)統(tǒng)一數據口徑:通過數據分層,提供統(tǒng)一的數據出口,統(tǒng)一對外輸出的數據口徑;
4)復雜問題簡單化:將一個復雜的任務分解成多個步驟來完成,每一層解決特定的問題。
為了滿足前面提到好處,通常將數據模型分為三層:數據運營層( ODS )、數據倉庫層(DW)和數據應用層(APP)。簡單來講,我們可以理解為:ODS層存放的是接入的原始數據,DW層是存放我們要重點設計的數據倉庫中間層數據,APP是面向業(yè)務定制的應用數據。下面詳細介紹這三層的設計。
數據模型的分層
1)源數據層(ODS)
此層數據無任何更改,直接沿用外圍系統(tǒng)數據結構和數據,不對外開放;為臨時存儲層,是接口數據的臨時存儲區(qū)域,為后一步的數據處理做準備。
2)數據倉庫層(DW)
也稱為細節(jié)層,DW 層的數據應該是一致的、準確的、干凈的數據,即對源系統(tǒng)數據進行了清洗(去除了雜質)后的數據。
此層可以細分為三層:
明細層DWD(Data Warehouse Detail):存儲明細數據,此數據是最細粒度的事實數據。該層一般保持和ODS層一樣的數據粒度,并且提供一定的數據質量保證。同時,為了提高數據明細層的易用性,該層會采用一些維度退化手法,將維度退化至事實表中,減少事實表和維表的關聯。
中間層DWM(Data WareHouse Middle):存儲中間數據,為數據統(tǒng)計需要創(chuàng)建的中間表數據,此數據一般是對多個維度的聚合數據,此層數據通常來源于DWD層的數據。
業(yè)務層DWS(Data WareHouse Service):存儲寬表數據,此層數據是針對某個業(yè)務領域的聚合數據,業(yè)務層的數據通常來源與此層,為什么叫寬表,主要是為了業(yè)務層的需要在這一層將業(yè)務相關的所有數據統(tǒng)一匯集起來進行存儲,方便業(yè)務層獲取。此層數據通常來源與DWD和DWM層的數據。
在實際計算中,如果直接從DWD或者ODS計算出寬表的統(tǒng)計指標,會存在計算量太大并且維度太少的問題,因此一般的做法是,在DWM層先計算出多個小的中間表,然后再拼接成一張DWS的寬表。由于寬和窄的界限不易界定,也可以去掉DWM這一層,只留DWS層,將所有的數據在放在DWS亦可。
3)數據應用層(DA 或 APP)
前端應用直接讀取的數據源;根據報表、專題分析的需求而計算生成的數據。
4)維表層(Dimension)
最后補充一個維表層,維表層主要包含兩部分數據:
A)高基數維度數據:一般是用戶資料表、商品資料表類似的資料表。數據量可能是千萬級或者上億級別。
B)低基數維度數據:一般是配置表,比如枚舉值對應的中文含義,或者日期維表。數據量可能是個位數或者幾千幾萬。
(3)問題擴展
數據倉庫系統(tǒng)架構
上圖系統(tǒng)各部分的執(zhí)行流程是:
1)確定分析所依賴的源數據。
2)通過ETL將源數據采集到數據倉庫。
3)數據按照數據倉庫提供的主題結構進行存儲。
4)根據各部門的業(yè)務分析要求創(chuàng)建數據集市(數據倉庫的子集)。
5)決策分析、報表等應用系統(tǒng)從數據倉庫查詢數據、分析數據。
6)用戶通過應用系統(tǒng)查詢分析結果、報表。
(4)結合項目中使用
電商網站的數據體系設計
這里針對用戶訪問日志這一部分數據進行舉例說明:
在ODS層中,由于各端的開發(fā)團隊不同或者各種其它問題,用戶的訪問日志被分成了好幾張表上報到了我們的ODS層。
為了方便大家的使用,我們在DWD層做了一張用戶訪問行為天表,在這里,我們將PC網頁、H5、小程序和原生APP訪問日志匯聚到一張表里面,統(tǒng)一字段名,提升數據質量,這樣就有了一張可供大家方便使用的明細表了。
在DWM層,我們會從DWD層中選取業(yè)務關注的核心維度來做聚合操作,比如只保留人、商品、設備和頁面區(qū)域維度。類似的,我們這樣做很多個DWM的中間表。
然后在DWS層,我們將一個人在整個網站中的行為數據放到一張表中,這就是我們的寬表了,有了這張表,就可以快速滿足大部分的通用型業(yè)務需求了。
最后,在APP應用層,根據需求從DWS層的一張或者多張表取出數據拼接成一張應用表即可。