簡書上一篇博文講數倉,我覺得和之前轉的一篇帆軟的博文也是挺有參考和學習價值的。講清楚了每個分層的概念和做什么。
這是博文的出處https://www.jianshu.com/p/1dd894e5bb62
------------------------------------------------------------------------------------------------------------
何為數倉DW
Data warehouse(可簡寫為DW或者DWH)數據倉庫,是在數據庫已經大量存在的情況下,它是一整套包括了etl、調度、建模在內的完整的理論體系。
數據倉庫的方案建設的目的,是為前端查詢和分析作為基礎,主要應用於OLAP(on-line Analytical Processing),支持復雜的分析操作,側重決策支持,並且提供直觀易懂的查詢結果。目前行業比較流行的有:AWS Redshift,Greenplum,Hive等。
數據倉庫並不是數據的最終目的地,而是為數據最終的目的地做好准備,這些准備包含:清洗、轉義、分類、重組、合並、拆分、統計等
為何要分層
數據倉庫中涉及到的問題:
- 為什么要做數據倉庫?
- 為什么要做數據質量管理?
- 為什么要做元數據管理?
- 數倉分層中每個層的作用是什么?
- …...
在實際的工作中,我們都希望自己的數據能夠有順序地流轉,設計者和使用者能夠清晰地知道數據的整個聲明周期,比如下面左圖。
但是,實際情況下,我們所面臨的數據狀況很有可能是復雜性高、且層級混亂的,我們可能會做出一套表依賴結構混亂,且出現循環依賴的數據體系,比如下面的右圖。

為了解決我們可能面臨的問題,需要一套行之有效的數據組織、管理和處理方法,來讓我們的數據體系更加有序,這就是數據分層。數據分層的好處:
- 清晰數據結構:讓每個數據層都有自己的作用和職責,在使用和維護的時候能夠更方便和理解
- 復雜問題簡化:將一個復雜的任務拆解成多個步驟來分步驟完成,每個層只解決特定的問題
- 統一數據口徑:通過數據分層,提供統一的數據出口,統一輸出口徑
- 減少重復開發:規范數據分層,開發通用的中間層,可以極大地減少重復計算的工作
數據分層
每個公司的業務都可以根據自己的業務需求分層不同的層次;目前比較流行的數據分層:數據運營層、數據倉庫層、數據服務層。
數據運營層ODS
數據運營層:Operation Data Store 數據准備區,也稱為貼源層。數據源中的數據,經過抽取、洗凈、傳輸,也就是ETL過程之后進入本層。該層的主要功能:
- ODS是后面數據倉庫層的准備區
- 為DWD層提供原始數據
- 減少對業務系統的影響
為了考慮后續可能需要追溯數據問題,因此對於這一層就不建議做過多的數據清洗工作,原封不動地接入原始數據即可
這層的數據是后續數據倉庫加工數據的來源。數據來源的方式:
- 業務庫:sqoop定時抽取數據;實時方面考慮使用canal監聽mysql的binlog日志,實時接入即可
- 埋點日志:日志一般是以文件的形式保存,可以選擇使用flume來定時同步;可以使用spark streaming或者Flink、Kafka來實時接入
- 消息隊列:來自ActiveMQ、Kafka的數據等
數據倉庫層
數據倉庫層從上到下,又可以分為3個層:數據細節層DWD、數據中間層DWM、數據服務層DWS。
數據細節層DWD
數據細節層:data warehouse details,DWD
該層是業務層和數據倉庫的隔離層,保持和ODS層一樣的數據顆粒度;主要是對ODS數據層做一些數據的清洗和規范化的操作,比如去除空數據、臟數據、離群值等。
為了提高數據明細層的易用性,該層通常會才采用一些維度退化方法,將維度退化至事實表中,減少事實表和維表的關聯。
數據中間層DWM
數據中間層:Data Warehouse Middle,DWM;
該層是在DWD層的數據基礎上,對數據做一些輕微的聚合操作,生成一些列的中間結果表,提升公共指標的復用性,減少重復加工的工作。
簡答來說,對通用的核心維度進行聚合操作,算出相應的統計指標
數據服務層DWS
數據服務層:Data Warehouse Service,DWS;
該層是基於DWM上的基礎數據,整合匯總成分析某一個主題域的數據服務層,一般是寬表,用於提供后續的業務查詢,OLAP分析,數據分發等。
一般來說,該層的數據表會相對較少;一張表會涵蓋比較多的業務內容,由於其字段較多,因此一般也會稱該層的表為寬表。
數據應用層ADS
數據應用層:Application Data Service,ADS;
該層主要是提供給數據產品和數據分析使用的數據,一般會存放在ES、Redis、PostgreSql等系統中供線上系統使用;也可能存放在hive或者Druid中,供數據分析和數據挖掘使用,比如常用的數據報表就是存在這里的。
事實表 Fact Table
事實表是指存儲有事實記錄的表,比如系統日志、銷售記錄等。事實表的記錄在不斷地增長,比如電商的商品訂單表,就是類似的情況,所以事實表的體積通常是遠大於其他表。
維表層Dimension
維度表(Dimension Table)或維表,有時也稱查找表(Lookup Table),是與事實表相對應的一種表;它保存了維度的屬性值,可以跟事實表做關聯,相當於將事實表上經常重復出現的屬性抽取、規范出來用一張表進行管理。維度表主要是包含兩個部分:
-
高基數維度數據:一般是用戶資料表、商品資料表類似的資料表,數據量可能是千萬級或者上億級別
-
低基數維度數據:一般是配置表,比如枚舉字段對應的中文含義,或者日期維表等;數據量可能就是個位數或者幾千幾萬。

作者:禪與計算機程序設計藝術
鏈接:https://www.jianshu.com/p/1dd894e5bb62
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。