數據倉庫的特徵在於面向主題、集成性、穩定性和時變性,用於支持管理決策。數據倉庫的存在的意義在於對企業的全部數據進行彙總,爲企業各個部門提供統一的、規範的數據出口。數據倉庫在構建過程當中一般都須要進行分層處理。業務不一樣,分層的技術處理手段也不一樣。數倉分層的主要緣由:數據庫
複雜問題簡單化
將一個複雜的任務分解成多個步驟來完成,每一層只處理單一的步驟,比較簡單和容易理解。並且便於維護數據的準確性,當數據出現問題以後,能夠不用修復全部的數據,只須要從有問題的步驟開始修復。數據結構
常見的數據倉庫分爲ODS操做數據存儲層、DW數據倉庫層和DM數據集市層三層,其中DW層又分爲DWD層和DWS層。數據倉庫分層結構見下圖:性能
ODS層中的數據所有來自於業務數據庫,ODS層的表格也業務數據庫中的表格一一對應,就是將業務數據庫中的表格在數據倉庫的底層從新創建一次,數據與結構徹底一致。
因爲業務數據庫(OLTP)基本按照ER實體模型建模,所以ODS層中的建模方式也是ER實體模型。spa
DWD層要作的就是將數據清理、整合、規範化、髒數據、垃圾數據、規範不一致的、狀態定義不一致的、命名不規範的數據都會被處理。DWD層應該是覆蓋全部系統的、完整的、乾淨的、具備一致性的數據層。在DWD層會根據維度模型,設計事實表和維度表,也就是說DWD層是一個很是規範的、高質量的、可信的數據明細層。
DWS層爲公共彙總層,會進行輕度彙總,粒度比明細數據稍粗,基於DWD層上的基礎數據,整合彙總成分析某一個主題域的服務數據,通常是寬表。DWS層應覆蓋80%的應用場景。.net
DM層爲數據集市層,面向特定主題。在DM層完成報表或者指標的統計,DM層已經不包含明細數據,是粗粒度的彙總數據。DM層是針對某一個業務領域創建模型,具體用戶(通常爲決策層)查看DM層生成的報表。設計
維度建模的理論由 Ralph Kimball 提出,他提出將數據倉庫中的表劃分爲事實表和維度表兩種類型。維度建模源自數據集市,主要面向分析場景。維度建模是面向分析場景而生,針對分析場景構建數倉模型;重點關注快速、靈活的解決分析需求,同時可以提供大規模數據的快速響應性能。針對性強,主要應用於數據倉庫構建和OLAP引擎底層數據模型。
「事實表」,用來存儲事實的度量(measure)及指向各個維的外鍵值。「維度表」, 用來保存該維的元數據,即維的描述信息,包括維的層次及成員類別等。
簡單的說,維度表就是你觀察該事物的角度(維度),事實表就是你要關注的內容。例如用戶使用滴滴打車,那麼打車這件事就能夠轉化爲一個事實表,即打車訂單事實表,而後用戶對應一張用戶維度表,司機對應一張司機維度表。3d
在現實世界中,每個操做型事件,基本都是發生在實體之間的,伴隨着這種操做事件的發生,會產生可度量的值,而這個過程就產生了一個事實表,存儲了每個可度量的事件。
發生在現實世界中的操做性事件所產生的可度量數值,存儲在事實表中。從最低的粒度級別來看,事實錶行對應一個度量事件,反之亦然。所以,事實表的設計徹底依賴於物理活動,不受可能產生的最終報表的影響。除數字度量外,事實表老是包含外鍵,用於關聯與之相關的維度,也包含可選的退化維度鍵和日期/時間戳。查詢請求的主要目標是基於事實表展開計算和彙集操做。
事實表每每包含三個重要元素:blog
例如在電商場景中的一次購買事件,涉及主體包括客戶、商品、商家,產生的可度量值包括商品數量、金額、件數等。事件
每一個維度表都包含單一的主鍵列。維度表的主鍵能夠做爲與之關聯的任何事實表的外鍵,固然,維度錶行的描述環境應與事實錶行徹底對應。維度表一般比較寬,是扁平型非規範表,包含大量的低粒度的文本屬性。
好比商品,單一主鍵爲商品ID,屬性包括產地、顏色、材質、尺寸、單價等,但並不是屬性必定是文本,好比單價、尺寸,均爲數值型描述性的,平常主要的維度抽象包括:時間維度表、地理區域維度表等。
作用域
綜上所述,若是針對用戶的下單行爲(單一商品)進行維度建模,能夠獲得以下模型:
爲了讓數據全部相關方對於表包含的信息有一個共同的認知。好比說屬於哪一層(ODS、DW明細、DW彙總、DM)?哪一個業務/部門?哪一個維度(用戶、車機設備)?哪一個時間跨度(天、月、年、實時)?增量仍是全量?
命名格式:層次_業務/部門_修飾/描述_範圍/週期
數據倉庫中表格的命名規範以下表所示:
數倉層次 | 週期/數據範圍 | ||
公用維度 | dim | 日快照 | d |
DM層 | dm | 增量 | i |
ODS層 | ods | 周 | w |
DWD層 | dwd | 拉鍊表 | l |
DWS層 | dws | 非分區全量表 | a |