閱讀903 返回首頁    go 阿裏雲 go 技術社區[雲棲]


MaxCompute大數據實踐,電商數據倉庫的星型模型和傳統星型的區別

作者:王永偉

  在Kimball所著的《數據倉庫工具箱》一書中,對於維度模型設計采用的4步設計方法:1.選擇業務過程 2.聲明粒度 3.確定維度 4.確定事實。

在當前的互聯網大數據環境下,麵對複雜的業務場景,為了更有效準確地進行維度模型建設,基於Kimball的4步維度建模方法,我們進行了更進一步的改進。

  • 第一步:選擇業務過程及確定事實表類型

    在明確了業務需求以後,接下來需要進行詳細的需求分析,對業務的整個生命周期進行分析,明確關鍵的業務步驟,從而選擇與需求有關的業務過程。

    以淘寶的正向訂單流轉為例:

    fact_1_1 

    業務過程通常用行為動詞表示,表示業務執行的活動。比如圖中的淘寶訂單流轉的業務過程有四個:創建訂單、買家付款、賣家發貨、買家確認收貨。在明確了流程所包含的業務過程後,需要根據具體的業務需求來選擇與維度建模有關的業務過程。比如選擇買家付款這個業務過程;還是選擇創建訂單和買家付款這兩個業務過程,具體根據業務情況來確定。

    在選擇了業務過程以後,相應的事實表類型也隨之確定了。比如選擇買家付款單個業務過程,那麼事實表應為隻包含買家付款這一個業務過程的單事務型事實表;如果選擇的是所有這四個業務過程,並且需要分析各個業務過程之間的時間間隔,那麼所建的事實表應為包含了所有四個業務過程的累積快照型事實表。

  • 第二步:聲明粒度

    粒度的聲明是事實表建模非常重要的一步,意味著精確定義事實表的每一行表示什麼業務含義,粒度傳遞的是與事實表度量有關的細節層次。明確的粒度能確保對事實表中行的意思的理解不會產生混淆,保證所有的事實按照同樣的細節層次記錄。

    應該盡量選取最細級別的原子粒度,以確保事實表的應用具有最大的靈活性。同時對於訂單過程而言,粒度可以被定義為最細的訂單級別。比如淘寶訂單中有父子訂單的概念,既一條子訂單對應一類商品,如果拍下了多種商品,則每種商品對應一條子訂單;這些子訂單一同結算的話,則會生成一條父訂單。那麼在這個例子中,事實表的粒度應該選擇為子訂單級別。

  • 第三步:確定維度

    完成粒度聲明以後,也就意味著確定了主鍵,對應的維度組合以及相關的維度字段就可以確定了,應該選擇能夠描述清楚業務過程所處的環境的維度信息。比如淘寶的訂單付款事務事實表中,粒度為子訂單,相關的維度信息有買家維度、賣家維度、商品維度、收貨人信息、業務類型、訂單時間等。

  • 第四步:確定事實

    事實可以通過回答“過程的度量是什麼”來確定。應該選擇與業務過程有關所有事實,且事實的粒度要與所聲明的事實表粒度一致。事實有可加性、半可加性、非可加性事實,需要將不可加事實分解為可加的組件。

    在淘寶的訂單付款事務事實表中,同粒度的事實有子訂單分攤的支付金額、郵費、優惠金額等。

  • 第五步:冗餘維度

    在傳統的維度建模星型模型中,對於維度的處理是需要單獨存放在專門的維度表中,通過事實表中外鍵的方式獲取維度。這樣做的目的是為了減少事實表的維度冗餘,從而減少存儲消耗。而在大數據的事實表模型設計中,更多的考慮是提高下遊用戶的使用效率,降低數據獲取的複雜性,減少關聯的表數量。所以通常的事實表中會冗餘方便下遊用戶使用的常用維度,以實現對事實表的過濾查詢、控製聚合層次、排序數據以及定義主從關係等操作。

    比如在淘寶訂單付款事務事實表中,通常會冗餘大量的常用維度字段,以及商品的類目、賣家店鋪等維度信息。


  更多數倉理論請關注:《:阿裏巴巴實踐 


最後更新:2017-06-26 17:32:31

  上一篇:go  PgSQL · 最佳實踐 · 雲上的數據遷移
  下一篇:go  直通車內測“定時上架”功能,商家可以提前鎖定爆款了!