資料倉儲分層你清楚了嗎
為什麼要分層
在實際的工作中,我們都希望自己的資料能夠有順序地流轉,設計者和使用者能夠清晰地知道資料的整個宣告週期。優秀可靠的數倉體系,需要良好的資料分層結構。合理的分層,能夠使資料體系更加清晰,使複雜問題得以簡化。合理的分層概括就是:清晰的資料結構與依賴,提高開發效率,合理的資料許可權。具體具有以下優點:
資料結構與依賴關係:如果沒有清晰的分層,可能會做出一套表依賴結構混亂,且出現迴圈依賴的資料體系,讓流程越走越越死。
減少重複開發的成本:建立一個或者多個模型,可以為支業務撐建立多個指標。規範資料分層,開發通用的中間層,可以極大地減少重複計算的工作。
統一資料口徑:透過資料分層,提供統一的資料出口,統一輸出口徑。
資料一致性:對於公共下沉資料,下游使用的時候不再重新計算,可以保證一定是資料一致性問題。
資料許可權:透過分層,可以更方便地對不同層,不同的資料模型進行許可權管理,特定業務場景下,對不同的開發人員和業務人員遮蔽一些敏感的資料。
怎麼分層
ODS(原始資料層)
存放最原始的資料,結構和源系統保持一致,減少對業務系統的影響。
DWD(明細資料層)
在維度建模的理論上進行構建,存放維度模型中的事實表,儲存各業務過程最小粒度的操作記錄。有時候,為了提高資料明細層的易用性,該層會採用一些維度退化手法,將維度退化至事實表中,減少事實表和維表的關聯。
DIM(公共維度層)
在維度建模的理論上進行構建,存放維度模型中的維度表,儲存一致性維度資訊。維度類分兩種型別(自己概括的):
大維度資料:比如使用者維度等等
小維度資料:比如配置表,日期表,地區表等等
DWS(彙總資料層)
基於上層的指標需求,以分析的主題物件作為建模驅動,構建公共統計粒度的彙總表。該層的資料表會相對比較少,一張表會涵蓋比較多的業務內容,由於其欄位較多,因此一般也會稱該層的表為寬表。主要作用就是提升指標的複用性,減少重複加工。單維度下的輕度彙總表維度單一,統計指標豐富,迭代更靈活;多維度的輕度彙總表,維度豐富,統計指標有限,迭代相對複雜。
ADS(資料應用層)
存放各項統計指標結果。
分層的誤區
數倉層內部的劃分不是為了分層而分層,分層是為了解決資料 任務及工作流的組織、資料的流向、讀寫許可權的控制、不同需求的滿足等各類問題。對於上面分層羅列,是種通用的建設分層邏輯。可能你也看到有四層的,有六層的,甚至更多的,比如DWD,DWB,DIM,DWM,MID......雖然每層你知道什麼意思,但是有時候不是很清楚這些層之間的分割線是什麼,出現複雜的業務反而讓我們無法下手。所以各個業務不同,需要合適自己的就好。
所謂的寬表
經歷幾家公司,也聽過好多公司,通常做法是把很多的維度、事實相關聯後形成一個所謂的寬表。可能剛開始維度資料比較少,但是跟著業務的增長冗餘維度增加,寬表足夠的事實,足夠的維度寬。帶來影響就是沒有清晰的表結構和隨意增長的寬度。
所以,一些人開始強調劃分主題,按照某一主題事實去擴充套件維度。也即寬表的涉及不依賴具體的業務需求而是根據整體業務線相匹配。
分層規則與規範
ODS
(1) 根據源業務系統表的情況以增量或全量方式抽取資料。
(2) 以統計日期和時間進行分割槽儲存。
(3) 資料基本不做清洗和轉換,資料的表結構和資料粒度與原業務系統保持一致。
DWD
(1)對資料做清洗、轉換,脫敏等等處理,可以對錶結構進行裁剪和彙總等操作。
(2)不是所有的資料都要永久儲存,根據業務週期去做出決定。
DWD層中主要的事實表有三種型別 : 事務事實表、週期快照事實表和累積快照事實表。
事務型事實表
是什麼
事務事實表用來記錄各業務過程,跟蹤時間上某點的度量事件,它儲存的是各業務過程的原子操作事件,即最細粒度。
場景
事務型事實表可用於分析與各業務過程相關的各項統計指標,由於其儲存了最細粒度的記錄,可以提供最大限度的靈活性,可以支援無法預期的各種細節層次的統計需求。
不適合幹什麼
(1)存量型指標不適合
比如說商品庫存,賬戶餘額... 對於這種存在進進出出(加或減操作)不適合。一張儲存商品的進貨的原子操作事件,一張儲存商品出庫的原子操作事件。如果要統計當日的庫存有多少,這就需要對進貨表和出庫表進行操作,需要一正一反地區分對庫存的影響。所以在寫程式碼或者sql過程還是執行效率都會打折扣。
(2)多事務關聯統計不適合
比如在訂單中,建立了下單事務事實表和支付事務事實表,現在指標統計某個時間內使用者下單到支付的時間間隔的平均值,這就需要這兩個表的Join操作,然而,訂單在大型公司屬於大表,大表 Join 大表 你可想而知。
週期型快照事實表
週期快照事實表以具有規律性的、可預見的時間間隔來記錄事實,一般週期可以是每天、每週、每月、每年等。主要用於分析一些存量型或者狀態型指標
場景
存量型:例如對於商品庫存、賬戶餘額這些存量型指標,業務系統中通常就會計算並儲存最新結果,所以定期同步一份全量資料到資料倉儲,構建週期型快照事實表,就能輕鬆應對此類統計需求。
狀態型:例如對於空氣溫度、行駛速度這些狀態型指標,由於它們的值往往是連續的,我們無法捕獲其變動的原子事務操作,所以無法使用事務型事實表統計此類需求。而只能定期對其進行取樣,構建週期型快照事實表。
累積型快照事實表
用來描述過程開始和結束之間的關鍵步驟事件,覆蓋過程的整個生命週期,通常具有多個時間欄位來記錄關鍵時間點,當過程隨著生命週期不斷變化時,記錄也會隨著過程的變化而被修改。
場景
如交易流程中的下單、支付、發貨、確認收貨業務過程。會具體記錄下單時間,支付時間,發貨時間,收穫時間。如果統計某個時間內使用者下單到支付的時間間隔的平均值。這樣就輕鬆搞定。
對比
- | 事務型事實表 | 週期型事實表 | 累積型快照事實表 |
---|---|---|---|
時間 | 離散事務時間 | 每天、每週、每月、每年等 | 多個時間欄位來記錄關鍵時間點 |
粒度 | 每行代表實體的一個事務 | 每行代表某時間週期的一個實體 | 每行代表一個實體的生命週期 |
資料載入方式 | insert | insert | insert/update |
DIM
(1) 維度在不同的業務表中的欄位名稱、資料型別、資料內容必須保 持一致。
(2)可以將維度與關聯性強的欄位進行整合,一種是水平整合:不同的表包含不同的資料,會使得維度本身的記錄數變多,是對原有維度的記錄數上的補充。另一種是垂直整合:不同的來源表包含相同的資料集,維度本身記錄數不會變,只是會對維度屬性進行補充。
(3)拆分針對重要性,業務相關性、源、使用頻率等可分為核心表、擴充套件 表。一種是水平拆分:兩個業務相關性低,整合在一起會對模型的穩定性和易用性產生影響。另一種是垂直拆分:維度屬性從落庫時間,使用頻次,等等因素考慮上需要進行拆分放到子維度上。
DWS
(1)存放比較全的歷史資料,業務發生變化時易於擴充套件,適應複雜的實際業務情況。
(2)儘量減少資料訪問時的計算量,最佳化表的關聯。
(3)可以有資料冗餘。
(4)不要在同一個表中儲存不同粒度的聚集資料。
ADS
(1)資料公用性。
(2)清晰明瞭的統計週期。
(3)等你補充......
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2927528/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料倉儲(6)數倉分層設計
- 資料倉儲架構分層設計架構
- 資料倉儲分層概念之我見
- 分層架構在資料倉儲的應用架構
- 資料湖會取代資料倉儲嗎?
- 資料倉儲為什麼要進行分層建設?怎麼分?
- 你選對儲存結構了嗎?你會玩UVM配置資料庫了嗎?資料庫
- 資料倉儲被淘汰了?都怪資料湖
- 資料倉儲主題域如何劃分
- 銀行資料庫選型需求,你真的清楚嗎?資料庫
- 數倉 - [04] 數倉分層
- 資料量不大的資料倉儲方案有必要用 hive 嗎?Hive
- 資料庫倉庫系列:(一)什麼是資料倉儲,為什麼要資料倉儲資料庫
- 資料倉儲 - ER模型模型
- [數倉]資料倉儲設計方案
- 有了資料湖,資料倉儲究竟能不能被取代?
- 關於學習Python的疑問,你都清楚了嗎?Python
- 你的ES資料備份了嗎?
- 資料倉儲應該用什麼方案——資料倉儲實施方案概述
- 什麼是資料倉儲
- 什麼是資料倉儲?
- 資料倉儲經驗概念
- 資料倉儲建模方法論
- 7天帶你全面瞭解資料倉儲 體驗海量資料分析
- 你真的清楚DateTime in C#嗎?C#
- 淺談資料倉儲和大資料大資料
- 談談資料湖和資料倉儲
- 資料湖 vs 資料倉儲 vs 資料庫資料庫
- Flex屬性你真的搞清楚了嗎?我深表懷疑Flex
- 智慧 | 你真的瞭解自動化倉儲系統嗎?
- 資料倉儲(7)數倉規範設計
- Laravel 2018使用資料分析——Laravel你用對了嗎?學對了嗎?Laravel
- 新興資料倉儲設計與實踐手冊:從分層架構到實際應用(二)架構
- 新興資料倉儲設計與實踐手冊:從分層架構到實際應用(三)架構
- 數倉建模分層理論
- 資料倉儲基礎介紹
- ETL資料倉儲的使用方式
- ABP 資料訪問 - IRepository 倉儲