數(shù)據(jù)倉(cāng)庫(kù)分層架構(gòu)深度講解
前言
我們?cè)跀?shù)倉(cāng)項(xiàng)目的時(shí)候往往是需要將它分層的,但是為什么分層你真正的了解過(guò)嗎,那它分層的好處又是什么呢。好我們今天就針對(duì)這個(gè)話題進(jìn)行講解。如果你還不了解數(shù)倉(cāng)中的模型可以去看這篇(數(shù)倉(cāng)模型設(shè)計(jì)詳細(xì)講解),編寫不易請(qǐng)給個(gè)一鍵三連。圖片
一、為什么要分層
分層的主要原因是在管理數(shù)據(jù)的時(shí)候,能對(duì)數(shù)據(jù)有一個(gè)更加清晰的掌控,詳細(xì)來(lái)講,主要有下面幾個(gè)原因:
清晰數(shù)據(jù)結(jié)構(gòu):
每一個(gè)數(shù)據(jù)分層都有它的作用域,這樣我們?cè)谑褂帽淼臅r(shí)候能更方便地定位和理解。
方便數(shù)據(jù)血緣追蹤:
簡(jiǎn)單來(lái)說(shuō),我們最終給業(yè)務(wù)呈現(xiàn)的是一個(gè)能直接使用業(yè)務(wù)表,但是它的來(lái)源有很多,如果有一張來(lái)源表出問(wèn)題了,我們希望能夠快速準(zhǔn)確地定位到問(wèn)題,并清楚它的危害范圍。
減少重復(fù)開發(fā):
規(guī)范數(shù)據(jù)分層,開發(fā)一些通用的中間層數(shù)據(jù),能夠減少極大的重復(fù)計(jì)算。
把復(fù)雜問(wèn)題簡(jiǎn)單化:
將一個(gè)復(fù)雜的任務(wù)分解成多個(gè)步驟來(lái)完成,每一層只處理單一的步驟,比較簡(jiǎn)單和容易理解。而且便于維護(hù)數(shù)據(jù)的準(zhǔn)確性,當(dāng)數(shù)據(jù)出現(xiàn)問(wèn)題之后,可以不用修復(fù)所有的數(shù)據(jù),只需要從有問(wèn)題的步驟開始修復(fù)。
屏蔽原始數(shù)據(jù)的異常:
屏蔽業(yè)務(wù)的影響,不必改一次業(yè)務(wù)就需要重新接入數(shù)據(jù)
二、數(shù)倉(cāng)分層思想
數(shù)據(jù)分層每個(gè)企業(yè)根據(jù)自己的業(yè)務(wù)需求可以分成不同的層次,但是最基礎(chǔ)的分層思想,理論上數(shù)據(jù)分為三個(gè)層,數(shù)據(jù)運(yùn)營(yíng)層、數(shù)據(jù)倉(cāng)庫(kù)層和數(shù)據(jù)服務(wù)層?;谶@個(gè)基礎(chǔ)分層之上添加新的層次,來(lái)滿足不同的業(yè)務(wù)需求。
數(shù)據(jù)運(yùn)營(yíng)層(ODS)
Operate data store(操作數(shù)據(jù)-存儲(chǔ)),是最接近數(shù)據(jù)源中數(shù)據(jù)的一層,數(shù)據(jù)源中的數(shù)據(jù),經(jīng)過(guò)抽取、洗凈、傳輸,也就說(shuō)傳說(shuō)中的ETL之后,裝入ODS層。本層的數(shù)據(jù),總體上大多是按照源頭業(yè)務(wù)系統(tǒng)的分類方式而分類的。例如:MySQL里面的一張表可以通過(guò)sqoop之間抽取到ODS層 ODS層數(shù)據(jù)的來(lái)源方式:
- 業(yè)務(wù)庫(kù)
經(jīng)常會(huì)使用sqoop來(lái)抽取,比如我們每天定時(shí)抽取一次。在實(shí)時(shí)方面, 可以考慮用canal監(jiān)聽mysql的binlog,實(shí)時(shí)接入即可。
- 埋點(diǎn)日志
線上系統(tǒng)會(huì)打入各種日志,這些日志一般以文件的形式保存,我們可以選擇用flume定時(shí)抽取,也可以用用spark streaming或者Flink來(lái)實(shí)時(shí)接入,當(dāng)然,kafka也會(huì)是一個(gè)關(guān)鍵的角色。
- 消息隊(duì)列
來(lái)自ActiveMQ、Kafka的數(shù)據(jù)等
數(shù)據(jù)倉(cāng)庫(kù)層(DW)
Data warehouse(數(shù)據(jù)倉(cāng)庫(kù))。在這里,從ODS層中獲得的數(shù)據(jù)按照主題建立各種數(shù)據(jù)模型。例如以研究人的旅游消費(fèi)為主題的數(shù)據(jù)集中,便可以結(jié)合航空公司的登機(jī)出行信息,以及銀聯(lián)系統(tǒng)的刷卡記錄,進(jìn)行結(jié)合分析,產(chǎn)生數(shù)據(jù)集。在這里,我們需要了解四個(gè)概念:維(dimension)、事實(shí)(Fact)、指標(biāo)(Index)和粒度( Granularity)。
DW數(shù)據(jù)分層,由下到上為 DWD,DWB,DWS
DWD:data warehouse detail 細(xì)節(jié)數(shù)據(jù)層,是業(yè)務(wù)層與數(shù)據(jù)倉(cāng)庫(kù)的隔離層。DWB:data warehouse base 基礎(chǔ)數(shù)據(jù)層,存儲(chǔ)的是客觀數(shù)據(jù),一般用作中間層,可以認(rèn)為是大量指標(biāo)的數(shù)據(jù)層。DWS:data warehouse service 服務(wù)數(shù)據(jù)層,基于DWB上的基礎(chǔ)數(shù)據(jù),整合匯總成分析某一個(gè)主題域的服務(wù)數(shù)據(jù),一般是寬表
數(shù)據(jù)服務(wù)層/應(yīng)用層(ADS):
Application Data Service(應(yīng)用數(shù)據(jù)服務(wù))。該層主要是提供數(shù)據(jù)產(chǎn)品和數(shù)據(jù)分析使用的數(shù)據(jù),一般會(huì)存放在ES、MySQL等系統(tǒng)中供線上系統(tǒng)使用,也可能會(huì)存在Hive或者Druid中供數(shù)據(jù)分析和數(shù)據(jù)挖掘使用。例如:我們經(jīng)常說(shuō)的報(bào)表數(shù)據(jù),或者說(shuō)那種大寬表,一般就放在這里。
三、阿里數(shù)據(jù)倉(cāng)庫(kù)分層架構(gòu)
ODS 數(shù)據(jù)準(zhǔn)備層
功能:
ODS層是數(shù)據(jù)倉(cāng)庫(kù)準(zhǔn)備區(qū),為DWD層提供基礎(chǔ)原始數(shù)據(jù),可減少對(duì)業(yè)務(wù)系統(tǒng)的影響
建模方式及原則:
從業(yè)務(wù)系統(tǒng)增量抽取、保留時(shí)間由業(yè)務(wù)需求決定、可分表進(jìn)行周期存儲(chǔ)、數(shù)據(jù)不做清洗轉(zhuǎn)換與業(yè)務(wù)系統(tǒng)數(shù)據(jù)模型保持一致、按主題邏輯劃分
DWD 數(shù)據(jù)明細(xì)層
功能:
為DW層提供來(lái)源明細(xì)數(shù)據(jù),提供業(yè)務(wù)系統(tǒng)細(xì)節(jié)數(shù)據(jù)的長(zhǎng)期沉淀,為未來(lái)分析類需求的擴(kuò)展提供歷史數(shù)據(jù)支撐
建模方式及原則:
數(shù)據(jù)模型與ODS層一致,不做清洗轉(zhuǎn)換處理、為支持?jǐn)?shù)據(jù)重跑可額外增加數(shù)據(jù)業(yè)務(wù)日期字段、可按年月日進(jìn)行分表、用增量ODS層數(shù)據(jù)和前一天DWD相關(guān)表進(jìn)行merge處理
DW(B/S) 數(shù)據(jù)匯總層
功能:
為DW、ST層提供細(xì)粒度數(shù)據(jù),細(xì)化成DWB和DWS;
DWB是根據(jù)DWD明細(xì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換,如維度轉(zhuǎn)代理鍵、身份證清洗、會(huì)員注冊(cè)來(lái)源清晰、字段合并、空值處理、臟數(shù)據(jù)處理、IP清晰轉(zhuǎn)換、賬號(hào)余額清洗、資金來(lái)源清洗等;
DWS是根據(jù)DWB層數(shù)據(jù)按各個(gè)維度ID進(jìn)行高粒度匯總聚合,如按交易來(lái)源,交易類型進(jìn)行匯合
建模方式及原則:
- 聚合、匯總增加派生事實(shí);
- 關(guān)聯(lián)其它主題的事實(shí)表,DW層可能會(huì)跨主題域;
- DWB保持低粒度匯總加工數(shù)據(jù),DWS保持高粒度匯總數(shù)據(jù);
- 數(shù)據(jù)模型可能采用反范式設(shè)計(jì),合并信息等。
Data Market (數(shù)據(jù)集市)層
功能:
可以是一些寬表,是根據(jù)DW層數(shù)據(jù)按照各種維度或多種維度組合把需要查詢的一些事實(shí)字段進(jìn)行匯總統(tǒng)計(jì)并作為單獨(dú)的列進(jìn)行存儲(chǔ);
滿足一些特定查詢、數(shù)據(jù)挖掘應(yīng)用
應(yīng)用集市數(shù)據(jù)存儲(chǔ)
建模方式及原則:
盡量減少數(shù)據(jù)訪問(wèn)時(shí)計(jì)算(優(yōu)化檢索)
維度建模,星型模型;
分表存儲(chǔ)
ST 數(shù)據(jù)應(yīng)用層(ADS層)
功能:
ST層面向用戶應(yīng)用和分析需求,包括前端報(bào)表、分析圖表、KPI、儀表盤、OLAP、專題等分析,面向最終結(jié)果用戶
適合做OLAP、報(bào)表模型,如ROLAP,MOLAP
聯(lián)機(jī)事務(wù)處理OLTP、聯(lián)機(jī)分析處理OLAP。
OLTP是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的主要應(yīng)用,主要是基本的、日常的事務(wù)處理,例如銀行交易。
OLAP是數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)的主要應(yīng)用,支持復(fù)雜的分析操作,側(cè)重決策支持,并且提供直觀易懂的查詢結(jié)果。
聯(lián)機(jī)分析處理的用戶是企業(yè)中的專業(yè)分析人員及管理決策人員,他們?cè)诜治鰳I(yè)務(wù)經(jīng)營(yíng)的數(shù)據(jù)時(shí),從不同的角度來(lái)審視業(yè)務(wù)的衡量指標(biāo)是一種很自然的思考模式。例如分析銷售數(shù)據(jù),可能會(huì)綜合時(shí)間周期、產(chǎn)品類別、分銷渠道、地理分布、客戶群類等多種因素來(lái)考量。
根據(jù)DW層經(jīng)過(guò)聚合匯總統(tǒng)計(jì)后的粗粒度事實(shí)表
建模方式及原則:
保持?jǐn)?shù)據(jù)量小;
維度建模,星形模型;
各位維度代理鍵+度量;
增加數(shù)據(jù)業(yè)務(wù)日期字段,支持?jǐn)?shù)據(jù)重跑;
不分表存儲(chǔ)
小結(jié)
本篇文章主要講解數(shù)倉(cāng)項(xiàng)目中為什么分層,比如我們?cè)谕瓿梢粋€(gè)需要的需求的時(shí)候也許只需要一個(gè)復(fù)雜的SQL語(yǔ)句就可以完成。但一個(gè)復(fù)雜的SQL語(yǔ)句方便后面維護(hù)嗎?當(dāng)出現(xiàn)了問(wèn)題方便追蹤嗎? 這時(shí)候就體現(xiàn)出分層的好處。順便給大家分享阿里的數(shù)倉(cāng)模型是什么樣的。信自己,努力和汗水總會(huì)能得到回報(bào)的。我是大數(shù)據(jù)老哥,我們下期見~~~
本文轉(zhuǎn)載自微信公眾號(hào)「大數(shù)據(jù)老哥」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系大數(shù)據(jù)老哥公眾號(hào)。