明細(xì)數(shù)據(jù)層(DWD)
基于阿里巴巴方法論最佳實踐,事實表(事實模型,又稱事實邏輯表)作為數(shù)據(jù)倉庫維度建模的核心,緊緊圍繞著業(yè)務(wù)過程進(jìn)行設(shè)計。業(yè)務(wù)過程是通過事實表的度量、引用的維度與業(yè)務(wù)過程有關(guān)屬性的方式獲取。
Dataphin支持兩種類型的事實表:
事務(wù)型事實表:用于描述業(yè)務(wù)過程,跟蹤空間或時間上某點的度量事件,保存的是最原子的數(shù)據(jù),也稱為原子事實表,表名后綴一般為
di
。周期快照型事實表:以具有規(guī)律性的、可預(yù)見的時間間隔(例如每天、每月、每年等)記錄事實,表名后綴一般為
df
。
事實表設(shè)計原則
盡可能包含所有與業(yè)務(wù)過程相關(guān)的事實。
設(shè)計事實表的目的是度量業(yè)務(wù)過程,所以分析哪些事實與業(yè)務(wù)過程有關(guān),是事實表設(shè)計中至關(guān)重要的。在事實表中應(yīng)該盡量包含所有與業(yè)務(wù)過程相關(guān)的事實,即使存在冗余,但是因為事實通常為數(shù)字型,帶來的存儲開銷不會很大。
只選擇與業(yè)務(wù)過程相關(guān)的事實。
在選擇事實時應(yīng)該注意,只選擇與業(yè)務(wù)過程有關(guān)的事實。例如,A公司的訂單交易業(yè)務(wù)流程中,在設(shè)計下單這個業(yè)務(wù)過程的事實表時,不能包含支付金額這個表示支付業(yè)務(wù)過程的事實。
在選擇維度和事實之前,必須先聲明粒度。
粒度(數(shù)據(jù)行數(shù)的最小單位,非統(tǒng)計粒度)的聲明是事實表設(shè)計中不可忽視的重要一步。粒度用于確定事實表中一行所表示業(yè)務(wù)的細(xì)節(jié)層次,決定了維度模型的擴(kuò)展性。在選擇維度和事實之前,必須先聲明粒度,且每個維度和事實必須與所定義的粒度保持一致。在事實表中,通常通過業(yè)務(wù)描述來表述粒度并定義事實表主鍵,但對于聚集性事實表的粒度描述(例如存在下單、支付等多個事務(wù)),可以基于多個字段拼接,形成新的字段作為事實表主鍵,也可以不定義主鍵,這樣一行記錄即最小粒度。
在同一個事實表中,不能包含多種不同粒度的事實。
事實表中所有事實的粒度需要與表聲明的粒度保持一致,在同一個事實表中不能有多種不同粒度的事實。
事實的單位要保持一致。
在同一個事實表中,事實的單位應(yīng)該保持一致。例如,原訂單金額、 訂單優(yōu)惠金額、訂單運費金額這三個事實,應(yīng)該采用一致的計量單位,例如統(tǒng)一為元,以方便使用。
事實表設(shè)計方法
任何類型的事件都可以被理解為一種事務(wù)。例如,交易過程中的創(chuàng)建訂單、買家付款,物流過程中的攬貨、發(fā)貨、簽收,退款過程中的申請退款、申請客服介入等,都可以被理解為一種事務(wù)。事務(wù)型事實表,即針對這些過程構(gòu)建的一類事實表,用以跟蹤定義業(yè)務(wù)過程的個體行為,提供豐富的分析能力,作為數(shù)據(jù)倉庫CDM層的明細(xì)數(shù)據(jù)。
事實表設(shè)計示例
下面以A公司的訂單交易事務(wù)型事實表為例,闡述事務(wù)型事實表的一般設(shè)計過程。
選擇業(yè)務(wù)過程。
按照之前的業(yè)務(wù)流程分析,A公司的交易訂單流程包含四個重要過程:創(chuàng)建訂單、買家付款、賣家發(fā)貨、確認(rèn)收貨,即下單、支付、發(fā)貨和收貨四個業(yè)務(wù)過程。這四個業(yè)務(wù)過程不僅是交易過程中的重要時間節(jié)點,而且也是下游統(tǒng)計分析的重點,因此A公司的交易事務(wù)事實表設(shè)計著重從這四個業(yè)務(wù)過程進(jìn)行展開。
為了便于進(jìn)行獨立的分析研究,我們應(yīng)該為每個業(yè)務(wù)過程建立一個事實表。本教程中,我們選擇交易成功這個業(yè)務(wù)過程,建立事務(wù)型事實表。
確定粒度。
事實表中一條記錄所表達(dá)的業(yè)務(wù)細(xì)節(jié)程度被稱為粒度。通常粒度可以通過兩種方式來表述:一種是維度屬性組合所表示的細(xì)節(jié)程度;一種是所表示的具體業(yè)務(wù)含義(例如商品)。
業(yè)務(wù)過程選定之后,就要針對業(yè)務(wù)過程確定一個粒度,即確定事務(wù)型事實表每一行所表達(dá)的細(xì)節(jié)層次。明確的粒度能確保對事實表中行的意思的理解不會產(chǎn)生混淆,保證所有的事實按照同樣的細(xì)節(jié)層次記錄。如果有字段可以表達(dá)這個粒度,可以定義為事實表的主鍵。
應(yīng)該盡量選擇最細(xì)級別的粒度,以確保事實表的應(yīng)用具有最大的靈活性。對于訂單過程而言,每一種商品結(jié)算后都會產(chǎn)生一個訂單,交易成功這個業(yè)務(wù)過程的粒度可以選擇為訂單。訂單ID如果唯一,可以作為事實表主鍵以描述粒度。
確定維度。
選定好業(yè)務(wù)過程并且確定粒度之后,就可以確定維度信息了,應(yīng)該選擇能夠描述清楚業(yè)務(wù)過程所處的環(huán)境的維度信息。例如,在A公司的交易訂單事務(wù)事實表設(shè)計過程中,粒度為訂單,確定的維度包含:買家、賣家、商品名稱、商品類目、發(fā)貨地區(qū)、收貨地區(qū)、訂單時間等維度。
確定事實。
作為度量業(yè)務(wù)過程的核心,事實通常為整型或浮點型的十進(jìn)制數(shù)值。事實表應(yīng)該包含與業(yè)務(wù)過程描述有關(guān)的所有事實,且事實的粒度要與所確定的事實表的粒度一致。例如,在下單業(yè)務(wù)過程中,需要包含商品ID、商品價格、購買數(shù)量。在支付業(yè)務(wù)過程中,需要包含支付金額、紅包金額、積分金額。在收貨業(yè)務(wù)過程中,需要包含確認(rèn)收貨金額等。
關(guān)聯(lián)維度。
在確定維度時,包含了買賣家維度、商品維度、類目維度、收發(fā)貨維度等。維度建模理論建議在事實表中只保存這些維表的外鍵, 而A公司電商交易事務(wù)事實表在維度建模基礎(chǔ)之上做了進(jìn)一步的優(yōu)化,將買賣家星級、標(biāo)簽、店鋪名稱、商品類型、商品特征、商品屬性、 類目層級等維度都關(guān)聯(lián)到事實表中,提高對事實表進(jìn)行過濾查詢、統(tǒng)計聚合的效率。
明細(xì)數(shù)據(jù)層(DWD)規(guī)范
Dataphin中默認(rèn)的事實表命名規(guī)范為:fct_{業(yè)務(wù)過程縮寫}[_{自定義表命名標(biāo)簽縮寫}] _{di/df,單分區(qū)增量/全量標(biāo)識}
。單分區(qū)增量全量標(biāo)識通常為:i表示增量,f表示全量。例如,fct_ordcrt_trip_di(A電商公司航旅機(jī)票訂單下單事實表,日刷新增量)及fct_asale_itm_df(A電商商品快照事實表,日刷新全量)。