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