数据仓库建立
數據倉庫準備工作
1、為什么要對數據倉庫分層?
- 用空間換時間,通過大量的預處理來提升應用系統的用戶體驗(效率),因此數據倉庫會存在大量冗余的數據。
- 如果不分層的話,如果源業務系統的業務規則發生變化將會影響整個數據清洗過程,工作量巨大。
- 通過數據分層管理可以簡化數據清洗的過程,因為把原來一步的工作分到了多個步驟去完成,相當于把一個復雜的工作拆成了多個簡單的工作,把一個大的黑盒變成了一個白盒,每一層的處理邏輯都相對簡單和容易理解,這樣我們比較容易保證每一個步驟的正確性,當數據發生錯誤的時候,往往我們只需要局部調整某個步驟即可。
2、數據倉庫標準分層
數據倉庫標準上可以分為四層:ODS(臨時存儲層)、PDW(數據倉庫層)、MID(數據集市層)、APP(應用層)
- ODS層:?
為臨時存儲層,是接口數據的臨時存儲區域,為后一步的數據處理做準備。一般來說ODS層的數據和源系統的數據是同構的,主要目的是簡化后續數據加工處理的工作。從數據粒度上來說ODS層的數據粒度是最細的。ODS層的表通常包括兩類,一個用于存儲當前需要加載的數據,一個用于存儲處理完后的歷史數據。歷史數據一般保存3-6個月后需要清除,以節省空間。但不同的項目要區別對待,如果源系統的數據量不大,可以保留更長的時間,甚至全量保存; - PDW層:?
為數據倉庫層,PDW層的數據應該是一致的、準確的、干凈的數據,即對源系統數據進行了清洗(去除了雜質)后的數據。這一層的數據一般是遵循數據庫第三范式的,其數據粒度通常和ODS的粒度相同。在PDW層會保存BI系統中所有的歷史數據,例如保存10年的數據 - MID層:?
為數據集市層,這層數據是面向主題來組織數據的,通常是星形或雪花結構的數據。從數據粒度來說,這層的數據是輕度匯總級的數據,已經不存在明細數據了。從數據的時間跨度來說,通常是PDW層的一部分,主要的目的是為了滿足用戶分析的需求,而從分析的角度來說,用戶通常只需要分析近幾年(如近三年的數據)的即可。從數據的廣度來說,仍然覆蓋了所有業務數據。 - APP層:?
為應用層,這層數據是完全為了滿足具體的分析需求而構建的數據,也是星形或雪花結構的數據。從數據粒度來說是高度匯總的數據。從數據的廣度來說,則并不一定會覆蓋所有業務數據,而是MID層數據的一個真子集,從某種意義上來說是MID層數據的一個重復。從極端情況來說,可以為每一張報表在APP層構建一個模型來支持,達到以空間換時間的目的數據倉庫的標準分層只是一個建議性質的標準,實際實施時需要根據實際情況確定數據倉庫的分層,不同類型的數據也可能采取不同的分層方法。
3、實際數據倉庫分層
這里我們采用的是京東的數據倉庫分層模式,是根據標準的模型演化而來。?
數據倉庫分層:
- BDM:緩沖數據,源數據的直接映像
- FDM:基礎數據層,數據拉鏈處理、分區處理
- GDM:通用聚合
- ADM:高度聚合
先把數據從源數據庫中抽取加載到BDM層中,?
然后FDM層根據BDM層的數據按天分區。
?
數據倉庫基本表介紹
1、BDM層數據表(貼源緩存層)
| itcast_bdm_order | 訂單表 |
| itcast_bdm_order_desc | 訂單明細表 |
| itcast_bdm_order_goods | 訂單商品表 |
| itcast_bdm_user | 用戶表 |
| itcast_bdm_order_cart | 購物車表 |
| itcast_bdm_user_pc_click_log、itcast_bdm_user_app_click_log | 用戶上網記錄表 |
2、FDM層數據表(拉鏈表、分區表)
| itcast_fdm_user_wide | 用戶寬表 |
| itcast_fdm_order_cart | 購物車表 |
| itcast_fdm_order | 訂單表 |
| itcast_fdm_order_desc | 訂單明細表 |
| itcast_fdm_user_app_pageview | 用戶app端view表 |
| itcast_fdm_user_pc_pageview | 用戶pc端view表 |
3、GDM層數據表(通用數據模型層)
| itcast_gdm_user_basic | 客戶基本屬性表 |
| itcast_gdm_user_consume_order | 客戶消費訂單表 |
| itcast_gdm_order | 訂單模型表 |
| itcast_gdm_user_buy_category | 客戶購買類目表 |
| itcast_gdm_user_visit | 客戶訪問信息表 |
?
總結
- 上一篇: ElasticSearch 使用Java
- 下一篇: 深入理解ElasticSearch(六)