1、為什么要分層
在未分層的情況下,數據之間的耦合性與業務耦合性是不可避免的,當源業務系統的業務規則發生變化時,可能影響整個數據的清洗過程。這就好比把襯衫、褲子、襪子、外套分類存放整理 就比 打散之后不分類的整理哪一種更讓人舒服,更容易找呢?
2、分層的好處
數據分層簡化了數據清洗的過程,每一層的邏輯變得更加簡單和易於理解,當發生錯誤或規則變化時,只需要進行局部調整。
通過大量的預處理來提升應用系統查詢速度,進而提升的用戶體驗,因此數據倉庫會冗余大量的數據,是典型的空間換時間的策略。這好處還真有點像衣服歸類存放的好處,有些東西不用刻意記,想一種日常現象理解更容易
3、數據倉庫分層
其實各種分層無論是接下來常用的分層還是阿里的分層,只有適合當前業務的分層才是最好的分層;有的公司業務沒有那么麻煩,就只要把數據理清楚,分清楚就OK,不一定非要按着這個分層;
3.1、數據操作層-ODS
全稱是Operational Data Store,又叫數據准備層,數據來源層;日志或者關系型數據庫,並通過Flume、Sqoop、Kettle等etl工具導入到HDFS,並映射到HIVE的數據倉庫表中。主要用於原始數據在數據平台的落地,這些數據從數據結構,數據之間的邏輯關系上都與原始數據保持一致,在源數據裝入這一層時,要進行諸如業務字段提取或去掉不用字段,臟數據處理等等。可以理解為是關系層的基礎數據
1) 數據結構:數據機構與原始數據基本保持一致
2) 存儲周期:ODS默認保留近30天的數據
3) 表命名規范:[層次]_[主題]_[表內容]_[分表規則]
ODS層數據的來源方式:
1) 業務庫
經常會使用sqoop來抽取,比如我們每天定時抽取一次。在實時方面,可以考慮用canal監聽mysql的binlog,實時接入即可。
2)埋點日志
線上系統會打入各種日志,這些日志一般以文件的形式保存,我們可以選擇用flume定時抽取,也可以用用spark streaming或者storm來實時接入,當然,kafka也會是一個關鍵的角色。
3)其它數據源
這和具體的業務相關
3.2、公共的信息層-DIM
主要存放公共的信息數據,比如國家代碼和國家名,地理位置等信息就存在DIM層表中,對外開放,用於DWD,DWS和APP層的數據維度關聯。可以理解為一些字典表、單獨存放
1) 數據機構:維表,以國家ID等字段為主鍵
2) 存儲周期:按需存儲,一般會保留歷史至今所有的數據
3) 命名規范:
所有維度表都在DIM下面。
dim.dim+_業務描述
舉例: dim.dim_year 時間維表
3.3、數據明細層-DWD
全稱是Data Warehouse Detail,用於源系統數據在數據平台中的永久存儲。它用以支撐DWS層和DM層無法覆蓋的需求,比如像用戶通話詳單類業務需求。該層的數據模型不建議開給不懂技術的業務人員直接使用。這一層主要解決一些數據質量問題和數據的完整度問題。比如商場的會員信息來與不同表,某些會員的的和數據可能不完整等等問題,我們可以再這一層做一些屏蔽
1) 數據結構:數據結構與源系統保持一致
2) 存儲周期:保留歷史至今所有的數據
3) 命名規范:dwd.dwd_業務描述+_時間粒度
舉例: dwd.dwd_sales_d 銷售詳細日志
3.4、數據匯總層- DWS層
全稱是Data Warehouse Service,主要包含兩類匯總表:一是細粒度寬表,二是粗粒度匯總表。我們拿商場售賣舉例,那么包含基於訂單、會員、商品、店鋪等實體的細粒度寬表和基於維度組合(會員日進場匯總、會員消費匯總、商場銷售日匯總、店鋪銷售日匯總等)的粗粒度匯總表。這層是對外開放的,用以支撐絕大部分的業務需求,匯總層是為了簡化源系統復雜的邏輯關系以及質量問題等,這層是的業務結構容易理解。各個層面的工程師容易上手。dws層的匯總數據目標是能滿足80%的業務計算。
1) 數據機構: 寬表:以業務實體進行展開,將與業務有關的相關字段和屬性進行預關聯,預處理和預計算,對業務實體進行拉伸形成寬表.匯總表:維度組合形成的匯總表
2) 存儲周期:原則上保留歷史至今全部的數據
3) 命名規范:
所有數據匯總層的表都放在DWS下面
dws.dws_業務描述+_時間粒度+_sum
舉例:dws.dws_trans_d_sum 交易日匯總表
4、數據倉庫分層-阿里
4.1、ODS 數據准備層
功能:ODS層是數據倉庫准備區,為DWD層提供基礎原始數據,可減少對業務系統的影響
建模方式及原則:從業務系統增量抽取、保留時間由業務需求決定、可分表進行周期存儲、數據不做清洗轉換與業務系統數據模型保持一致、按主題邏輯划分。
4.2、DWD 數據明細層
功能:為DW層提供來源明細數據,提供業務系統細節數據的長期沉淀,為未來分析類需求的擴展提供歷史數據支撐
建模方式及原則:數據模型與ODS層一致,不做清晰轉換處理、為支持數據重跑可額外增加數據業務日期字段、可按年月日進行分表、用增量ODS層數據和前一天DWD相關表進行merge處理。
4.3、DW(B/S) 數據匯總層
功能:為DW、ST層提供細粒度數據,細化成DWB合DWS;DWB是根據DWD明細數據經行清晰轉換,如維度轉代理鍵、身份證清洗、會員注冊來源清晰、字段合並、空值處理、臟數據處理、IP清晰轉換、賬號余額清洗、資金來源清洗等;DWS是根據DWB層數據按各個維度ID進行粗粒度匯總聚合,如按交易來源,交易類型進行匯合
建模方式及原則:
1) 聚合、匯總增加派生事實;
2) 關聯其它主題的事實表,DW層可能會跨主題域;
3) DWB保持低粒度匯總加工數據,DWS保持高粒度匯總數據;
4) 數據模型可能采用反范式設計,合並信息等。
4.4、DM 數據集市層
功能:可以是一些寬表,是根據DW層數據按照各種維度或多種維度組合把需要查詢的一些事實字段進行匯總統計並作為單獨的列進行存儲;滿足一些特定查詢、數據挖掘應用;應用集市數據存儲
建模方式及原則:
1) 盡量減少數據訪問時計算,優化檢索;
2) 維度建模,星型模型;
3) 事實拉寬,度量預先計算;
4) 分表存儲
4.5、ST 數據應用層
功能:ST層面向用戶應用和分析需求,包括前端報表、分析圖表、KPI、儀表盤、OLAP、專題等分析,面向最終結果用戶;適合作OLAP、報表模型,如ROLAP,MOLAP;根據DW層經過聚合匯總統計后的粗粒度事實表
建模方式及原則:
1) 保持數據量小;
2) 維度建模,星形模型;
3) 各位維度代理鍵+度量;
4) 增加數據業務日期字段,支持數據重跑;
5) 不分表存儲