1.事實(shí)表模型設(shè)計(jì)
????事實(shí)表有三種類型 : 事務(wù)事實(shí)表、周期快照事實(shí)表和累積快照事實(shí)表。
????事務(wù)事實(shí)表用來描述業(yè)務(wù)過程,眼蹤空間或時(shí)間上某點(diǎn)的度量事件,保存的是最原子的數(shù)據(jù),也稱為“原子事實(shí)表“;
????周期快照事實(shí)表以具有規(guī)律性的、可預(yù)見的時(shí)間間隔記錄事實(shí) ,時(shí)間間隔如每 天、每月、每年等;
????累積快照事實(shí)表用來表述過程開始和結(jié)束之間的關(guān)鍵步驟事件 ,覆蓋過程的整個(gè)生命周期,通常具有多個(gè)日期字段來記錄關(guān)鍵時(shí)間點(diǎn), 當(dāng)過程隨著生命周期不斷變化時(shí),記錄也會(huì)隨著過程的變化而被修改。

1.1設(shè)計(jì)原則
1:盡可能包含所有與業(yè)務(wù)過程相關(guān)的事實(shí);
2:只選擇與業(yè)務(wù)過程相關(guān)的事實(shí);
3:分解不可加性事實(shí)為可加的組件,比如訂單的優(yōu)惠率,應(yīng)該分解為訂單原價(jià)金額與訂單優(yōu)惠金額兩個(gè)事實(shí)存儲(chǔ)在事實(shí)表中;
4:在選擇維度和事實(shí)之前必須先聲明粒度;
5:在同一個(gè)事實(shí)表中不能有多種不同粒度的事實(shí);
6:事實(shí)的單位要保持一致,比如原訂單金額、 訂單優(yōu)惠金額、訂單運(yùn)費(fèi)金額這三個(gè)事實(shí),應(yīng)該采用一致的計(jì)量單位, 統(tǒng)一為元或分,以方便使用;
7:對事實(shí)的null值要處理,
8: 使用退化維度(存儲(chǔ)到事實(shí)表中的維度列)提高事實(shí)表的易用性;
????在 Kimball 的維度建模中,通常按照星形模型的方式來設(shè)計(jì),對于維度的獲取采用的是通過事實(shí)表的外鍵關(guān)聯(lián)專門的維表的方式,謹(jǐn)慎使用退化維度。而在大數(shù)據(jù)領(lǐng)域的事實(shí)表設(shè)計(jì)中,則大量采用退化維度的方式(事實(shí)寬表),在事實(shí)表中存儲(chǔ)各種類型的常用維度信息。這樣設(shè)計(jì)的目的主要是為了減少下游用戶使用時(shí)關(guān)聯(lián)多個(gè)表的操作,直接通過退化維度實(shí)現(xiàn)對事實(shí)表的過濾查詢、控制聚合層次、排序數(shù)據(jù)以及定義主從關(guān)系等。 通過增加冗余存儲(chǔ)的方式減少計(jì)算開銷,提高使用效率。
1.2設(shè)計(jì)步驟
1.選擇業(yè)務(wù)過程及確定事實(shí)表類型
????例如選擇支付過程,分析每天用戶支付金額情況,可以做周期快照事實(shí)表。
2.聲明粒度
????粒度的聲明是事實(shí)表設(shè)計(jì)中不可忽視的重要一步,粒度用于確定事實(shí)表中一行所表示業(yè)務(wù)的細(xì)節(jié)層次。在設(shè)計(jì)事實(shí)表的過程中,粒度定義得越細(xì)越好,建議從最 低級(jí)別的原子粒度開始,因?yàn)樵恿6忍峁┝俗畲笙薅鹊撵`活性,可以支持無法預(yù)期的各種細(xì)節(jié)層次的用戶需求。
3.確定維度
????比如在淘寶訂單付款事務(wù)事實(shí)表中,粒度為子訂單, 相關(guān)的維度有買家、賣家、商品、收貨人信息 、 業(yè)務(wù)類型、訂單時(shí)間等維度。
4.確定事實(shí)
????事實(shí)可以通過回答“過程的度量是什么”來確定。應(yīng)該選擇與業(yè)務(wù)過程有關(guān)的所有事實(shí),且事實(shí)的粒度要與所聲明的事實(shí)表的粒度一致。
5.冗余維度(關(guān)聯(lián)維度做大寬表)
2.維表設(shè)計(jì)
????維度的設(shè)計(jì)過程就是確定維度屬性的過程,如何生成維度屬性,以及所生成的維度屬性的優(yōu)劣,決定了維度使用的方便性,成為數(shù)據(jù)倉庫 易用性的關(guān)鍵。正如Kimball 所說的,數(shù)據(jù)倉庫的能力直接與維度屬性的質(zhì)量和深度成正比。
2.1設(shè)計(jì)原則
????1.盡可能生成豐富的維度屬性,比如淘寶商品維度有近百個(gè)維度屬性,為下游的數(shù)據(jù)統(tǒng)計(jì)、分析、探查提供了良好的基礎(chǔ)。
????2.盡可能多地給出包括一些富有意義的文字性描述。
????3.區(qū)分?jǐn)?shù)值型屬性和事實(shí),數(shù)值型宇段是作為事實(shí)還是維度屬性,可以參考字段的一般用途。 如果通常用于查詢約束條件或分組統(tǒng)計(jì),則是作為維度屬性;如果通常 用于參與度量的計(jì)算, 則是作為事實(shí)。比如商品價(jià)格,可以用于查詢約束條件或統(tǒng)計(jì)價(jià)格區(qū)間 的商品數(shù)量,此時(shí)是作為維度屬性使用的;也可以用于統(tǒng)計(jì)某類目下商品的平均價(jià)格,此時(shí)是作為事實(shí)使用的。另外, 如果數(shù)值型字段是離散值,則作為維度屬性存在的可能性較大;如果數(shù) 值型宇段是連續(xù)值 ,則作為度量存在的可能性較大,但并不絕對,需要同時(shí)參考宇段的具體用途。
????4.盡量沉淀出通用的維度屬性,需要將盡可能多的通用的維度屬性進(jìn)行沉淀。一方面,可以提高下游使用的方便性,減少復(fù)雜度;另 一方面,可以避免下游使用解析時(shí)由于各自邏輯不同而導(dǎo)致口徑不一致
????5.維度一致性,對于相同含義的字段進(jìn)行整合,統(tǒng)一的命名,字段類型,方便維護(hù)與理解。
2.2設(shè)計(jì)步驟
- 第一步:選擇維度或新建維度。作為維度建模的核心,在企業(yè)級(jí)數(shù)據(jù)倉庫中必須保證維度的唯一性。比如商品維度,只有商品維度信息。
- 第二步:確定主維表。此處的主維表一般是ODS表,直接與業(yè)務(wù)系統(tǒng)同步。以商品維度為例, t_sku 是從業(yè)務(wù)系統(tǒng)同步的商品表,此表即是主維表。
- 第三步:確定相關(guān)維表。數(shù)據(jù)倉庫是業(yè)務(wù)源系統(tǒng)的數(shù)據(jù)整合,不同業(yè)務(wù)系統(tǒng)或者同一業(yè)務(wù)系統(tǒng)中的表之間存在關(guān)聯(lián)性。根據(jù)對業(yè)務(wù)的梳理,確定哪些表和主維表存在關(guān)聯(lián)關(guān)系,并選擇其中的某些表用于生成維度屬性。以商品維度為例,根據(jù)對業(yè)務(wù)邏輯的梳理,可以得到商品與類目、 SPU、 賣家、店鋪等維度存在關(guān)聯(lián)關(guān)系。
-
第四步 :確定維度屬性 。本步驟主要包括兩個(gè)階段,其中第一個(gè)階段是從主維表 中選擇維度屬性或生成新的維度屬性;第二個(gè)階段是從相關(guān)維表中選擇維度屬性或生成新的維度屬性。以淘寶商品維度為例,從主維(t_sku)和類目、 SPU、賣家、店鋪等相關(guān)維表中選擇維度屬性或生成新的維度屬性。
