數倉學習之路二

數據倉庫的分層

數據倉庫的特徵在於面向主題、集成性、穩定性和時變性,用於支持管理決策。數據倉庫存在的意義在於對企業的所有數據進行彙總,爲企業各個部門提供統一的、規範的數據出口。數據倉庫在構建過程中通常都需要進行分層處理。業務不同,分層的技術處理手段也不同。數倉分層的主要原因:

  1. 通過數據預處理提高效率,因爲預處理,所以會存在冗餘數據
  2. 如果不分層而業務系統的業務規則發生變化,就會影響整個數據清洗過程,工作量巨大
  3. 複雜問題簡單化 將一個複雜的任務分解成多個步驟來完成,每一層只處理單一的步驟,比較簡單和容易解。而且便於維護數據的準確性,當數據出現問題之後,可以不用修復所有的數據,只需要從有問題的步驟開始修復(局部調整)
  4. 用空間換時間,通過大量的預處理來提升應用系統的用戶體驗(效率),因此數據倉庫會存在大量冗餘的數據
  5. 清晰數據結構 每一個數據分層都有它的作用域,這樣在使用表的時候能更方便的定位和理解
  6. 數據血緣追蹤 由於最終給業務呈現的是一個能直接使用的業務表,但是表的數據來源有很多,如果有一張來 源表出問題了,我們希望能夠快速準確的定位到問題,並清楚他的危害範圍
  7. 減少重複開發 規範數據分層,開發一些通用的中間層數據,能夠減少極大的重複計算

數倉的常見分層一般爲3層,分別爲:數據操作層、數據倉庫層和數據集市層
當然根據研發人員經驗或者業務,可以分爲更多不同的層,只要能達到流程清晰、方便查數即可。
分層類別:basic(tmp)–>ods(sda)—>dwd—>dwa---->dm

ODS

Operate data store 操作數據存儲 是最接近數據源中數據的一層,數據源中的數據,經過抽取、洗淨、傳輸,也就說傳說中的ETL之後,裝入本層。本層的數據,總體上大多是按照源頭業務系統的分類方式而分類的。

例如,這一層可能包含的數據表可爲:人口表(包含每個人的身份證號、姓名、性別、年齡、住址等)、機場登機記錄(包含乘機人身份證號、航班號、乘機日期、起飛城市等)、銀聯的刷卡信息表(包含銀行卡號、刷卡地點、刷卡時間、刷卡金額等)、銀行賬戶表(包含銀行卡號、持卡人身份證號等)等等一系列原始的業務數據。這裏我們可以看到,這一層面的數據還具有鮮明的業務數據庫的特徵,甚至還具有一定的關係數據庫中的數據範式的組織形式。

但是,這一層面的數據卻不完全等同於原始數據。在源數據裝入這一層時,根據業務不同,可能會進行諸如去噪(例如去掉明顯偏離正常水平的銀行刷卡信息)、去重(例如銀行賬戶信息、公安局人口信息中均含有人的姓名,但是隻保留一份即可)、提髒(例如有的人的銀行卡被盜刷,在十分鐘內同時有兩筆分別在中國和日本的刷卡信息,這便是髒數據)、業務提取、單位統一、砍字段(例如用於支撐前端系統工作,但是在數據挖掘中不需要的字段)、業務判別等多項工作。

ODS層數據的來源方式

  • 業務庫

經常會使用sqoop來抽取,比如我們每天定時抽取一次。在實時方面,可以考慮用canal監聽mysql的binlog,實時接入即可。

  • 埋點日誌

線上系統會打入各種日誌,這些日誌一般以文件的形式保存,我們可以選擇用flume定時抽取,也可以使用spark streaming或者storm來實時接入,當然,kafka也會是一個關鍵的角色。

  • 其它數據源

不同的業務其它數據源不一樣,比如第三方數據。
在這裏插入圖片描述

DW

Data warehouse 數據倉庫層 數據倉庫層是我們在做數據倉庫時要核心設計的一層,在這裏,從 ODS 層中獲得的數據按照主題建立各種數據模型。DW層又細分爲 DWD(Data Warehouse Detail)層、DWM(Data WareHouse Middle)層和DWS(Data WareHouse Servce)層。
在這裏,我們需要了解四個概念(之後會講述):

  1. 維(dimension)
  2. 事實(Fact)
  3. 指標(Index)
  4. 粒度(Granularity)

DW層分層

1. 數據明細層:DWD(Data Warehouse Detail)

該層一般保持和ODS層一樣的數據粒度,並且提供一定的數據質量保證。同時,爲了提高數據明細層的易用性,該層會採用一些維度退化手法,將維度退化至事實表中,減少事實表和維表的關聯。

另外,在該層也會做一部分的數據聚合,將相同主題的數據彙集到一張表中,提高數據的可用性。

2. 數據中間層:DWM(Data WareHouse Middle)

該層會在DWD層的數據基礎上,對數據做輕度的聚合操作,生成一系列的中間表,提升公共指標的複用性,減少重複加工。

直觀來講,就是對通用的核心維度進行聚合操作,算出相應的統計指標。

3. 數據服務層:DWS(Data WareHouse Servce)

又稱數據集市或寬表。按照業務劃分,如流量、訂單、用戶等,生成字段比較多的寬表,用於提供後續的業務查詢,OLAP分析,數據分發等。

一般來講,該層的數據表會相對比較少,一張表會涵蓋比較多的業務內容,由於其字段較多,因此一般也會稱該層的表爲寬表。

在實際計算中,如果直接從DWD或者ODS計算出寬表的統計指標,會存在計算量太大並且維度太少的問題,因此一般的做法是,在DWM層先計算出多個小的中間表,然後再拼接成一張DWS的寬表。由於寬和窄的界限不易界定,也可以去掉DWM這一層,只留DWS層,將所有的數據在放在DWS亦可。

DM

Data mart 數據集市層 該層主要是提供數據產品和數據分析使用的數據,一般會存放在 ES、MySQL、PostgreSql、Redis等系統中供線上系統使用,也可能會存在 Hive 或者 Druid 中供數據分析和數據挖掘使用。 比如我們經常說的報表數據,或者說那種大寬表,一般就放在這裏。每個分層不是必須要用ODS、DW、DM等字樣來標識,可以隨便起名字,只要統一這一層是什麼類型數據,名字符合知名知意即可。

注:
數據集市 – 小型的,面向部門或工作組級數據倉庫,即”小數據倉庫”。如果說數據倉庫是建立在企業級的數據模型之上的話。那麼數據集市就是企業級數據倉庫的一個子集,它主要面向部門級業務,並且只是面向某個特定的主題。數據集市可以在一定程度上緩解訪問數據倉庫的瓶頸。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章