顧名思義,緩慢變化維(slowly changing dimension)就是變化相對緩慢(相對與快速變化的事實表來說)的維度。
在維度建模理論中,有8種處理方式,包括基礎的5種以及混合的3種。
再加上大資料時代的2種極限型,共10種,具體如下:
維度屬性值不做更改,保留原始值。
此方式什麼也不做,所以稱之為方式0。
比如商品所屬**商:a商品的**渠道是某**商,隨著時間推移可能轉款到b**商(由b**商來供貨),此種情況如果關注的是原始最初**的**商,則採用方式0。
修改維度屬性為最新值,直接覆蓋,不保留歷史資訊。
在維度表中增加新的一行,新行中採用新的屬性值。此種方式需要借助**鍵,需要為新行分配新的**鍵,將其作為事實表的外來鍵。
採用此方式,一般會在維度行中額外增加3列:行生效時間,行失效時間以及當前行標識(或者不使用當前行標識,由行失效時間來判斷是否是當前行)
此方式及其變種是處理緩慢變化維的主要技術。
比如
維度屬性值變化前:
商品鍵(**鍵)
商品唯一鍵(自然鍵)
品類行生效時間
行失效時間
當前行標識
1spu001
科技2020-01-01
9999-12-31
1維度屬性值變化後:
商品鍵(**鍵)
商品唯一鍵(自然鍵)
品類行生效時間
行失效時間
當前行標識
1spu001
科技2020-01-01
2020-01-3103
spu001
教育2020-02-01
9999-12-31
1在維度表中增加新的一列,原先屬性列存放上一版本的屬性值,當前屬性列存放當前版本的屬性值。
比如
維度屬性值變化前:
商品唯一鍵
品類spu001
科技維度屬性值變化後:
商品唯一鍵
當前品類
原先品類
spu001
教育科技
當某維表是乙個大型維度表,採用方式2時,如果某些維度屬性變化相對較快,會導致該維表變得越來越大,導致儲存壓力和效能壓力。
此時引入微型維度是乙個不錯的選擇,將某些維度屬性從該大型維表中抽離出來,單獨構建微型維度。
比如將使用者最近消費時間、消費頻率、消費金額從使用者維表中剝離出來,並結合業務以區間段形式表現,單獨構建成rfm微型維度,並在相關事實表中增加rfm鍵作為外來鍵
rfm微型維度:
rfm鍵
最近一次消費
消費頻率
消費金額
17天內
>=月均5次
>=10000
230天內
>=月均5次
>=10000
3超過乙個月
>=月均5次
>=10000
47天內
>=月均1次
>=10000
530天內
>=月均1次
>=10000
6超過乙個月
>=月均1次
>=10000……
……日期鍵使用者鍵
rfm鍵
其他外來鍵
事實20200501
00001
1***
10該方式是方式1和方式4的結合,即建立微型維度後,微型維度的主鍵不僅作為事實表的外來鍵,也作為主維度的外來鍵。
在主維度中,此微型維度屬性以方式1處理,即當該屬性發生變化時,直接覆蓋,不保留歷史資訊。
這種情況下的微型維度被稱之為支架。
如方式4中的例子,我們再將rfm鍵新增至主維度(使用者維度表)中作為外來鍵,以方式1進行更新,即為方式5
使用者維度表:
使用者鍵使用者名稱
其他屬性
rfm鍵
00001張三…
1該方式是方式1、2、3的結合,即同時增加維度行和維度列,並以方式1處理新加的維度列(當前屬性)。
此種方式複雜,在少數特定迫切的場景下才會使用。
如商品的品類變化
品類變化前:
商品鍵(**鍵)
商品唯一鍵(自然鍵)
歷史品類
當前品類
行生效時間
行失效時間
當前行標識
1spu001
科技科技
2020-01-01
9999-12-31
1品類變化後:
商品鍵(**鍵)
商品唯一鍵(自然鍵)
歷史品類
當前品類
行生效時間
行失效時間
當前行標識
1spu001
科技教育
2020-01-01
2020-01-31014
spu001
教育教育
2020-02-01
9999-12-31
1品類再度變化後:
商品鍵(**鍵)
商品唯一鍵(自然鍵)
歷史品類
當前品類
行生效時間
行失效時間
當前行標識
1spu001
科技教材
2020-01-01
2020-01-31014
spu001
教育教材
2020-02-01
2020-03-31
0235
spu001
教材教材
2020-04-01
9999-12-31
1在方式2的基礎上,不僅是維度的**鍵作為事實表外來鍵,維度的自然鍵(如果自然鍵會被重新分配,發生變化,應該使用持續性超自然鍵)也同時作為事實表外來鍵。
事實表通過**鍵連線維表獲取歷史維度屬性,通過自然鍵連線維表獲取當前維度屬性。
如以商品維度為例
方式2維度表(包含歷史資訊)
商品鍵(**鍵)
商品唯一鍵(自然鍵)
品類其他屬性
行生效時間
行失效時間
當前行標識
1spu001
科技***
2020-01-01
2020-01-3103
spu001
教育***
2020-02-01
9999-12-31
1相關事實表
日期鍵商品鍵(**鍵)(外來鍵)
商品唯一鍵(自然鍵)(外來鍵)
其他外來鍵
事實20200111
1spu001
***10
20200501
3spu001
***10
方式1維度表(當前資訊)(可以基於方式2維度表建立檢視形式產生,篩選當前行標識=1的記錄即為當前資訊)
商品唯一鍵(自然鍵)
當前品類
其他屬性
spu001
教育***
此種方式比較暴力,每天保留全量維度屬性的快照資料,自然鍵及日期鍵作為事實表的外來鍵。
此方式依託的是當前儲存成本遠低於計算成本,以空間換時間的理念。
如商品快照維度表
日期鍵商品唯一鍵(自然鍵)
品類其他屬性
20200101
spu001
科技***
20200102
spu001
科技***……
……20200201
spu001
教育***……
……20200501
spu001
教材***
此方式是方式2的閹割版,同樣是增加維度行。
但捨棄了**鍵,因為如mapreduce之類的分布式計算引擎,維護全域性唯一的**鍵難度大,成本高。
優點是此方式相比方式8,大大降低了儲存(當然前提是不包含變化頻率很高的維度屬性,如果有,請考慮進行垂直拆分)。
缺點是和事實表連線時會有一些不足。如事實表只能以時間切片的方式和維度表進行連線,如果事實表要多個時間切片同時與維度表關聯,需要一定的技術改造。
商品唯一鍵(自然鍵)
品類行生效時間
行失效時間
spu001
科技2020-01-01
2020-01-31
spu001
教育2020-02-01
9999-12-31
以上就是針對緩慢變化維的10種處理方式了。
隨著資料技術的發展,維度建模方法也不是一成不變的,需要結合當前技術的特點進行靈活轉變。
總之,沒有最牛x的建模方**,只有最適合的。
我碰到的面試官
1 奇葩找踹型 這種型別呢會有一種高高在上的感覺,總喜歡用問題把你擊倒,有時候問題描述的也不是很清晰,在交談的過程中一股無名火總會湧上心頭,總想下去踹他兩腳。2 豪爽奔放型 一般這種人呢會跟你有良好的互動,跟你聊的比較high,聊的過程中會頻頻點頭示意,討論氣氛也是熱烈融洽,但是呢,這樣的人往往都是...
面試官問到TCP IP怎麼回答才過關
眾所周知,關於tcp ip,互網網興起時,就已經跟網際網路人的生活息息相關,那麼作為一名前端開發者來說,對於tcp ip的知識,是否需要深度理解,作者可以毫無疑問的告訴你,有關tcp ip的知識,你真的需要知道並深入了解。對於一位前端開發者來說,更是有必要了解,現在各大名廠,面試必問,那接下來,我們...
面試官,我有問題要問
面對面試主管咄咄逼人的提問,你已經感到緊張萬分,只盼能早點結束,根本無暇去提 什麼問題,要問也只是泛泛地提一些類似醫療 保險 上下班時間的問題,然後就是一 句話 我沒有什麼要問的了。事實上,接受面試者想對面試單位提的問題應該有很多,而在面試時不提則會給有經驗 的面試者留下你太欠缺職業素養的印象,同時...