【轉】詳解數倉中的數據分層: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
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章