按照業(yè)務(wù)實際,數(shù)倉區(qū)分為ODS铸本、DW肮雨、SCD、RPT層箱玷,DIM維度層會貫穿所有層使用怨规,為方便后臺查詢會放到RPT層。
ODS層(表存放在ODS庫):
ODS層存放的是從業(yè)務(wù)源系統(tǒng)同步過來的數(shù)據(jù)锡足,表名增加【ODS_業(yè)務(wù)簡寫_】前綴波丰,表結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)保持與源系統(tǒng)一致。ODS表的分區(qū)策略是表數(shù)據(jù)量小于2萬以下的常用表建成維度表舶得,表數(shù)據(jù)量大于2萬掰烟、或者非常用的表建成分區(qū)表。
DW層(表存放在DW庫):
DW存放的是經(jīng)過初步加工的沐批,標(biāo)準(zhǔn)的纫骑,帶有時間特征的明細數(shù)據(jù),表名為范圍【DW_業(yè)務(wù)簡寫_業(yè)務(wù)名稱_(RT/NRT)】九孩,以后綴RT(實時)和NRT(非實時)作為實時數(shù)據(jù)和非實時數(shù)據(jù)(刷新頻率以日計)的區(qū)分先馆。
DW表的字段必須是規(guī)范的,命名和類型都要參照下面的命名規(guī)范躺彬,不能無腦照搬源表字段煤墙。
DW數(shù)據(jù)的處理原則是去空(對空值補NULL_ID或0值)缤底、標(biāo)準(zhǔn)化(轉(zhuǎn)換非標(biāo)數(shù)據(jù)類型和非標(biāo)準(zhǔn)的表示方法)、預(yù)關(guān)聯(lián)(關(guān)聯(lián)出明細粒度上有用的維度和其他邏輯信息)番捂。
DW表的擴展原則是支持字段(column)上的擴展而不是行(row)上的擴展个唧。意味著設(shè)計DW模型的時候就要確定業(yè)務(wù)的數(shù)據(jù)范圍,在列的設(shè)計上盡量采取最小可用的原則设预,保持模型的簡潔徙歼。
DW表的更新策略常用的有兩種:時間增量更新和主鍵更新。時間增量在非實時數(shù)倉使用得比較多鳖枕,一般采用的是DELETE-->INSERT-->EXCEPTION(ROLLBACK)的方式運行魄梯,保持數(shù)據(jù)執(zhí)行的冪等性。數(shù)據(jù)批量產(chǎn)生批量插入更新宾符,邏輯簡單酿秸,但缺點是可能會涉及到大量未更新數(shù)據(jù)的處理。主鍵更新是檢測到某行數(shù)據(jù)發(fā)生變化之后魏烫,才執(zhí)行的更新行為辣苏,涉及到的更新數(shù)據(jù)量會比較小。優(yōu)點是數(shù)據(jù)更新迅速哄褒,處理量小稀蟋,缺點是必須保持數(shù)據(jù)有唯一性主鍵,而且在有多源更新呐赡、數(shù)據(jù)物理刪除時處理邏輯會變得復(fù)雜退客。
DW表不能直接作為最終報表的查詢表。DW表的建設(shè)目的不是直接為了業(yè)務(wù)主題链嘀,奔著業(yè)務(wù)主體的目標(biāo)去開發(fā)DW表萌狂,結(jié)果是只會開發(fā)出一張自己能用的中間表。
如無必要怀泊,勿增實體(奧卡姆剃刀原則)茫藏。DW表盡量通用,不要為了某些特殊的剔除邏輯又衍生出新的同質(zhì)DW表包个,正確的做法是常用邏輯可以增加剔除標(biāo)識字段刷允,不常用邏輯則直接寫在下游業(yè)務(wù)邏輯中剔除冤留。要考慮在橫向列上擴展碧囊,而不是新增模型粗暴解決。
SCD層(表存放在SCD庫):
SCD表命名規(guī)范為【SCD_業(yè)務(wù)簡寫_業(yè)務(wù)名稱】
SCD緩慢變化維的概念旨在記錄數(shù)據(jù)的變化情況纤怒,我們采取的是拉鏈表的方式存儲糯而。原則上可以針對數(shù)據(jù)的時刻變化進行記錄,但一般只是針對統(tǒng)計周期的最小粒度做記錄泊窘。
SCD常用的用途其實是針對維表的特定字段發(fā)生變化進行記錄熄驼,只是我們?yōu)榱诉_到減少變化數(shù)據(jù)的存儲量像寒,在一些事實數(shù)據(jù)上也使用了這一技術(shù)。
SCD表的字段最好不要出現(xiàn)NULL值瓜贾,否則對比的時候可能會出錯诺祸。
RPT層(表存放在bi庫):
RPT是面向報表層的,包括報表查詢用到的匯總表(某些查詢維度較少時可以用)祭芦、明細表筷笨。RPT表的命名規(guī)范是(RPT_業(yè)務(wù)簡寫_業(yè)務(wù)名稱_(DAY/MON/WEEK/QTR/YEAR),其后綴表示表中數(shù)據(jù)的最小主時間粒度龟劲。