數(shù)倉(cāng)建?!S度表詳細(xì)講解
維度表是一種數(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的性能成本太高。
反規(guī)范化是指將多張表的數(shù)據(jù)冗余到一張表,其目的是減少join操作,提高查詢性能。
在設(shè)計(jì)維度表時(shí),如果對(duì)其進(jìn)行反規(guī)范化,得到的模型稱為星型模型。雪花模型與星型模型的區(qū)別主要在于維度表是否進(jìn)行規(guī)范化。
數(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ù)據(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ù)。
- 目前還沒(méi)評(píng)論,等你發(fā)揮!