關於數據倉庫的分層,彷佛你們都有一個共同的認識。但涉及到每一層該如何去建模,可能每一個人都有本身的理解。數據建模,毫無疑問是數倉建設的重中之重,而後,在實際的開發過程當中,會把大量的時間都投入到了需求開發,每每會忽略數據建模(尤爲是DWS層的建模),久而久之,數據模型變的愈來愈雜亂,指標口徑沒法統一,形成的結果就是:雖然表不少,可是卻很難取數。本文主要介紹DWS層建模的基本方法論,但願對你有所幫助。跨域
公衆號【大數據技術與數倉】首發,關注領取資料
合理的數據倉庫分層一方面可以下降耦合性,提升重用性,可讀性可維護性,另外一方面也能提升運算的效率,影響到數據需求迭代的速度,近而影響到產品決策的及時性。創建數據分層能夠提煉公共層,避免煙囪式開發,可見一個合適且合理的數倉分層是極其重要。數據結構
當咱們在作數據需求時,會不會有這樣的疑問:我直接能從DWD層很方便的取出想要的數據,爲何還要畫蛇添足創建DWS層的彙總表呢?那是否是意味着能夠不用創建DWS層的表呢,答案是:能夠的。可是這有一個前提,就是業務場景不復雜。從短時間來看能夠快速知足數據需求的開發,可是長期來看,會存在以下的問題:性能
以分析的主題對象做爲建模驅動,基於上層的應用和產品的指標需求,構建公共粒度的彙總指標表。以寬表化手段物理化模型,構建命名規範、口徑一致的統計指標,爲上層提供公共指標,創建彙總寬表。如:造成日,周,月粒度彙總明細,或者基於某一個維度,如商品類目粒度的彙總日表,統計便於下一步報表數據結構的組織。大數據
原子指標與派生指標所謂原子指標,便是業務過程的度量,就是明細事實表中的度量值。好比訂單表,那麼某個訂單對應的訂單金額就是一個原子指標,這個指標是伴隨着訂單的業務過程而產生的。設計
所謂派生指標,即由統計週期+修飾詞+統計粒度+原子指標組合加工而成的指標對象
其中,統計週期:指的是想要統計的時間週期,好比天、周、月接口
修飾詞:指的是業務的約束,一般出如今SQL的where條件中,好比訂單的下單渠道等等資源
統計粒度:指的是維度組合,一般出如今SQL的group by中,好比統計商品一級類目對應的銷售額,那一級類目就是統計粒度開發
關於彙總層的表建模應遵循如下的原則:數據分析
CREATE TABLE IF NOT EXISTS dws_asale_trd_itm_ord_1d
(
item_id BIGINT COMMENT '商品ID',
item_title STRING COMMENT '商品名稱',
cate_id BIGINT COMMENT '商品類目ID',
cate_name STRING COMMENT '商品類目名稱',
mord_prov STRING COMMENT '收貨人省份',
confirm_paid_amt_sum_1d DOUBLE COMMENT '最近一天訂單已經確認收貨的金額總和'
)
COMMENT '商品粒度交易最近一天彙總事實表'
PARTITIONED BY (ds STRING COMMENT '分區字段YYYYMMDD')
;
在設計DWS表的時候,不少人會把全部能夠聚合的維度進行cube,這樣就獲得了不少個派生指標,而這些派生指標放在同一張表中無疑會增長這張表的使用難度,好比在實際的取數時,每每只關心某個統計粒度的指標。實際上cube的數據儘可能放在ADS層,這樣在開發數據接口或者應用層取數時都會比較方便。因此在設計DWS層時,應當遵循前文提到的一些原則,一言以蔽之,就是設計儘可能體現出公共性、使用簡單而且用戶很容易理解。
數倉建設是一個不斷迭代的過程,數據建模一樣是一個不斷迭代的過程。同時,業務是不斷變化的,建模人員對業務的理解也是變化的,這些也就註定了建模是一個迭代過程。雖然存在這些變化,但咱們在數據建模的時候一樣要遵循必定的規範,切不可爲所欲爲。
因爲數倉的建設是與業務息息相關的,數倉建設的方法論僅僅只是指引咱們構建數倉的一個方向,在實際的落地執行過程當中會存在各類各樣的問題,且不可被這些理論所禁錮。簡單一句話就是:合適就好。因此,評價模型的好壞與否,更多的是從使用者的角度出發,好比簡單、易於取數、表的數量剛好。
本文主要介紹了數據倉庫中DWS建設的基本思路,包括DWS層的特色、設計原則以及設計步驟,並對DWS層建設存在的一些問題進行了闡述。固然,這些只是DWS層建模的一些方法論,智者見智仁者見仁,在實際的數據建模過程當中能夠參考這些方法論,但也要注意與具體的業務場景相結合,數據建模是創建在本身對業務的理解基礎之上的,切不可一味地照搬,要靈活運用。另外,不要苛求創建完美的數據模型,應當追求簡單、方便、易用。換句話說,建模沒有對錯之分,合適就好。