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

0 評(píng)論 12975 瀏覽 71 收藏 10 分鐘

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

一、維度表是什么

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

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

二、維度表設(shè)計(jì)要點(diǎn)

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

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

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

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

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

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

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

2. 維度變化

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

1)全量快照表

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

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

缺點(diǎn)是浪費(fèi)存儲(chǔ)空間,尤其是當(dāng)數(shù)據(jù)的變化比例比較低時(shí)。

2)拉鏈表

①什么是拉鏈表

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

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

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

3. 多值維度

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

第一種:降低事實(shí)表的粒度,例如將訂單事實(shí)表的粒度由一個(gè)訂單降低為一個(gè)訂單中的一個(gè)商品項(xiàng)。

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

4. 多值屬性

維表中的某個(gè)屬性同時(shí)有多個(gè)值,稱之為“多值屬性”,例如商品維度的平臺(tái)屬性和銷售屬性,每個(gè)商品均有多個(gè)屬性值。

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

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

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

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

1)確定維度(表)

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

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)確定維度屬性

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

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

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

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

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

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

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

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

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

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

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