数仓建模之聚集型事实表设计案例
聚集型事實表概念
數據倉庫的性能是數據倉庫建設是否成功的重要標準之一。
聚集主要是通過匯總明細粒度數據來獲得改進查詢性能的效果。通過訪問聚集數據,可以減少數據庫在響應查詢時必須執行的工作量,能夠快速響應用戶的查詢,同時有利于減少不同用戶訪問明細數據帶來的結果不一致問題。盡管聚集能帶來良好的收益,但需要事先對其進行加載和維護,這將會對給 ETL 帶來更多的挑戰。
淘寶將使用頻繁的公用數據,通過聚集進行沉淀,比如賣家最近l 天的交易匯總表、賣家最近N 天的交易匯總表、賣家自然年交易匯總表等。這類聚集匯總數據,被叫作“公共匯總層”。
聚集的基本原則
一致性
聚集表必須提供與查詢明細粒度數據一致的查詢結果。從設計角度來看,確保一致性,最簡單的方法是確保聚集星形模型中的維度和度量與原始模型中的維度和度量保持一致。
避免單一表設計
不要在同一個表中存儲不同層次的聚集數據;否則將會導致雙重計算或出現更糟糕的事情。在聚集表中有些行存放按天匯總的交易額,有些行存放按月匯總的交易額, 這將會讓使用者產生誤用導致重復計算。為了避免此類問題,通用的做法是在聚集時顯式地加人數據層級列以示區別,但是這樣會加大使用者的使用成本。行之有效的另一種方法是把按天與按月匯總的交易額用兩列存放,但是需要在列名或者列注釋上能分辨出來。
聚集粒度可不同
聚集并不需要保持與原始明細粒度數據一樣的粒度,聚集只關心所需要查詢的維度。訂單涉及的維度有商品、買家、賣家、地域等,比如可以按照商品匯總一天的交易額,可以按照賣家匯總一天的營業額(交易額) , 可以按照商品與地域匯總一月的交易額。
聚集的基本步驟
確定聚集維度
在原始明細模型中會存在多個描述事實的維度,如日期、商品類別、賣家等,這時候需要確定根據什么維度聚集,如果只關心商品的交易額情況,那么就可以根據商品維度聚集數據。
確定一致性上鉆
這時候要關心是按月匯總還是按天匯總,是按照商品匯總還是按照類目匯總,如果按照類目匯總,還需要關心是按照大類匯總還是小類匯總。當然,我們要做的只是了解用戶需要什么,然后按照他們想要的進行聚集。
確定聚集事實
在原始明細模型中可能會有多個事實的度量,比如在交易中有交易額、交易數量等,這時候要明確是按照交易額匯總還是按照成交數量匯總。
淘寶公共匯總層設計
基本原則
除了聚集的基本原則外,淘寶公共匯總層設計還必須遵循以下原則:
數據公用性
匯總的聚集會有第三者使用嗎?基于某個維度的聚集是不是經常用于數據分析中?如果答案是肯定的,那么就有必要把明細數據經過匯總沉淀到聚集表中
不跨數據域
數據域是在較高層次上對數據進行分類聚集的抽象。淘寶以業務過程進行分類,如交易統一劃到交易域下,商品的新增、修改放到商品域下。
區分統計周期
在表的命名上要能說明數據的統計周期,如 _Id 表示最近 1 天, td 表示截至當天, nd 表示最近 N 天
交易匯總表設計
聚集是指針對原始明細粒度的數據進行匯總,下圖為淘寶交易事務事實表
潛在的聚集如下表:
可以看出聚集的組合可能性為各個維度屬性個數的乘積: 2× 2 ×2× 2 × 3 × 5 …
按照商品粒度匯總
確定聚集維度一一商品
確定一致性上鉆一一按商品(商品ID )最近 1 天匯總
確定聚集事實一一下單量、交易額
因此,按商品聚集的星形模型如下:
可以看出聚集的事實都是原始模型中的事實,聚集的維度也是原始模型維度中的商品維度,去掉了其他不關心的維度。
按照賣家粒度匯總
確定聚集維度一一賣家
確定一致性上鉆一一按賣家(賣家ID )最近 7 天和最近30 天匯總
確定聚集事實一一交易額
因此,按賣家聚集的星形模型如下:
前面在“聚集的基本原則”中說過,應該避免將不同層級的數據放在一起,為此我們選擇用兩列存放7 天和30 天的事實,但是需要在列
名和字段注釋上說明清楚。
按照賣家、買家、商品粒度匯總
確定聚集維度一一賣家、買家、商品
確定一致性上鉆一一按賣家(賣家ID ) 、買家(買家ID )、商品(商品ID )最近 1 天匯總
確定聚集事實一一交易額
因此,按賣家、買家、商品聚集的星形模型如下:
可以看出聚集的粒度越細,記錄的條數越多,就會越接近原始明細模型的粒度。
按照二級類目匯總
確定聚集維度一一類目
確定一致性上鉆一一按最近 1 天類目維度的二級維度屬性匯總
確定聚集事實一一交易額
因此,按二級類目聚集的星形模型如下:
與之前的三個聚集表不同的是,這個聚集模型不是根據維度主鍵屬性進行的聚集,而是根據類目的層次維度屬性進行的上鉆聚集。
注意事項
聚集是不跨越事實的
聚集是針對原始星形模型進行的匯總,為了獲取和查詢與原始模型一致的結果,聚集的維度和度量必須與原始模型保持一致,因此聚集是
不跨越事實的。
橫向鉆取是針對多個事實基于一致性維度進行的分析,很多時候采用融合事實表,預先存放橫向鉆取的結果,從而提高查詢性能。因此,融合事實表是一種導出模式而不是聚集。
聚集帶來的問題
聚集會帶來查詢性能的提升,但聚集也會增加 ETL 維護的難度。
當子類目對應的一級類目發生變更時,先前存在的、已經被匯總到聚集表中的數據需要被重新調整。這一額外工作隨著業務復雜性的增加,會導致多數 ETL 人員選擇簡單強力的方法,刪除并重新聚集數據。
作者:Binge
出處:http://www.cnblogs.com/binbingg/
本文版權歸作者和博客園共有,轉載必須給出原文鏈接,并保留此段聲明,否則保留追究法律責任的權利。
總結
以上是生活随笔為你收集整理的数仓建模之聚集型事实表设计案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: alias是什么软件
- 下一篇: 各种通讯连接方式