首頁技術(shù)文章正文

Hive數(shù)據(jù)分層有哪些優(yōu)點?具體每一層含義是什么?

更新時間:2021-07-23 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

為什么要分層?
作為一名數(shù)據(jù)的規(guī)劃者,我們肯定希望自己的數(shù)據(jù)能夠有秩序地流轉(zhuǎn),數(shù)據(jù)的整個生命周期能夠清晰明確被設(shè)計者和使用者感知到。直觀來講就是如圖這般層次清晰、依賴關(guān)系直觀。

Hive數(shù)據(jù)倉庫分層
但是,大多數(shù)情況下,我們完成的數(shù)據(jù)體系卻是依賴復(fù)雜、層級混亂的。如下的右圖,在不知不覺的情況下,我們可能會做出一套表依賴結(jié)構(gòu)混亂,甚至出現(xiàn)循環(huán)依賴的數(shù)據(jù)體系。
Hive數(shù)據(jù)倉庫分層

因此,我們需要一套行之有效的數(shù)據(jù)組織和管理方法來讓我們的數(shù)據(jù)體系更有序,這就是談到的數(shù)據(jù)分層。數(shù)據(jù)分層并不能解決所有的數(shù)據(jù)問題,但是,數(shù)據(jù)分層卻可以給我們帶來如下的好處:
1)清晰數(shù)據(jù)結(jié)構(gòu):每一個數(shù)據(jù)分層都有它的作用域和職責(zé),在使用表的時候能更方便地定位和理解;
2)減少重復(fù)開發(fā):規(guī)范數(shù)據(jù)分層,開發(fā)一些通用的中間層數(shù)據(jù),能夠減少極大的重復(fù)計算;
3)統(tǒng)一數(shù)據(jù)口徑:通過數(shù)據(jù)分層,提供統(tǒng)一的數(shù)據(jù)出口,統(tǒng)一對外輸出的數(shù)據(jù)口徑;
4)復(fù)雜問題簡單化:將一個復(fù)雜的任務(wù)分解成多個步驟來完成,每一層解決特定的問題。

為了滿足前面提到好處,通常將數(shù)據(jù)模型分為三層:數(shù)據(jù)運營層( ODS )、數(shù)據(jù)倉庫層(DW)和數(shù)據(jù)應(yīng)用層(APP)。簡單來講,我們可以理解為:ODS層存放的是接入的原始數(shù)據(jù),DW層是存放我們要重點設(shè)計的數(shù)據(jù)倉庫中間層數(shù)據(jù),APP是面向業(yè)務(wù)定制的應(yīng)用數(shù)據(jù)。下面詳細介紹這三層的設(shè)計。

數(shù)據(jù)模型的分層

1)源數(shù)據(jù)層(ODS)
此層數(shù)據(jù)無任何更改,直接沿用外圍系統(tǒng)數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù),不對外開放;為臨時存儲層,是接口數(shù)據(jù)的臨時存儲區(qū)域,為后一步的數(shù)據(jù)處理做準備。

2)數(shù)據(jù)倉庫層(DW)
也稱為細節(jié)層,DW 層的數(shù)據(jù)應(yīng)該是一致的、準確的、干凈的數(shù)據(jù),即對源系統(tǒng)數(shù)據(jù)進行了清洗(去除了雜質(zhì))后的數(shù)據(jù)。

此層可以細分為三層:
明細層DWD(Data Warehouse Detail):存儲明細數(shù)據(jù),此數(shù)據(jù)是最細粒度的事實數(shù)據(jù)。該層一般保持和ODS層一樣的數(shù)據(jù)粒度,并且提供一定的數(shù)據(jù)質(zhì)量保證。同時,為了提高數(shù)據(jù)明細層的易用性,該層會采用一些維度退化手法,將維度退化至事實表中,減少事實表和維表的關(guān)聯(lián)。

中間層DWM(Data WareHouse Middle):存儲中間數(shù)據(jù),為數(shù)據(jù)統(tǒng)計需要創(chuàng)建的中間表數(shù)據(jù),此數(shù)據(jù)一般是對多個維度的聚合數(shù)據(jù),此層數(shù)據(jù)通常來源于DWD層的數(shù)據(jù)。

業(yè)務(wù)層DWS(Data WareHouse Service):存儲寬表數(shù)據(jù),此層數(shù)據(jù)是針對某個業(yè)務(wù)領(lǐng)域的聚合數(shù)據(jù),業(yè)務(wù)層的數(shù)據(jù)通常來源與此層,為什么叫寬表,主要是為了業(yè)務(wù)層的需要在這一層將業(yè)務(wù)相關(guān)的所有數(shù)據(jù)統(tǒng)一匯集起來進行存儲,方便業(yè)務(wù)層獲取。此層數(shù)據(jù)通常來源與DWD和DWM層的數(shù)據(jù)。

在實際計算中,如果直接從DWD或者ODS計算出寬表的統(tǒng)計指標,會存在計算量太大并且維度太少的問題,因此一般的做法是,在DWM層先計算出多個小的中間表,然后再拼接成一張DWS的寬表。由于寬和窄的界限不易界定,也可以去掉DWM這一層,只留DWS層,將所有的數(shù)據(jù)在放在DWS亦可。

3)數(shù)據(jù)應(yīng)用層(DA 或 APP)
前端應(yīng)用直接讀取的數(shù)據(jù)源;根據(jù)報表、專題分析的需求而計算生成的數(shù)據(jù)。

4)維表層(Dimension)
最后補充一個維表層,維表層主要包含兩部分數(shù)據(jù):
A)高基數(shù)維度數(shù)據(jù):一般是用戶資料表、商品資料表類似的資料表。數(shù)據(jù)量可能是千萬級或者上億級別。
B)低基數(shù)維度數(shù)據(jù):一般是配置表,比如枚舉值對應(yīng)的中文含義,或者日期維表。數(shù)據(jù)量可能是個位數(shù)或者幾千幾萬。

Hive數(shù)據(jù)倉庫分層

(3)問題擴展
數(shù)據(jù)倉庫系統(tǒng)架構(gòu)

Hive數(shù)據(jù)倉庫分層

上圖系統(tǒng)各部分的執(zhí)行流程是:
1)確定分析所依賴的源數(shù)據(jù)。
2)通過ETL將源數(shù)據(jù)采集到數(shù)據(jù)倉庫。
3)數(shù)據(jù)按照數(shù)據(jù)倉庫提供的主題結(jié)構(gòu)進行存儲。
4)根據(jù)各部門的業(yè)務(wù)分析要求創(chuàng)建數(shù)據(jù)集市(數(shù)據(jù)倉庫的子集)。
5)決策分析、報表等應(yīng)用系統(tǒng)從數(shù)據(jù)倉庫查詢數(shù)據(jù)、分析數(shù)據(jù)。
6)用戶通過應(yīng)用系統(tǒng)查詢分析結(jié)果、報表。

(4)結(jié)合項目中使用

電商網(wǎng)站的數(shù)據(jù)體系設(shè)計
這里針對用戶訪問日志這一部分數(shù)據(jù)進行舉例說明:
在ODS層中,由于各端的開發(fā)團隊不同或者各種其它問題,用戶的訪問日志被分成了好幾張表上報到了我們的ODS層。
為了方便大家的使用,我們在DWD層做了一張用戶訪問行為天表,在這里,我們將PC網(wǎng)頁、H5、小程序和原生APP訪問日志匯聚到一張表里面,統(tǒng)一字段名,提升數(shù)據(jù)質(zhì)量,這樣就有了一張可供大家方便使用的明細表了。
在DWM層,我們會從DWD層中選取業(yè)務(wù)關(guān)注的核心維度來做聚合操作,比如只保留人、商品、設(shè)備和頁面區(qū)域維度。類似的,我們這樣做很多個DWM的中間表。
然后在DWS層,我們將一個人在整個網(wǎng)站中的行為數(shù)據(jù)放到一張表中,這就是我們的寬表了,有了這張表,就可以快速滿足大部分的通用型業(yè)務(wù)需求了。
最后,在APP應(yīng)用層,根據(jù)需求從DWS層的一張或者多張表取出數(shù)據(jù)拼接成一張應(yīng)用表即可。

Hive數(shù)據(jù)倉庫分層





猜你喜歡:

數(shù)據(jù)倉庫的基本架構(gòu)介紹[大數(shù)據(jù)培訓(xùn)]

數(shù)據(jù)倉庫有幾種數(shù)據(jù)模型?

什么是數(shù)據(jù)倉庫?Hive數(shù)據(jù)倉庫特點簡介

黑馬程序員python+大數(shù)據(jù)培訓(xùn)

分享到:
在線咨詢 我要報名
和我們在線交談!