數(shù)倉建模——維度表詳細(xì)講解

0 評論 13270 瀏覽 73 收藏 10 分鐘

維度表是一種數(shù)據(jù)建模技術(shù),用于存儲與數(shù)據(jù)中心的各個業(yè)務(wù)領(lǐng)域相關(guān)的維度信息,通常于構(gòu)建數(shù)據(jù)倉庫、數(shù)據(jù)集市等決策支持系統(tǒng),以便進(jìn)行多維數(shù)據(jù)分析和報告。本文作者對維度表進(jìn)行了分析講解,一起來看一下吧。

一、維度表是什么

維度表是一種數(shù)據(jù)建模技術(shù),用于存儲與數(shù)據(jù)中心的各個業(yè)務(wù)領(lǐng)域相關(guān)的維度信息。它通常用于構(gòu)建數(shù)據(jù)倉庫、數(shù)據(jù)集市等決策支持系統(tǒng),以便進(jìn)行多維數(shù)據(jù)分析和報告。

在數(shù)據(jù)倉庫中,維度表是與事實表相對應(yīng)的表。維度表是維度建模的基礎(chǔ)和靈魂。事實表緊緊圍繞業(yè)務(wù)過程進(jìn)行設(shè)計,事實表存儲度量數(shù)據(jù),如銷售額、數(shù)量、收入等,而維度表則圍繞業(yè)務(wù)過程所處的環(huán)境進(jìn)行設(shè)計,維度表存儲描述度量數(shù)據(jù)的各個方面的信息,例如時間、地理位置、產(chǎn)品、客戶等。維度表主要包含一個主鍵和各種維度字段,維度字段稱為維度屬性。

二、維度表設(shè)計要點

1. 規(guī)范化與反規(guī)范化

規(guī)范化是指使用一系列范式設(shè)計數(shù)據(jù)庫的過程,其目的是減少數(shù)據(jù)冗余,增強(qiáng)數(shù)據(jù)的一致性。通常情況下,規(guī)范化之后,一張表的字段會拆分到多張表。如果對其進(jìn)行規(guī)范化,得到的維度模型稱為雪花模型,雪花模型,比較靠近3NF,但是無法完全遵守,因為遵循3NF的性能成本太高。

數(shù)倉建?!S度表詳細(xì)講解

反規(guī)范化是指將多張表的數(shù)據(jù)冗余到一張表,其目的是減少join操作,提高查詢性能。

在設(shè)計維度表時,如果對其進(jìn)行反規(guī)范化,得到的模型稱為星型模型。雪花模型與星型模型的區(qū)別主要在于維度表是否進(jìn)行規(guī)范化。

數(shù)倉建模——維度表詳細(xì)講解

數(shù)據(jù)倉庫系統(tǒng)的主要目的是用于數(shù)據(jù)分析和統(tǒng)計,所以是否方便用戶進(jìn)行統(tǒng)計分析決定了模型的優(yōu)劣。采用雪花模型,用戶在統(tǒng)計分析的過程中需要大量的關(guān)聯(lián)操作,使用復(fù)雜度高,同時查詢性能很差,而采用星型模型,則方便、易用且性能好。所以出于易用性和性能的考慮,維度表一般反規(guī)范化的。

2. 維度變化

維度屬性一般來說不是靜態(tài)的,而是會隨時間變化的,數(shù)據(jù)倉庫的一個重要特點就是反映歷史的變化,所以如何保存維度的歷史狀態(tài)是維度設(shè)計的重要工作之一。保存維度數(shù)據(jù)的歷史狀態(tài),通常有以下兩種做法,分別是全量快照表和拉鏈表。

1)全量快照表

離線數(shù)據(jù)倉庫的計算周期通常為每天一次,所以可以每天保存一份全量的維度數(shù)據(jù)。這種方式的優(yōu)點和缺點都很明顯。

優(yōu)點是簡單而有效,開發(fā)和維護(hù)成本低,且方便理解和使用。

缺點是浪費存儲空間,尤其是當(dāng)數(shù)據(jù)的變化比例比較低時。

2)拉鏈表

①什么是拉鏈表

拉鏈表是維護(hù)歷史狀態(tài),以及最新狀態(tài)數(shù)據(jù)的一種表,拉鏈表根據(jù)拉鏈粒度的不同,實際上相當(dāng)于快照,只不過做了優(yōu)化,去除了一部分不變的記錄,通過拉鏈表可以很方便的還原出拉鏈時點的數(shù)據(jù)記錄,拉鏈表,記錄每條信息的生命周期,一旦一條記錄的生命周期結(jié)束,就重新開始一條新的記錄,并把當(dāng)前日期放入生效開始日期。 如果當(dāng)前信息至今有效,在生效結(jié)束日期中填入一個極大值(如9999-1-1 )

數(shù)倉建模——維度表詳細(xì)講解

拉鏈表適合于:數(shù)據(jù)會發(fā)生變化,但是變化頻率并不高的維度(即:緩慢變化維),比如:用戶信息會發(fā)生變化,但是每天變化的比例不高。如果數(shù)據(jù)量有一定規(guī)模,按照每日全量的方式保存效率很低。比如:2億*365天,每天一份用戶信息。(做每日全量效率低),拉鏈表的意義就在于能夠更加高效的保存維度信息的歷史狀態(tài)。

3. 多值維度

如果事實表中一條記錄在某個維度表中有多條記錄與之對應(yīng),稱為多值維度。例如,下單事實表中的一條記錄為一個訂單,一個訂單可能包含多個商品,所會商品維度表中就可能有多條數(shù)據(jù)與之對應(yīng),針對這種情況,通常采用以下兩種方案解決:

第一種:降低事實表的粒度,例如將訂單事實表的粒度由一個訂單降低為一個訂單中的一個商品項。

第二種:在事實表中采用多字段保存多個維度值,每個字段保存一個維度id。這種方案只適用于多值維度個數(shù)固定的情況。建議盡量采用第一種方案解決多值維度問題。

4. 多值屬性

維表中的某個屬性同時有多個值,稱之為“多值屬性”,例如商品維度的平臺屬性和銷售屬性,每個商品均有多個屬性值。

針對這種情況,通常有可以采用以下兩種方案。

第一種:將多值屬性放到一個字段,該字段內(nèi)容為key1:value1,key2:value2的形式,例如一個手機(jī)商品的平臺屬性值為“品牌:華為,系統(tǒng):鴻蒙,CPU:麒麟990”。

第二種:將多值屬性放到多個字段,每個字段對應(yīng)一個屬性。這種方案只適用于多值屬性個數(shù)固定的情況。

三、維度表設(shè)計步驟

1)確定維度(表)

在設(shè)計事實表時,已經(jīng)確定了與每個事實表相關(guān)的維度,理論上每個相關(guān)維度均需對應(yīng)一張維度表。需要注意到,可能存在多個事實表與同一個維度都相關(guān)的情況,這種情況需保證維度的唯一性,即只創(chuàng)建一張維度表。另外,如果某些維度表的維度屬性很少,例如只有一個**名稱,則可不創(chuàng)建該維度表,而把該表的維度屬性直接增加到與之相關(guān)的事實表中,這個操作稱為維度退化。

2)確定主維表和相關(guān)維表

此處的主維表和相關(guān)維表均指業(yè)務(wù)系統(tǒng)中與某維度相關(guān)的表。例如業(yè)務(wù)系統(tǒng)中與商品相關(guān)的表有item_info,sku_info,category,brand_info,category2,seller_info,等,其中sku_info就稱為商品維度的主維表,其余表稱為商品維度的相關(guān)維表。維度表的粒度通常與主維表相同。

3)確定維度屬性

確定維度屬性即確定維度表字段。維度屬性主要來自于業(yè)務(wù)系統(tǒng)中與該維度對應(yīng)的主維表和相關(guān)維表。維度屬性可直接從主維表或相關(guān)維表中選擇,也可通過進(jìn)一步加工得到。

確定維度屬性時,需要遵循以下要求:

①盡可能生成豐富的維度屬性

維度屬性是后續(xù)做分析統(tǒng)計時的查詢約束條件、分組字段的基本來源,是數(shù)據(jù)易用性的關(guān)鍵。維度屬性的豐富程度直接影響到數(shù)據(jù)模型能夠支持的指標(biāo)的豐富程度。

②盡量不使用編碼,而使用明確的文字說明,一般是編碼和文字共存。

③盡量沉淀出通用的維度屬性

有些維度屬性的獲取需要進(jìn)行比較復(fù)雜的邏輯處理,例如需要通過多個字段拼接得到。為避免后續(xù)每次使用時的重復(fù)處理,可將這些維度屬性沉淀到維度表中。

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

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

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

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!