作者:原上野
一,數據倉庫的數據模型
1. 數據源
數據源,顧名思義就是數據的來源,互聯網公司的數據來源隨着公司的規模擴張而呈遞增趨勢,同時自不同的業務源,比如埋點采集,客戶上報等。
2. ODS層
數據倉庫源頭系統的數據表通常會原封不動地存儲一份,這稱為ODS(Operation Data Store)層, ODS層也經常會被稱為准備區(Staging area),它們是后續數據倉庫層(即基於Kimball維度建模生成的事實表和維度表層,以及基於這些事實表和明細表加工的匯總層數據)加工數據的來源,同時ODS層也存儲着歷史的增量數據或全量數據。
3. DW層
據倉庫明細層(Data Warehouse Detail , DWD)和數據倉庫匯總層(Data Warehouse Summary, DWS)是數據倉庫的主題內容。DWD和DWS層的數據是ODS層經過ETL清洗、轉換、加載生成的,而且它們通常都是基於Kimball的維度建模理論來構建的,並通過一致性維度和數據總線來保證各個子主題的維度一致性。
4. DWS層
應用層匯總層主要是將DWD和DWS的明細數據在hadoop平台進行匯總,然后將產生的結果同步到DWS數據庫,提供給各個應用。
二,數據采集
數據采集的任務就是把數據從各種數據源中采集和存儲到數據存儲上,期間有可能會做一些簡單的清洗。
比較常見的就是用戶行為數據的采集
先做sdk埋點,通過kafka實時采集到用戶的訪問數據,再用spark做簡單的清洗,存入hdfs作為數據倉庫的數據源之一。
三,數據存儲
隨着公司的規模不斷擴張,產生的數據也越來越到,像一些大公司每天產生的數據量都在PB級別,傳統的數據庫已經不能滿足存儲要求,目前hdfs是大數據環境下數據倉庫/數據平台最完美的數據存儲解決方案。
在離線計算方面,也就是對實時性要求不高的部分,Hive還是首當其沖的選擇,豐富的數據類型、內置函數;壓縮比非常高的ORC/PARQUET文件存儲格式;非常方便的SQL支持,使得Hive在基於結構化數據上的統計分析遠遠比MapReduce要高效的多,一句SQL可以完成的需求,開發MR可能需要上百行代碼;而在實時計算方面,flink是最優的選擇,不過目前僅支持java跟scala開發。
四,數據同步
數據同步是指不同數據存儲系統之間要進行數據遷移,比如在hdfs上,大多業務和應用因為效率的原因不可以直接從HDFS上獲取數據,因此需要將hdfs上匯總后的數據同步至其他的存儲系統,比如mysql;sqoop可以做到這一點,但是Sqoop太過繁重,而且不管數據量大小,都需要啟動MapReduce來執行,而且需要Hadoop集群的每台機器都能訪問業務數據庫;阿里開源的dataX是一個很好的解決方案。
五,維度建模
維度建模的基本概念
維度建模(dimensional modeling)是專門用於分析型數據庫、數據倉庫、數據集市建模的方法。這里牽扯到兩個基本的名詞:維度,事實。
1、維度
維度是維度建模的基礎和靈魂,在維度建模中,將度量成為事實,將環境描述為維度,維度是用於分析事實所需的多樣環境。例如,在分析交易過程中,可以通過買家、賣家、商品和時間等維度描述交易發生的環境。
2、事實
事實表作為數據倉庫維度建模的核心,緊緊圍繞着業務過程來設計,通過獲取描述業務過程的度量來表達業務過程,包含了引用的維度和與業務過程有關的度量。事實表中一條記錄所表達的業務細節被稱之為粒度。通常粒度可以通過兩種方式來表述:一種是維度屬性組合所表示的細節程度;一種是所表示的具體業務含義。
六,維度建模用到的專業術語
1、 數據域
指面向業務分析,將業務過程活動維度進行抽象的集合。其中,業務過程可以概括為一個個不可分割的行為事件,在業務過程里可以定義指標;維度是指度量的環境,如買家下單事件,買件是維度。為保障整個體系的生命力,數據域是需要抽象提煉並且長期維護更新的,但不輕易變動。在划分數據域時,既要能涵蓋所有業務需求,又能在新業務進入時無影響的包含已有的數據還要擴展新的數據域。
2、 業務過程
值企業活動事件,如下單、支付、退款都是業務過程。業務過程是一個不可分割的行為事件。
3、 時間周期
用來名明確數據統計的時間周期或者時間點,如自然月、最近30天,自然周等。
4、 修飾類型
是對抽象詞的一種抽象划分。修飾類型從屬某個數據域,
如日志域的訪問終端涵蓋無線端,PC端等修飾詞。
5、 修飾詞
指除了統計維度以外指標的業務場景限定抽象。修飾詞隸屬於某一個修飾類型。
6、 度量/原子指標
基於某一業務事件行為下的度量,是業務定義中不可在分割的指標,具有明確的業務含義名詞,如支付金額。
7、維度
上述已經做了介紹,不必重述
8、 維度屬性
維度屬性隸屬於某一個維度,如地理維度里面的國家名稱,國建id,省份名稱等。
9、 事實
上述已經做了介紹,不必重述
10、派生指標
派生指標=一個原子指標+多個修飾詞+時間周期。可以理解為對原子指標業務統計范圍的圈定。如原子指標:支付金額,最近一天海外買家支付金額為派生指標(最近一天為時間周期,海外為修飾詞,買家為維度)。
11、鑽取
鑽取是改變維的層次,變換分析的粒度。它包括向上鑽取(roll up)和向下鑽取(drill down)。roll up是在某一維上將低層次的細節數據概括到高層次的匯總數據,或者減少維數;是指自動生成匯總行的分析方法。通過向導的方式,用戶可以定義分析因素的匯總行,例如對於各地區各年度的銷售情況,可以生成地區與年度的合計行,也可以生成地區或者年度的合計行。
而drill down則相反,它從匯總數據深入到細節數據進行觀察或增加新維。例如,用戶分析“各地區、城市的銷售情況”時,可以對某一個城市的銷售額細分為各個年度的銷售額,對某一年度的銷售額,可以繼續細分為各個季度的銷售額。通過鑽取的功能,使用戶對數據能更深入了解,更容易發現問題,做出正確的決策。
七,維度建模的三種模式
1、 星形模式
星形模式(Star Schema)是最常用的維度建模方式,下圖展示了使用星形模式進行維度建模的關系結構:

可以看出,星形模式的維度建模由一個事實表和一組維表成,且具有以下特點:
a. 維表只和事實表關聯,維表之間沒有關聯;
b. 每個維表的主碼為單列,且該主碼放置在事實表中,作為兩邊連接的外碼;
c. 以事實表為核心,維表圍繞核心呈星形分布;
2、雪花模式
雪花模式(Snowflake Schema)是對星形模式的擴展,每個維表可繼續向外連接多個子維表。下圖為使用雪花模式進行維度建模的關系結構:

星形模式中的維表相對雪花模式來說要大,而且不滿足規范化設計。雪花模型相當於將星形模式的大維表拆分成小維表,滿足了規范化設計。然而這種模式在實際應用中很少見,因為這樣做會導致開發難度增大,而數據冗余問題在數據倉庫里並不嚴重。
3、星座模式
星座模式(Fact Constellations Schema)也是星型模式的擴展。基於這種思想就有了星座模式:

前面介紹的兩種維度建模方法都是多維表對應單事實表,但在很多時候維度空間內的事實表不止一個,而一個維表也可能被多個事實表用到。在業務發展后期,絕大部分維度建模都采用的是星座模式。
4、三種模式對比
歸納一下,星形模式/雪花模式/星座模式的關系如下圖所示:

雪花模式是將星型模式的維表進一步划分,使各維表均滿足規范化設計。而星座模式則是允許星形模式中出現多個事實表。
參考文檔: