這個(gè)問(wèn)題,從本質(zhì)上來(lái)講。想討論是數(shù)據(jù)模型設(shè)計(jì)里面的規(guī)范化和反規(guī)范化的問(wèn)題。
從規(guī)范化的角度來(lái)講,數(shù)據(jù)倉(cāng)庫(kù)的設(shè)計(jì)者是希望越規(guī)范越好,因?yàn)檫@樣會(huì)減少數(shù)據(jù)的冗余,而且也便于模型的擴(kuò)展。從反規(guī)范化的角度來(lái)講,數(shù)據(jù)倉(cāng)庫(kù)的使用者是希望使用越方便越好,他們并不太關(guān)系規(guī)范不規(guī)范冗余不冗余,只要用著方便就好。
這種情況在工作中是十分常見(jiàn)的,那么該怎樣來(lái)解決它?下面有兩個(gè)思路:
1. 兩種方式都存。雖然,這樣看起來(lái)會(huì)占用更多的存儲(chǔ)空間,但不失為一種合適的解決方案,因?yàn)閷挶硎峭ㄟ^(guò)別的表拼接而成的,因此寬表的存儲(chǔ)周期是可以短一些。
2. 只存多個(gè)維度表,通過(guò)視圖來(lái)創(chuàng)建寬表。
這種方式適合于寬表的查詢次數(shù)較少的情況。
比如在Hive中,寬表其實(shí)只是為了計(jì)算出來(lái)之后導(dǎo)入Es等系統(tǒng)中供其它系統(tǒng)查詢,那么久沒(méi)必要存儲(chǔ)一份寬表,直接通過(guò)視圖來(lái)封裝就可以。 另外,數(shù)據(jù)倉(cāng)庫(kù)的設(shè)計(jì),往往不能是以計(jì)算出幾張表就結(jié)束了,我們更應(yīng)該提供的是數(shù)據(jù)服務(wù),讓使用方都通過(guò)服務(wù)的方式來(lái)訪問(wèn)我們的數(shù)據(jù),而不是簡(jiǎn)單地將表暴露出去。
當(dāng)我們以數(shù)據(jù)服務(wù)的方式提供數(shù)據(jù)的時(shí)候,不管是易用性還是安全性都更容易得到滿足。