數(shù)倉建模——事實(shí)表干貨教程

1 評論 6858 瀏覽 22 收藏 13 分鐘

事實(shí)在字典里指事情的真實(shí)情形,在維度建模中,通常表示某個業(yè)務(wù)的度量,如商品的數(shù)量、金額等。本文作者針對維度建模事實(shí)表進(jìn)行了分析,一起來看一下吧。

上周在《數(shù)據(jù)倉庫建模超詳細(xì)攻略》一文中,給大家簡單介紹了數(shù)倉建模的常見模型:ER模型和維度建模的一些基本知識,本周我們針對維度建模事實(shí)表進(jìn)行更詳細(xì)的講解。

一、什么是事實(shí)

事實(shí)在字典里指事情的真實(shí)情形,在維度建模中,通常表示某個業(yè)務(wù)的度量。如訂單中商品的數(shù)量、金額等。

1. 事實(shí)類型

此處的事實(shí)類型是指度量值的類型,而非事實(shí)表的類型。事實(shí)(度量值)共分為三類,分別是可加事實(shí),半可加事實(shí)和不可加事實(shí)。

1)可加事實(shí)

可加事實(shí)是指可以按照與事實(shí)表相關(guān)的所有維度進(jìn)行累加,事務(wù)型事實(shí)表中的事實(shí),例如上篇文章講述的訂單事實(shí)表。

2)半可加事實(shí)

半可加事實(shí)是指只能按照與事實(shí)表相關(guān)的一部分維度進(jìn)行累加,例如周期型快照事實(shí)表中的事實(shí)。以上述各倉庫中各商品的庫存每天快照事實(shí)表為例,這張表中的庫存事實(shí)可以按照倉庫或者商品維度進(jìn)行累加,但是不能按照時間維度進(jìn)行累加,因?yàn)閷⒚刻斓膸齑胬奂悠饋硎菦]有任何意義的。

3)不可加事實(shí)

不可加事實(shí)是指完全不具備可加性,例如比率型事實(shí)。不可加事實(shí)通常需要轉(zhuǎn)化為可加事實(shí),例如比率可轉(zhuǎn)化為分子和分母。

二、什么是事實(shí)表

事實(shí)表是指存儲有事實(shí)記錄的表,如用戶登錄記錄表、下單記錄、優(yōu)惠券領(lǐng)取記錄表等,事實(shí)表作為數(shù)據(jù)倉庫維度建模的核心,其緊緊圍繞著業(yè)務(wù)過程來設(shè)計(jì)。一般包含與該業(yè)務(wù)過程有關(guān)的維度引用(維度表外鍵)以及該業(yè)務(wù)過程的度量(通常是可累加的數(shù)字類型字段)。

引用上篇文章我們講過的下單業(yè)務(wù)過程為例,如圖所示:訂單明細(xì)表作為訂單業(yè)務(wù)的事實(shí)表,訂單明細(xì)表中含有買家、賣家、時間、地域、商品、物流等維度,訂單價格作為訂單過程的度量。

事實(shí)表有三種類型:分別是事務(wù)事實(shí)表、周期快照事實(shí)表和累積快照事實(shí)表,每種事實(shí)表都具有不同的特點(diǎn)和適用場景,我們依次介紹一下:

1. 事務(wù)型事實(shí)表

事務(wù)型事實(shí)表用來記錄各業(yè)務(wù)過程,它保存的是各業(yè)務(wù)過程的原子操作事件,即最細(xì)粒度的操作事件。粒度是指事實(shí)表中一行數(shù)據(jù)所表達(dá)的業(yè)務(wù)細(xì)節(jié)程度。事務(wù)型事實(shí)表可用于分析與各業(yè)務(wù)過程相關(guān)的各項(xiàng)統(tǒng)計(jì)指標(biāo),由于其保存了最細(xì)粒度的記錄,可以提供最大限度的靈活性,可以支持無法預(yù)期的各種細(xì)節(jié)層次的統(tǒng)計(jì)需求。

1)事務(wù)型事實(shí)表設(shè)計(jì)流程

設(shè)計(jì)事務(wù)事實(shí)表時一般可遵循以下四個步驟:

選擇業(yè)務(wù)過程→聲明粒度→確認(rèn)維度→確認(rèn)事實(shí)。

①選擇業(yè)務(wù)過程

在業(yè)務(wù)系統(tǒng)中,挑選我們要分析的業(yè)務(wù)過程,業(yè)務(wù)過程可以概括為一個個不可拆分的行為事件,例如電商交易中的下單,取消訂單,付款,退單等,都是業(yè)務(wù)過程。通常情況下,一個業(yè)務(wù)過程對應(yīng)一張事務(wù)型事實(shí)表。

②聲明粒度

業(yè)務(wù)過程確定后,需要為每個業(yè)務(wù)過程聲明粒度。即精確定義每張事務(wù)型事實(shí)表的每行數(shù)據(jù)表示什么,應(yīng)該盡可能選擇最細(xì)粒度,以此來應(yīng)各種細(xì)節(jié)程度的需求。

典型的粒度聲明如下:

訂單事實(shí)表中一行數(shù)據(jù)表示的是一個訂單中的一個商品項(xiàng)。

③確定維度

確定維度具體是指,確定與每張事務(wù)型事實(shí)表相關(guān)的維度有哪些。確定維度時應(yīng)盡量多地選擇與業(yè)務(wù)過程相關(guān)的環(huán)境信息。因?yàn)榫S度的豐富程度就決定了維度模型能夠支持的指標(biāo)豐富程度。

④確定事實(shí)

此處的“事實(shí)”一詞,指的是每個業(yè)務(wù)過程的度量值(通常是可累加的數(shù)字類型的值,例如:次數(shù)、個數(shù)、件數(shù)、金額等)。

經(jīng)過上述四個步驟,事務(wù)型事實(shí)表就基本設(shè)計(jì)完成了。第一步選擇業(yè)務(wù)過程可以確定有哪些事務(wù)型事實(shí)表,第二步可以確定每張事務(wù)型事實(shí)表的每行數(shù)據(jù)是什么,第三步可以確定每張事務(wù)型事實(shí)表的維度外鍵,第四步可以確定每張事務(wù)型事實(shí)表的度量值字段。

(事務(wù)事實(shí)表 示例)

2)事務(wù)型事實(shí)表不足之處

事務(wù)型事實(shí)表可以保存所有業(yè)務(wù)過程的最細(xì)粒度的操作事件,故理論上其可以支撐與各業(yè)務(wù)過程相關(guān)的各種統(tǒng)計(jì)粒度的需求。但對于某些特定類型的需求,其邏輯可能會比較復(fù)雜,或者效率會比較低下。例如:

1)存量型指標(biāo)

對于商品庫存,賬戶余額等指標(biāo),虛擬貨幣業(yè)務(wù)包含的業(yè)務(wù)過程主要包括獲取貨幣和使用貨幣,兩個業(yè)務(wù)過程各自對應(yīng)一張事務(wù)型事實(shí)表,一張存儲所有的獲取貨幣的原子操作事件,另一張存儲所有使用貨幣的原子操作事件。

假定現(xiàn)有一個需求,要求統(tǒng)計(jì)截至當(dāng)日的各用戶虛擬貨幣余額。由于獲取貨幣和使用貨幣均會影響到余額,故需要對兩張事務(wù)型事實(shí)表進(jìn)行聚合,且需要區(qū)分兩者對余額的影響(加或減),另外需要對兩張表的全表數(shù)據(jù)聚合才能得到統(tǒng)計(jì)結(jié)果??梢钥吹?,不論是從邏輯上還是效率上考慮,這都不是一個好的方案。

2)多事務(wù)關(guān)聯(lián)統(tǒng)計(jì)

如現(xiàn)需要統(tǒng)計(jì)最近30天,用戶下單到支付的時間間隔的平均值。統(tǒng)計(jì)思路應(yīng)該是找到下單事務(wù)事實(shí)表和支付事務(wù)事實(shí)表,過濾出最近30天的記錄,然后按照訂單id對兩張事實(shí)表進(jìn)行關(guān)聯(lián),之后用支付時間減去下單時間,然后再求平均值。 邏輯上雖然并不復(fù)雜,但是其效率較低,因?yàn)橄聠问聞?wù)事實(shí)表和支付事務(wù)事實(shí)表均為大表,大表join大表的操作應(yīng)盡量避免。

在上述兩種場景下事務(wù)型事實(shí)表的表現(xiàn)并不理想。下面要介紹的另外兩種類型的事實(shí)表就是為了彌補(bǔ)事務(wù)型事實(shí)表的不足的。

2. 周期型快照事實(shí)表

周期快照事實(shí)表以具有規(guī)律性的、可預(yù)見的時間間隔來記錄事實(shí),主要用于分析一些存量型(例如在線人數(shù),賬戶余額,商品庫存)或者狀態(tài)型(空氣溫度,行駛速度)指標(biāo)。

對于商品庫存、賬戶余額這些存量型指標(biāo),業(yè)務(wù)系統(tǒng)中通常就會計(jì)算并保存最新結(jié)果,所以定期同步一份全量數(shù)據(jù)到數(shù)據(jù)倉庫,構(gòu)建周期型快照事實(shí)表,就能輕松應(yīng)對此類統(tǒng)計(jì)需求,而無需再對事務(wù)型事實(shí)表中大量的歷史記錄進(jìn)行聚合了。

對于空氣溫度、行駛速度這些狀態(tài)型指標(biāo),由于它們的值往往是連續(xù)的,我們無法捕獲其變動的原子事務(wù)操作,所以無法使用事務(wù)型事實(shí)表統(tǒng)計(jì)此類需求。而只能定期對其進(jìn)行采樣,構(gòu)建周期快照事實(shí)表。

1)周期快照事實(shí)表設(shè)計(jì)流程

①確定粒度

周期型快照事實(shí)表的粒度可由采樣周期和維度描述,故確定采樣周期和維度后即可確定粒度。

采樣周期通常選擇每日。

維度可根據(jù)統(tǒng)計(jì)指標(biāo)決定,例如指標(biāo)為統(tǒng)計(jì)每個倉庫中每種商品的庫存,則可確定維度為倉庫和商品。

確定完采樣周期和維度后,即可確定該表粒度為每日-倉庫-商品。

②確認(rèn)事實(shí)

事實(shí)也可根據(jù)統(tǒng)計(jì)指標(biāo)決定,例如指標(biāo)為統(tǒng)計(jì)每個倉庫中每種商品的庫存,則事實(shí)為商品庫存。

(周期快照事實(shí)表 示例)

3. 累積快照事實(shí)表

累計(jì)快照事實(shí)表是基于一個業(yè)務(wù)流程中的多個關(guān)鍵業(yè)務(wù)過程聯(lián)合處理而構(gòu)建的事實(shí)表,如交易流程中的下單、支付、發(fā)貨、確認(rèn)收貨業(yè)務(wù)過程。

累積快照事實(shí)表通常具有多個日期字段,每個日期對應(yīng)業(yè)務(wù)流程中的一個關(guān)鍵業(yè)務(wù)過程(里程碑)。

累積快照事實(shí)表主要用于分析業(yè)務(wù)過程(里程碑)之間的時間間隔等需求。例如前文提到的用戶下單到支付的平均時間間隔,使用累積型快照事實(shí)表進(jìn)行統(tǒng)計(jì),就能避免兩個事務(wù)事實(shí)表的關(guān)聯(lián)操作,從而變得十分簡單高效。

1)累積快照事實(shí)表設(shè)計(jì)流程

累積快照事實(shí)表的設(shè)計(jì)流程同事務(wù)型事實(shí)表類似,也可采用以下四個步驟,下面重點(diǎn)描述與事務(wù)型事實(shí)表的不同之處。

選擇業(yè)務(wù)過程→聲明粒度→確認(rèn)維度→確認(rèn)事實(shí)。

①選擇業(yè)務(wù)過程

選擇一個業(yè)務(wù)流程中需要關(guān)聯(lián)分析的多個關(guān)鍵業(yè)務(wù)過程,多個業(yè)務(wù)過程對應(yīng)一張累積型快照事實(shí)表。

②聲明粒度

精確定義每行數(shù)據(jù)表示的是什么,盡量選擇最小粒度。

③確認(rèn)維度

選擇與各業(yè)務(wù)過程相關(guān)的維度,需要注意的是,各個業(yè)務(wù)過程均需要一個日期維度。

④確認(rèn)事實(shí)

選擇各業(yè)務(wù)過程的度量值。

(累積型事務(wù)事實(shí)表 示例)

本文由 @菜鳥數(shù)據(jù)之旅 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載

題圖來自Unsplash,基于CC0協(xié)議

該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 辛苦了

    來自上海 回復(fù)