文章目錄
數據模型
名詞說明
業務板塊
定義數據倉庫的名稱和業務空間,以企業內一個相對獨立的業務爲分配單元。例如,如果業務涉及零售、文娛,且系統間相對獨立,則需要構建兩個業務板塊,即零售、文娛。如果業務僅涉及零售,且業務內的系統間隔離較少,則只需要構建一個業務板塊,即零售。
公共定義
定義企業構建數據所需的全局概念對象或參數,以保證全局概念統一。當定義完成後,系統內其他指標(例如派生指標)可以按需統一、通用化引用這些對象,例如統計週期,年、月、日、每週、每日。
項目管理
項目是一種物理空間上的劃分。項目管理,即用戶在數據中臺建設過程中,對物理資源及開發人員進行隔離化管理。一個業務板塊可以包含多個項目,每個系統成員可以加入多個不同的項目。
維度
維度即進行統計的對象。通常情況下,維度是實際存在、不因事件發生就存在的實體。創建維度,即從頂層規範業務中的實體(主數據),並保證實體的唯一性。例如訂單、商品。維度由多個屬性組成的一個實體,例如買家維度,可以由買家支付金額、買家姓名、買家手機號之類的屬性豐富維度這個實體。對於哪些使用較多卻無法歸屬到相應的維度中的屬性,歸併到雜項維度中。
維度在事實表中用於描述業務過程所處的環境信息。
維度退化,是將一些維度信息直接存儲到事實表中,冗餘數據,方便讀取數據。
業務過程
業務過程即業務活動中的所有事件(它是一個事件集合)。創建業務過程,即從頂層規範業務中事務內容的類型及唯一性。因此業務過程是一個不可拆分的行爲事件。例如下單、支付、退款都是業務過程。
淘寶交易訂單的流轉的業務過程有四個:創建訂單、買家付款、賣家發貨、買家確認收貨。
指標
指標分爲原子指標和派生指標。
原子指標:對指標統計口徑(即計算邏輯)、具體算法的一個抽象,是業務定義中不可再拆分的指標,例如支付金額。一般都爲數值(統計)。原子指標=業務過程(動作)+度量,
如支付(事件)金額(度量)。
派生指標:業務中常用的統計指標。派生指標=原子指標+業務限定+統計週期+統計粒度。例如,自然周、會員、採用優惠券支付的訂單。
統計粒度
統計的最小顆粒度,數據唯一性的保證,統計分析的對象或視角,定義數據需要彙總的程度,可以理解爲聚合運算時的分組條件(類似於SQL中group by的對象)。粒度是維度的一個組合,指明您的統計範圍。例如,某個指標是某個賣家在某個省份的成交額,則粒度就是賣家、省份這兩個維度的組合。
事實表中的一條記錄所表達的業務細節程度被稱爲粒度。通常粒度可以通過兩種方式來表述:一種是維度屬性組合所表示的細節程度;一種是所表示的具體業務含義。
事實
度量業務過程,一般爲整型或浮點型的十進制數值。有可加性、半加性和不可加性三種類型。可加性事實是指可以按照與事實表關聯的任意維度進行彙總。半可加性事實只能只能按照特定的維度彙總,能對所有維度彙總,比如庫存可以按照地點和商品進行彙總,而按時間維度把一年中每個月的庫存累加起來則毫無意義。還有一種度量完全不具備可加性,比如比率型事實。對於不可加性事實可分解爲可加的事實來實現聚集。
事實可以通過回答“過程的度量是什麼”來確定。
事實的設計準則
-
事實完整性
儘可能多地獲取所有的度量。
-
事務一致性
明確存儲每一個事實以確保度量的一致性。
-
事實可加性
遇到不可加性度量,比如分攤比例、利潤率等,需要進行轉化爲可加性。
不可加性,就是兩條記錄中的值相加,是沒有統計價值的,就可以認爲是不可加的。
事實表
事實表緊緊圍繞業務過程來設計,通過獲取描述業務過程的度量來表達業務過程。
事實表有三種類型:事務事實表、週期快照事實表和累計快照事實表。
事務事實表用來描述業務過程,跟蹤空間或時間上某個點的度量事件,保存的是最原子的數據。
週期快照事實表以具有規律性的、可預見的時間間隔記錄事實,時間間隔如每天、每月、每年等。
累積快照事實表用來表述過程開始和結束之間的關鍵步驟事件,覆蓋過程的整個生命週期,通常具有多個日期字段來記錄關鍵時間點。
事務事實表 | 週期快照對照事實表 | 累積快照事實表 | |
---|---|---|---|
時期/時間 | 離散事務時間點 | 以有規律的、可預測的間隔產生快照 | 用於時間跨度不確定的不斷變化的工作流 |
日期維度 | 事務日期 | 快照日期 | 相關業務過程涉及的多個日期 |
業務過程數 | 一個或多個 | 多個 | 多個 |
粒度 | 每行代表實體的一個事務 | 每行代表某時間週期的一個實體 | 每行代表一個實體的生命週期 |
事實 | 事務事實 | 累積事實 | 相關業務過程事實和時間間隔事實 |
事實表加載 | 插入 | 插入 | 插入與更新 |
事實表更新 | 不更新 | 不更新 | 業務過程變更時更新 |
事實表設計原則
- 儘可能包含所有與業務過程相關的事實
- 只選擇與業務過程相關的事實
- 分解不可加性事實爲可加的組件
- 在選擇維度和事實之前必須先聲明粒度
- 在同一個事實表中不能有多種不同粒度的事實
- 事實的單位要保持一致
- 對事實的 null 值要處理
- 使用退化維度提高事務表的易用性
事實表設計方法
- 選擇業務過程及確定事實表類型
- 聲明粒度
- 確定維度
- 確定事實
- 冗餘維度
聲明粒度
應該儘量選擇最細級別的原子粒度,以確保事實表的應用具有最大的靈活性。
確定了粒度,也就確定了主鍵。
確定事實
儘可能包含所有與業務過程相關的事實。
冗餘維度
正常建模時對維度的處理應該是單獨存放在一張表中,通過主鍵與事實表進行關聯。其目的是爲了減少事實表的維度冗餘,但有的時候,爲了提高效率,進行適當將高頻的維度信息冗餘,方便下游用戶使用。
事務事實表
設計過程
任何類型的時間都可以被理解爲一種事務。
事務事實表用以跟蹤定義業務過程的個體行爲,提供豐富的分析能力,作爲數據倉庫原子的明細數據。
- 選擇業務過程
- 確定粒度
- 確定維度
- 確定事實
- 冗餘維度
在確定維度的時候,對於無法歸類的維度屬性,可以合併到一個雜項維度進行存放。
在事實表中,除了維度信息外的其他屬性都是事實。事實一般爲整型或浮點型的十進制數值。
事務事實表主鍵爲粒度。
Kimball 維度建模理論認爲,爲了便於進行獨立的分析研究,應該爲每個業務過程建立一個事實表。
Q:每一個業務過程是否只能建一個事實表呢?
A:當然不是,一般我們建設事務事實表時,選用最小粒度作爲粒度,增強其靈活性。除了事務事實表,還有其他兩種類型的事實表。
事務事實表分類
事務事實表還分爲兩種:單事務事實表和多事務事實表。
單事務事實表:針對每一個業務過程設計一個事實表。
多事務事實表:將不同的事實放到同一個事實表中,即同一個事實表包含不同的業務過程。
多事務事實表
多事務事實表使用場景一般爲多個業務過程擁有相同的粒度。
多事務事實表設計時有兩種方法進行事實的處理:
- 不同業務過程的事實使用不同的事實字段進行存放
- 不同業務過程的事實使用同一個事實字段進行存放
當兩個或多個業務過程事實結構比較相似的時候,選用同一個事實字段進行存放。
不同的事實字段
如果不是當前業務過程的度量,則採取零值處理方式。
同一個事實字段
兩種事務事實表如何選擇
單事務事實表 | 多事務事實表 | |
---|---|---|
業務過程 | 一個 | 多個 |
粒度 | 相互間不相關 | 相同粒度 |
維度 | 相互間不相關 | 一致 |
事實 | 只取當前業務過程中的事實 | 保留多個業務過程中的事實,非當前業務過程中的事實需要置零處理 |
冗餘維度 | 多個業務過程,則需要冗餘多次 | 不同的業務過程只需冗餘一次 |
理解程度 | 易於理解,不會混淆 | 難以理解,需要通過標籤來限定 |
計算存儲成本 | 較多,每個業務過程都需要計算存儲一次 | 較少,不同業務過程融合到一起,降低了存儲計算量,但是非當前業務過程的度量存在大量零值。 |
建議:爲了理解性和存儲資源相對不緊張的情況下,儘可能選用單事務事實表,但若滿足粒度和維度的要求情況下,可以考慮多事務事實表。
週期快照事實表
當需要一些 狀態度量 時,比如賬戶餘額、買賣家星級、商品庫存等,則需要聚集於至相關的事務才能進行識別計算;或者聚集事務無法識別,比如溫度等。對於這些狀態度量,事務事實表是無效率的,而這些度量也和度量事務本身一樣是有用的。
特性
事務事實表的粒度能以多種方式表達,但快照事實表的粒度通常以維度形式聲明;事務事實表是稀疏的,但快照事實表是稠密的;事務事實表中的事實是完全可加的,但快照模型將至少包含一個用來展示半可加性質的事實。
用快照採樣狀態
快照事實表以預定的間隔採樣狀態度量。這種間隔聯合一個或多個維度,將被用來定義快照事實表的粒度。
快照粒度
快照事實表的粒度通常總是被多維聲明,可以簡單地理解爲快照需要採樣的週期以及什麼將被採樣。
密度與稀疏性
快照事實表是稠密的,無論當天是否有業務過程發生,都會記錄一行。
半可加性
在快照事實表中收集到的狀態都是半可加的。半可加性事實不能根據時間維度獲得有意義的彙總結果。
快照事實表分類
設計步驟
- 確定粒度
- 確定狀態度量
單維度的每天快照事實表
不同的採樣粒度確定了不同的快照事實表。
混合維度的每天快照事實表
混合維度相對於單維度,只是在每天的採樣週期上針對多個維度進行採樣。
以上兩類快照事實表都有一個特點:都可以從事務事實表中進行彙總產出。除此之外,還有一種產出模式,即直接使用操作型系統的數據作爲週期快照事實表的數據加工,比如淘寶賣家星級。
全量快照事實表
全量快照事實表會增加冗餘維度的操作。
快照事實表與事務事實表往往都是成對設計的,相互補充,一瞞住更多的下游統計分析需求。
累計快照事實表
比如統計賣家下單到支付的時長、買家支付到賣家發貨的時長等。對於類似於研究事件之間事件間隔的需求。
設計過程
- 選擇業務過程
- 確定粒度
- 確定維度
- 確定事實
- 退化維度
業務過程
存在橫跨多個業務過程。
確定粒度
一個完整的流程,累計快照事實表用於考察實體的唯一實例,所以只記錄一行。
確定維度
與事務事實表相同。多個維度進行描述。
確定事實
需要將各業務過程對應的事實均放入事實表中。累計事實表解決掉的最重要的問題是統計不同業務過程之間的時間間隔,建議將每個過程的時間間隔作爲事實放在事實表中。
特點
數據不斷更新
事務事實表記錄事務發生時的狀態,對於實體的某一實例不再更新,而累積快照事實表則對實體的某一實例定期更新。
多業務過程日期
累積快照事實表適用於具有較明確起始時間的段生命週期的實體,比如交易訂單、物流訂單等。
聚集型事實表
又名爲彙總表。聚集主要是通過彙總明細粒度數據來獲得改進查詢性能的效果。
基本原則
一致性。聚集表必須提供與查詢明細粒度數據一致的查詢結果。最簡單方法是確保聚集星型模型中的維度和度量與原始模型中的維度和度量保持一致。
避免單一表設計。不要在同一個表中存儲不同層次的聚集數據。
聚集粒度可不同。聚集並不需要保持與原始米線粒度數據一樣的粒度,聚集只關心鎖需要查詢的維度。
基本步驟
- 確定聚集維度
- 確定一致性上鑽
- 確定聚集事實
聚集補充說明
聚集不能跨越事實的,聚集的維度和度量必須與原始模型保持一致。
聚集會帶來查詢性能的提升,但聚集也會增加 ETL 維護的難度。當子類目對應的以及類目發生變更是,先前存在的、已經被彙總到聚集表中的數據需要被重新調整。
討論
Q:是否所有的業務流程都需要進行統計?
A: 不是,對於有些業務流程特別長的,需要考慮進行精簡,對關鍵節點進行統計就行了。
Q: 彙總表與快照事實表的區別是什麼?
A: 彙總表是基於事實表數據進行彙總,是縱向的,是基於已有的數據進行類似於 SUM 操作。而快照事實表更多是橫向的,跨越多個事務事實表,進行橫向的合併。