個人建網(wǎng)站的費用百度搜索引擎官網(wǎng)入口
文章目錄
- 一. 數(shù)倉分層的意義
- 1. 清晰數(shù)據(jù)結(jié)構(gòu)。
- 2. 減少重復(fù)開發(fā)
- 3. 方便數(shù)據(jù)血緣追蹤
- 4. 把復(fù)雜問題簡單化
- 5. 屏蔽原始數(shù)據(jù)的異常
- 6. 數(shù)據(jù)倉庫的可維護性
- 二. 如何進行數(shù)倉分層?
- 1. ODS層
- 2. DW層
- 2.1. DW層分類
- 2.2. DWD層
- 2.3. DWS
- 3. ADS層
- 4、層次調(diào)用規(guī)范
一. 數(shù)倉分層的意義
1. 清晰數(shù)據(jù)結(jié)構(gòu)。
每一個數(shù)據(jù)分層都有它的作用域,這樣我們能根據(jù)自己的需求會快定位到要使用那些層的哪些表。
例如:客戶信息同時存在于核心系統(tǒng)、信貸系統(tǒng)、理財系統(tǒng)、資金系統(tǒng),取數(shù)時該如何決策呢?數(shù)據(jù)倉庫會對相同主題的數(shù)據(jù)進行統(tǒng)一建模,把復(fù)雜的數(shù)據(jù)關(guān)系梳理成條理清晰的數(shù)據(jù)模型,使用時就可避免上述問題了。
?
2. 減少重復(fù)開發(fā)
規(guī)范數(shù)據(jù)分層,開發(fā)一些通用的中間層數(shù)據(jù),能夠減少數(shù)據(jù)的重復(fù)計算。
數(shù)據(jù)的逐層加工原則,下層包含了上層數(shù)據(jù)加工所需要的全量數(shù)據(jù),這樣的加工方式避免了每個數(shù)據(jù)開發(fā)人員**都重新從源系統(tǒng)抽取數(shù)據(jù)進行加工。**極大地減少不必要的數(shù)據(jù)冗余,也能實現(xiàn)計算結(jié)果復(fù)用,極大地降低存儲和計算成本。
?
3. 方便數(shù)據(jù)血緣追蹤
簡單來說,最終給業(yè)務(wù)呈現(xiàn)的是一個能直接使用的業(yè)務(wù)表,但是它的數(shù)據(jù)來源有很多,如果有一張來源表出問題了,分層后的數(shù)倉能夠快速準(zhǔn)確地定位到問題,并清楚它的危害范圍。
?
4. 把復(fù)雜問題簡單化
將一個復(fù)雜的任務(wù)分解成多個步驟來完成,每一層只處理單一的步驟,比較簡單和容易理解。而且便于維護數(shù)據(jù)的準(zhǔn)確性,當(dāng)數(shù)據(jù)出現(xiàn)問題之后,可以不用修復(fù)所有的數(shù)據(jù),只需要從有問題的步驟開始修復(fù)。
?
5. 屏蔽原始數(shù)據(jù)的異常
源頭系統(tǒng)可能極為繁雜,而且表命名、字段命名 、字段含義等可能五花八門,通過 DW 層來規(guī)范和屏蔽所有這些復(fù)雜性。如果源頭系統(tǒng)業(yè)務(wù)發(fā)生變更,相關(guān)的變更由 DW 層來處理,對下游用戶透明,無須改動下游用戶的代碼和邏輯。
?
6. 數(shù)據(jù)倉庫的可維護性
分層的設(shè)計使得某一層的問題只在該層得到解決,無須更改下一層的代碼和邏輯。
?
二. 如何進行數(shù)倉分層?
數(shù)據(jù)分層最基礎(chǔ)的分層思想將數(shù)據(jù)分為三個層:數(shù)據(jù)引入層(ODS)、數(shù)據(jù)倉庫層(DW)和數(shù)據(jù)服務(wù)層(ADS)??梢曰诨A(chǔ)分層之上添加新的層次,來滿足不同的業(yè)務(wù)需求。
1. ODS層
數(shù)據(jù)引入層(ODS,Operational Data Store,又稱數(shù)據(jù)基礎(chǔ)層),是最接近數(shù)據(jù)源中數(shù)據(jù)的一層,這將原始數(shù)據(jù)幾乎無處理地存放在數(shù)據(jù)倉庫系統(tǒng)中,結(jié)構(gòu)上與源系統(tǒng)基本保持一致。
這一層的主要職責(zé)是解決數(shù)據(jù)孤島問題,保證數(shù)據(jù)集成完整性;數(shù)據(jù)與源系統(tǒng)表一致,體現(xiàn)非易失性;定期同步,增加表同步時間戳,體現(xiàn)時變性。
?
ODS層數(shù)據(jù)的來源方式:
- 業(yè)務(wù)庫
離線:hive、flink批模式、sqoop定時調(diào)度。
實時:在實時方面, 可以考慮用canal監(jiān)聽mysql的binlog,實時接入即可。
-
埋點日志
-
線上系統(tǒng)會打入各種日志,這些日志一般以文件的形式保存,
離線:用flume定時抽取。
實時:用spark streaming或者Flink來實時接入存放到kafka中。
- 消息隊列:來自ActiveMQ、Kafka的數(shù)據(jù)等。
?
2. DW層
數(shù)倉層(DW, data warehouse)是核心設(shè)計的一層,本層將從 ODS 層中獲得的數(shù)據(jù)按照主題建立各種數(shù)據(jù)模型,每一個主題對應(yīng)一個宏觀的分析領(lǐng)域,數(shù)據(jù)倉庫層排除對決策無用的數(shù)據(jù),提供特定主題的簡明視圖。在DW層會保存BI系統(tǒng)中所有的歷史數(shù)據(jù),例如保存10年的數(shù)據(jù)。
DW存放明細(xì)事實數(shù)據(jù)、維表數(shù)據(jù)及公共指標(biāo)匯總數(shù)據(jù)。
- 明細(xì)事實數(shù)據(jù)、維表數(shù)據(jù)一般根據(jù)ODS層數(shù)據(jù)加工生成。
- 公共指標(biāo)匯總數(shù)據(jù)一般根據(jù)維表數(shù)據(jù)和明細(xì)事實數(shù)據(jù)加工生成。
?
2.1. DW層分類
DW層又可以細(xì)分為維度層(DIM)、明細(xì)數(shù)據(jù)層(DWD)和匯總數(shù)據(jù)層(DWS)。
分層作用:
- 通過維度模型方法,可以定義維度模型主鍵與事實模型中外鍵關(guān)系,減少數(shù)據(jù)冗余,也提高明細(xì)數(shù)據(jù)表的易用性。
- 在匯總數(shù)據(jù)層同樣可以關(guān)聯(lián)復(fù)用統(tǒng)計粒度中的維度,采取更多的寬表化手段構(gòu)建公共指標(biāo)數(shù)據(jù)層,提升公共指標(biāo)的復(fù)用性,減少重復(fù)加工。
分類:
- 維度層(DIM,Dimension):以維度作為建模驅(qū)動,創(chuàng)建各維度表。為了避免在維度模型中冗余關(guān)聯(lián)維度的屬性,基于雪花模型構(gòu)建維度表。
- 明細(xì)數(shù)據(jù)層(DWD,Data Warehouse Detail):以業(yè)務(wù)過程作為建模驅(qū)動,構(gòu)建最細(xì)粒度的明細(xì)事實表。
- 匯總數(shù)據(jù)層(DWS,Data Warehouse Summary):以分析的主題對象作為建模驅(qū)動,基于上層的應(yīng)用和產(chǎn)品的指標(biāo)需求,構(gòu)建公共粒度的匯總指標(biāo)表。為上層提供公共指標(biāo),建立匯總寬表、明細(xì)事實表。
?
2.2. DWD層
DWD層做了哪些事?
1.數(shù)據(jù)清洗過濾
去除廢棄字段,去除格式錯誤的信息
去除丟失了關(guān)鍵字段的信息
過濾核心字段無意義的數(shù)據(jù),比如訂單表中訂單id為null,支付表中支付id為空
對手機號、身份證號等敏感數(shù)據(jù)脫敏
2.數(shù)據(jù)映射,轉(zhuǎn)換
如boolean,有使用0 1標(biāo)識,也有使用true false標(biāo)識的
如字符串空值,有使用"",也有使用null,的,統(tǒng)一為null即可
如日期格式,這種就差異性更大,需要根據(jù)實際業(yè)務(wù)數(shù)據(jù)決定,不過一般都是格式化為YYYY-MM-dd HH:mm:ss 這類標(biāo)準(zhǔn)格式
?
2.3. DWS
DWS( data warehouse service)數(shù)據(jù)服務(wù)層,匯總層寬表
DWS是根據(jù)DWD層基礎(chǔ)數(shù)據(jù)按各個維度ID進行粗粒度匯總聚合,如按交易來源,交易類型進行匯合。整合匯總成分析某一個主題域的服務(wù)數(shù)據(jù),一般是寬表。
該層數(shù)據(jù)表會相對比較少,大多都是寬表(一張表會涵蓋比較多的業(yè)務(wù)內(nèi)容,表中的字段較多)。按照主題劃分,如訂單、用戶等,生成字段比較多的寬表,用于提供后續(xù)的業(yè)務(wù)查詢,OLAP分析,數(shù)據(jù)分發(fā)等。
比如用戶每個時間段在不同登錄ip購買的商品數(shù)等。這里做一層輕度的匯總會讓計算更加的高效,在此基礎(chǔ)上如果計算7天、30天、90天的行為會快很多。80%的業(yè)務(wù)都能通過DWS層計算,而不是ODS。
?
公共匯總事實表命名規(guī)范:
dws_{業(yè)務(wù)板塊縮寫/pub}_{數(shù)據(jù)域縮寫}_{數(shù)據(jù)粒度縮寫}[_{自定義表命名標(biāo)簽縮寫}]_{統(tǒng)計時間周期范圍縮寫}
。
關(guān)于統(tǒng)計實際周期范圍縮寫,缺省情況下,離線計算應(yīng)該包括最近一天(_1d),最近N天(_nd)和歷史截至當(dāng)天(_td)三個表。如果出現(xiàn)_nd的表字段過多需要拆分時,只允許以一個統(tǒng)計周期單元作為原子拆分。即一個統(tǒng)計周期拆分一個表,例如最近7天(_1w)拆分一個表。不允許拆分出來的一個表存儲多個統(tǒng)計周期。
對于小時表(無論是天刷新還是小時刷新),都用_hh來表示。對于分鐘表(無論是天刷新還是小時刷新),都用_mm來表示。
舉例如下:
dws_asale_trd_byr_subpay_1d(買家粒度交易分階段付款一日匯總事實表)
dws_asale_trd_byr_subpay_td(買家粒度分階段付款截至當(dāng)日匯總表)
dws_asale_trd_byr_cod_nd(買家粒度貨到付款交易匯總事實表)
dws_asale_itm_slr_td(賣家粒度商品截至當(dāng)日存量匯總表)
dws_asale_itm_slr_hh(賣家粒度商品小時匯總表)—維度為小時
dws_asale_itm_slr_mm(賣家粒度商品分鐘匯總表)—維度為分鐘
?
3. ADS層
數(shù)據(jù)應(yīng)用層(ADS,Application Data Store)存放著數(shù)據(jù)產(chǎn)品個性化的統(tǒng)計指標(biāo)數(shù)據(jù),報表數(shù)據(jù)。
應(yīng)用層主要是各個業(yè)務(wù)方或者部門基于DWD和DWS建立的數(shù)據(jù)集市(Data Market, DM),一般來說應(yīng)用層的數(shù)據(jù)來源于DW層,而且相對于DW層,應(yīng)用層只包含部門或者業(yè)務(wù)方面自己關(guān)心的明細(xì)層和匯總層的數(shù)據(jù)。
APP 層:為應(yīng)用層,這層數(shù)據(jù)是完全為了滿足具體的分析需求而構(gòu)建的數(shù)據(jù),也是星形或雪花結(jié)構(gòu)的數(shù)據(jù)。如我們經(jīng)常說的報表數(shù)據(jù),或者說那種大寬表,一般就放在這里。包括前端報表、分析圖表、KPI、儀表盤、OLAP、專題等分析,面向最終結(jié)果用戶。
應(yīng)用層是根據(jù)業(yè)務(wù)需要,由前面三層數(shù)據(jù)統(tǒng)計而出的結(jié)果,可以直接提供查詢展現(xiàn),或?qū)胫罬ysql中使用。
?
?
4、層次調(diào)用規(guī)范
-
禁止反向調(diào)用
-
ODS 只能被 DWD 調(diào)用。
-
DWD 可以被 DWS 和 ADS 調(diào)用。
-
DWS 只能被 ADS 調(diào)用。
-
數(shù)據(jù)應(yīng)用可以調(diào)用 DWD、DWS、ADS,但建議優(yōu)先考慮使用匯總度高的數(shù)據(jù)。
ODS->DWD->DWS>ADS
ODS->DWD->ADS
?
參考:
https://dbaplus.cn/news-73-4907-1.html