【轉】詳解數倉中的數據分層:ODS、DWD、DWM、DWS、ADS


簡書上一篇博文講數倉,我覺得和之前轉的一篇帆軟的博文也是挺有參考和學習價值的。講清楚了每個分層的概念和做什么。

這是博文的出處https://www.jianshu.com/p/1dd894e5bb62

 

------------------------------------------------------------------------------------------------------------

 

 

何為數倉DW

Data warehouse(可簡寫為DW或者DWH)數據倉庫,是在數據庫已經大量存在的情況下,它是一整套包括了etl、調度、建模在內的完整的理論體系

數據倉庫的方案建設的目的,是為前端查詢和分析作為基礎,主要應用於OLAP(on-line Analytical Processing),支持復雜的分析操作,側重決策支持,並且提供直觀易懂的查詢結果。目前行業比較流行的有:AWS Redshift,Greenplum,Hive等。

數據倉庫並不是數據的最終目的地,而是為數據最終的目的地做好准備,這些准備包含:清洗、轉義、分類、重組、合並、拆分、統計等

為何要分層

數據倉庫中涉及到的問題:

  1. 為什么要做數據倉庫?
  2. 為什么要做數據質量管理?
  3. 為什么要做元數據管理?
  4. 數倉分層中每個層的作用是什么?
  5. …...

在實際的工作中,我們都希望自己的數據能夠有順序地流轉,設計者和使用者能夠清晰地知道數據的整個聲明周期,比如下面左圖。

但是,實際情況下,我們所面臨的數據狀況很有可能是復雜性高、且層級混亂的,我們可能會做出一套表依賴結構混亂,且出現循環依賴的數據體系,比如下面的右圖。

為了解決我們可能面臨的問題,需要一套行之有效的數據組織、管理和處理方法,來讓我們的數據體系更加有序,這就是數據分層。數據分層的好處:

  • 清晰數據結構:讓每個數據層都有自己的作用和職責,在使用和維護的時候能夠更方便和理解
  • 復雜問題簡化:將一個復雜的任務拆解成多個步驟來分步驟完成,每個層只解決特定的問題
  • 統一數據口徑:通過數據分層,提供統一的數據出口,統一輸出口徑
  • 減少重復開發:規范數據分層,開發通用的中間層,可以極大地減少重復計算的工作

數據分層

每個公司的業務都可以根據自己的業務需求分層不同的層次;目前比較流行的數據分層:數據運營層、數據倉庫層、數據服務層。

數據運營層ODS

數據運營層:Operation Data Store 數據准備區,也稱為貼源層。數據源中的數據,經過抽取、洗凈、傳輸,也就是ETL過程之后進入本層。該層的主要功能:

  • ODS是后面數據倉庫層的准備區
  • 為DWD層提供原始數據
  • 減少對業務系統的影響

為了考慮后續可能需要追溯數據問題,因此對於這一層就不建議做過多的數據清洗工作,原封不動地接入原始數據即可

這層的數據是后續數據倉庫加工數據的來源。數據來源的方式:

  1. 業務庫:sqoop定時抽取數據;實時方面考慮使用canal監聽mysql的binlog日志,實時接入即可
  2. 埋點日志:日志一般是以文件的形式保存,可以選擇使用flume來定時同步;可以使用spark streaming或者Flink、Kafka來實時接入
  3. 消息隊列:來自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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM