01
事實表基礎
1、事實表特征
事實表作為數倉維度建模的核心,緊緊圍繞着業務過程來設計,通過獲取描述業務過程的度量來表達業務過程,包含了引用的維度和業務過程有關的度量。事實表中一條記錄所表達的業務細節程度被稱為粒度(業務中的細節程度)。通常粒度可以通過兩種方式來表達:一種是維度屬性組合所表示的細節程度,另一種是所表示的具體業務含義。
作為度量業務過程的事實(事實表屬性),一般為整型或浮點型的十進制數值,有可加性、半可加性和不可加性三種類型:
2、有事實的事實表
有事實表分為三種類型 : 事務事實表、周期快照事實表和累積快照事實表。
3、無事實的事實表
無事實的事實表可以用來跟蹤事件的發生。例如,在給定的某一天中發生的學生參加課程的事件,可能沒有可記錄的數字化事實,但該事實行帶有一個包含日期、學生、教師、地點、課程等定義良好的外鍵。利用無事實的事實表可以按各種維度計數上課這個事件。
02事實表設計規則
03
事實表設計方法
Kimball的四步維度建模方法:選擇業務過程、聲明粒度、确定維度、确定事實。
Step 1:選擇業務過程及确定事實表類型。
在明确了業務需求以後,接下來需要進行詳細的需求分析,對業務的整個生命周期進行分析,明确關鍵的業務步驟,從而選擇與需求有關的業務過程。(業務過程通常使用行為動詞表示業務執行的活動)
Step 2:聲明粒度 。
粒度的聲明是事實表建模非常重要的一步,意味着精确定義事實表的每一行所表示的業務含義,粒度傳遞的是與事實表度量有關的細節層次。明确的粒度能确保對事實表中行的意思的理解不會産生混淆,保證所有的事實按照同樣的細節層次記錄。
Step 3 :确定維度 。
完成粒度聲明以後,也就意味着确定了主鍵,對應的維度組合以及相關的維度字段就可以确定了,應該選擇能夠描述清楚業務過程所處的環境的維度信息。
Step 4 : 确定事實 。
事實可以通過回答“過程的度量是什麼”來确定。應該選擇與業務過程有關的所有事實,且事實的粒度要與所聲明的事實表的粒度一緻。事實有可加性、半可加性、非可加性三種類型 , 需要将不可加性事實分解為可加的組件。
Step 5:冗餘維度 。
冗餘維度是在kimball維度建模方法基礎上新增的步驟。主要是因為在大數據的事實表模型設計中,需要考慮更多的是提高下遊用戶的使用效率,降低數據獲取的複雜性,減少關聯的表數量。所以通常事實表中會冗餘方便下遊用戶使用的常用維度,以實現對事實表的過濾查詢、控制聚合層次、排序數據以及定義主從關系等操作。系列 | 漫談數倉第二篇NO.2 數據模型(維度建模)。
04
有事實的事實表
有事實表分為三種類型 : 事務事實表、周期快照事實表和累積快照事實表。
1、事務事實表
單事務事實表,針對于每個業務過程設計一個事實表,方便每個業務過程進行獨立分析研究。
優點:更方便跟蹤業務流程細節數據,針對特殊的業務分析場景比較方便和靈活,數據處理上也更加靈活;
弊端:數倉中需要管理太多的事實表,同時跟蹤業務流轉不夠直觀
多事務事實表,将不同的事實放到同一個事實表中,即同一個事實表包含不同的業務過程。多事務事實表在設計時有兩種方法進行事實的處理:
一是不同業務過程的事實使用不同的事實字段進行存放:
二是不同業務過程的事實使用同一個事實字段進行存放,但增加一個業務過程标簽。
優點:能夠更直觀的跟蹤業務流轉和當前狀态,流程事實集中,方便大部分的通用分析應用場景,由于和業務側的數據模型設計思路一緻,也是目前最常用的事實表設計;
弊端:細節數據跟蹤不到位,特殊場景的分析不夠靈活;
兩種表的設計區别在于對業務流程的拆分思路不同,具體選擇事實表的構建思路,需要根據實際的業務确定,一般建議兩者結合。
父子事實的處理方式,通過分攤父訂單的金額将所有業務過程的度量全部帶進購物網站交易事務事實表中,包括下單數量、商品價格、子訂單折扣、下單分攤比例、父訂單支付金額、父訂單支付郵費、父訂單折扣、子訂單下單金額、子訂單下單有效金額、支付分攤比例、子訂單支付金額等,将父子事實同時冗餘到事務表中。
設計準則
2、周期快照事實表
快照事實表在确定的問隔内對實體的度量進行抽樣,這樣可以很容易地研究實體的度量值,而不需要聚集長期 的事務曆史。
特征
設計實例
單維度的每天快照事實表
确定粒度、确定維度
混合維度的每天快照事實表
确定粒度、确定維度、确定狀态度量
全量快照事實表
相比單維度的快照事實表,多了一些冗餘維度。例如,商品評價表,多了子訂單維度、商品維度、評論者維度。
3、累計快照事實表
對于類似于研究事件之間時間間隔的需求,采用累計快照事實表可以很好地解決。
如在統計買家下單到支付的時長、買家支付到賣家發貨的時長等,事務事實表很難滿足,需要用到累計快照事實表。
特征
特殊處理
物理實現
邏輯模型和物理模型密不可分,針對累積快照事實表模型設計,其有不同的實現方式。第一種:增量存儲 以業務實體的結束時間分區。即每周期僅處理增量部分的數據,針對狀态無變化的數據比較适合 ;第二種:全量快照 狀态有變化,每天的分區存儲昨天的全量數據和當天的增量數據合并的結果,對于數據量在可控範圍内的情況可以采用如下 保存策略: 如果存儲空間和成本可接受,完整存儲,确保能夠追溯到曆史每天數據狀态 存儲空間有限,考慮移動曆史快照數據到冷盤,需要使用的時候可恢複 數據曆史狀态數據無太大價值,可以考慮部分删除,比如近保留每月最後一天的快照數據 ;第三種:拉鍊 針對于全量表的變化形式,數據量大、但緩慢變化、需要跟蹤曆史狀态,和緩慢漸變維類似。Hive 拉鍊表實踐。
設計準則
同事務事實表設計一樣。
05
無事實的事實表
在維度模型中,事實表用事實來度量業務過程,不包含事實或度量的事實表稱為無事實的事實表。雖然沒有明确的事實,但可以用來支持業務過程的度量。常見的無事實的事實表主要有如下兩種:
第一種是事件類的,記錄事件的發生。
如阿裡巴巴數據倉庫中,最常見的是日志類事實表。
第二種是條件、範圍或資格類的,記錄維度與維度多對多之 間的關系。
如客戶和銷售人員的分配情況、産品的促銷範圍等。
06
聚集型事實表
數據倉庫的性能是數據倉庫建設是否成功的重要标準之一。聚集主要是通過彙總明細粒度數據來獲得改進查詢性能的效果。通過訪問聚集數據,可以減少數據庫在響應查詢時必須執行的工作量,能夠快速響應用戶的查詢,同時有利于減少不同用戶訪問明細數據帶來的結果不一緻問題。如阿裡巴巴将使用頻繁的公用數據,通過聚集進行沉澱,比如賣家最近 l 天的交易彙總表、賣家最近 N 天的交易彙總表、賣家自然年交易彙總表等。這類聚集彙總數據,被叫作公共彙總層。[回顧]聚焦數據倉庫研發規範。
相對于明細事實表,聚合事實表通常是在明細事實表的基礎上,按照一定的粒度粗細進行的彙總、聚合操作,它的粒度較明細數據粒度粗,同時伴随着細節信息的丢失;在數倉層次結構中,通常位于dws層,一般作為通用彙總數據存在,也可以是更高粒度的指标數據。
1、基本原則
2、基本步驟
Step 1:确定聚集維度。
Step 2:确定一緻性上鑽。
Step 3:确定聚集事實。
3、常見聚集型事實表
數據倉庫中,按照日期範圍的不同,通常包括以下類别的聚集事實表
公共維度層-通用彙總
應對大部分可預期的、常規的數據需求,通常針對模式相對穩定的分析、BI指标計算、特征提取等場景,封裝部分業務處理、計算邏輯,盡量避免用戶直接使用底層明細數據,該層用到的數據範圍比較廣泛。
日粒度
主要應對模式穩定的分析、BI日報、特征提取場景,同時日粒度也為後續累積計算提供粗粒度的底層,數據範圍一般為上一日的數據 。
周期性累積
主要應對明确的周期性分析、BI周期性報表,數據範圍一般在某周期内的。
曆史累積
顧名思義,曆史以來某一特定數據的累積,通常在用戶畫像、經營分析、特征提取方面場景較多,設計數據範圍比較廣泛,通常是計算耗時較長的一部分,比如某門店累積營業額、某用戶累積利潤貢獻、用戶首次下單時間(非可度量、描述性)。
4、聚集補充說明
聚集是不跨越事實的
聚集是針對原始星形模型進行的彙總,為了獲取和查詢與原始模型一緻的結果,聚集的維度和度量必須與原始模型保持一緻,因 此聚集是不跨越事實的。
聚集帶來的問題
聚集會帶來查詢性能的提升,但聚集也會增加 ETL 維護的難度。當子類目對應的一級類目發生變更時,先前存在的、已經被彙總到聚集表中的數據需要被重新調整。這一額外工作随着業務複雜性的增加,會導緻多數 ETL 人員選擇簡單強力的方法,删除并重新聚集數據。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!