深入解析數(shù)倉維度建模中的維度
如果你是剛接觸維度建模,可能對于維度的印象是不變化的或者變化緩慢,且具有相同屬性的集合體,例如日期維。但是在真實的應用場景中維度可能有十幾種之多,例如從維度使用的特點來看可以分為緩慢變化維度、角色維度、微型維度、縮小維度、雜項維度、支架維度等、橋接維度;從維度的處理方式可以分為快照維度表、拉鏈維度表等;從維度的數(shù)據(jù)特點可以分為遞歸層次、多值屬性、多值維度等。這些維度的類型以及方法可以提供相應的工具幫助處理真實的業(yè)務場景中。利用這些維度可以更好地平衡模型設計以及業(yè)務需求,同時具備一定的可拓展性以及可維護性等。
角色維
如果將維度想象成一把直尺,直尺上不同的刻度代表一個維度表上的不同的列。那么在幾何課上將直尺用來測量距離,在閱讀時用直尺用作書簽,夾在書中,這個時候直尺在不同的場景下有著不同的作用,這就是角色維的概念。即相同的維度表在不同的模型中起著不同的作用,一般可以用視圖實現(xiàn)。
微小維
如果直尺很長,但是每次測量都只用到前面的部分,那么就將直尺進行一定程度的裁剪,將用的最多的部分獨立出來,方便使用,這就是微小維的概念,即將維度的子集單獨出來進行使用。與微小維所類似的的是微型維的概念。微型維并不是以子集拆分而是以變化程度進行拆分的,即將維度中變化比較頻繁的維度單獨拆分出來進行管理。因為維度表往往都是寬表,單獨出來的微型維度可以防止維度表的頻繁更新導致鎖,進而影響使用。微小維與微型維示意圖如圖1所示。
圖片
▲圖1 微小維與微型維示意圖
支架維度
支架維度與橋接維度都可以看成維度的一種補充形式,前者是對于維度屬性的額外補充;后者是對于維度表的一種橋接關系,關聯(lián)另外的維度表。支架維度字如其名,是對于維度中屬性信息的一種補充,其主要是維度表中對于另外維度的引用關系。例如商品中有出廠日期屬性,但是日期屬性是屬于日期維度的信息,如圖2所示。
▲圖2 支架維度示意圖
支架維度本質上是不同維度表的關聯(lián),但是在維度建模中維度表之間的關聯(lián)是應該通過事實表進行的。
橋接維度
對于橋接維度可能就更加好理解了,就是兩個維度表之間通過第三張維度表進行關聯(lián),其中存儲另外兩個維度表的關系。如圖9-6所示,維度表A與維度表B之間某個字段的屬性存在多對多關系,基于這種多對多關系設計維度表C,用來存儲這兩個屬性的關系。例如代理商與客戶之間,一個代理商可以代理多個客戶,同時一個客戶也可以隸屬于多個代理商,那么維度表C則就是代理商與客戶的映射關系。當然依然還是按照維度建模的理論,維度之間的關系應該通過事實表去體現(xiàn),如果你清楚這樣做帶來的好處以及壞處,那么依然可以采用這種方式去構建你的維度。橋接維如圖9-5所示。
圖片
▲圖3 橋接維示意圖
這樣通過支架維度、橋接維度我們可以解決維度中出現(xiàn)多值、多屬性的問題。然而對于某些零散的維度,每個維度屬性值都比較少,例如不同渠道的付款的方式:渠道粗略的看只有線上以及線下;付款方式的只有現(xiàn)金、信用卡、網絡支付。將這2個屬性進行笛卡爾組合之后,過濾掉不合理的場景,就完成了簡單的雜項維的構建,如表1所示。
表1 雜項維度
代理鍵 | 渠道 | 付款方式 |
1 | 線上 | 網絡支付 |
2 | 線下 | 現(xiàn)金 |
3 | 線下 | 信用卡 |
此外對于很多維度是有層級結構的,例如省份、城市或者母公司、子公司等。這種層次結構的維度對于應用使用并不友好,故往往采用扁平化的方式進行處理方便應用使用。但是這種處理需要根據(jù)具體的應用特點,例如對于省份城市可能直接進行平鋪展示,而對于某些場景會處理上一級公司或者下一級公司進行展示,如表2所示。
表2 平鋪處理層次維度
代理鍵 | 國家 | 省份 | 城市 | 區(qū) |
1 | 中國 | 江蘇 | 蘇州 | 開發(fā)區(qū) |
2 | 中國 | 上海 | 上海 | 閔行區(qū) |
當然也有利用上下級別引用來進行展示的維度信息,如表3所示。
表3 利用上下級別引用處理的層次維度
代理鍵 | 代理商 | 下一級代理商 | 上一級代理商 |
1 | A | C | B |
2 | B | E | D |
說到這里一些常見的維度處理方式基本上就告一段落了,但是在維度的世界中,維度并不是一成不變的,恰恰相反,很多維度會隨著時間變化而進行緩慢的變化,例如用戶年齡每一年都要變化。同時一些業(yè)務的變化必然也會導致維度發(fā)生變化,例如公司部門或者產品屬性的調整都會導致此類的場景,因為這就引出來維度中非常重要的概念,緩慢變化維度。
那么關于緩慢變化維度在《企業(yè)級數(shù)據(jù)架構》一書中尋找吧。
關于作者:
李楊,資深數(shù)據(jù)架構師,在數(shù)據(jù)相關領域有10年以上工作經驗。頭部保險資管公司科技平臺交易系統(tǒng)團隊開發(fā)組負責人,負責多個應用以及數(shù)據(jù)平臺的建設、優(yōu)化以及遷移工作。曾擔任某數(shù)據(jù)公司技術合伙人,負責多個金融機構的數(shù)據(jù)倉庫或數(shù)據(jù)平臺相關的工作?!镀髽I(yè)級數(shù)據(jù)架構:核心要素、架構模型、數(shù)據(jù)管理與平臺搭建》作者。
本文摘編于《企業(yè)級數(shù)據(jù)架構:核心要素、架構模型、數(shù)據(jù)管理與平臺搭建》(書號:9787111746829),經出版方授權發(fā)布,轉載請標明文章出處。