數(shù)倉總結(jié)目錄:
說說數(shù)倉(1) - 什么是數(shù)倉
說說數(shù)倉(2) - 傳統(tǒng)數(shù)倉與互聯(lián)網(wǎng)數(shù)倉
說說數(shù)倉(3) - 數(shù)倉架構(gòu)
說說數(shù)倉(4) - 指標(biāo)字典
說說數(shù)倉(5)-最重要的維度之日期維度
說說數(shù)倉(6)-關(guān)于命名規(guī)范
說說數(shù)倉(7)-淺談數(shù)據(jù)治理
說說數(shù)倉(8)-關(guān)于增量
說說數(shù)倉(9)-上下游約定
說說數(shù)倉(10)-任務(wù)注釋
話說,沒有規(guī)矩不成方圓。在搭建數(shù)據(jù)平臺(tái)的時(shí)候,在數(shù)據(jù)組內(nèi)部,一定要先制定好各種規(guī)范,越早越好,并且不斷的監(jiān)督大家是否按照約定執(zhí)行。一旦讓大家自由發(fā)揮,后期想要統(tǒng)一或者重構(gòu),會(huì)浪費(fèi)很大的人力成本和時(shí)間成本,記住,這都是坑。
這里以我目前公司的一些經(jīng)驗(yàn),分享下。
關(guān)于項(xiàng)目
常規(guī)來說,數(shù)倉的建設(shè)是按照數(shù)倉分層模型開發(fā)的。也有會(huì)按照業(yè)務(wù)線來分層,在各自業(yè)務(wù)線下重新分層,單獨(dú)開發(fā)的。
我這里使用的是阿里云的MaxCompute,這是阿里提供的數(shù)據(jù)平臺(tái),一整套開發(fā)環(huán)境,用起來還是很方便的,省去了自建平臺(tái)的麻煩。MaxCompute里面有一個(gè)項(xiàng)目的概念,一開始本來打算直接根據(jù)分層模型的設(shè)計(jì)來創(chuàng)建項(xiàng)目,但是由于某種原因,改成了按照業(yè)務(wù)線來創(chuàng)建項(xiàng)目。對(duì)于這個(gè)項(xiàng)目名,一定要想好,不管根據(jù)什么來設(shè)計(jì),都需要想清楚,想明白,定了以后就不要再改了,也沒法改。
關(guān)于詞根
我忘記是不是叫“詞根”了,先寫著,后面找本書確認(rèn)下。詞根屬于數(shù)倉建設(shè)中的規(guī)范,屬于元數(shù)據(jù)管理的范疇。哦,現(xiàn)在都把這個(gè)劃到數(shù)據(jù)治理的一部分。
正常來說,完整的數(shù)倉建設(shè)是包含數(shù)據(jù)治理的,只是現(xiàn)在談到數(shù)倉偏向于數(shù)據(jù)建模,而談到數(shù)據(jù)治理,更多的是關(guān)于數(shù)據(jù)規(guī)范、數(shù)據(jù)管理。
接著說我們的主角-詞根。
我們學(xué)習(xí)英語的時(shí)候應(yīng)該有了解過詞根這個(gè)東西,它就是最細(xì)粒度的最簡(jiǎn)單的一個(gè)詞語,我們主要用來規(guī)范中文和英文的映射關(guān)系。我們公司一部分業(yè)務(wù)是關(guān)于貨架的,英文名是:rack,rack就是一個(gè)詞根,那我們就在所有的表、字段等用到的地方都叫rack,不要叫成別的什么。這就是詞根的作用,用來統(tǒng)一命名,表達(dá)同一個(gè)含義。
指標(biāo)體系中有很多“率”的指標(biāo),都可以拆解成XXX+率,率可以叫rate,那我們所有的指標(biāo)都叫做XXX+rate。
詞根可以用來統(tǒng)一表名、字段名、主題域名等等。
表名
表名需要見名知意,通過表名就可以知道它是哪個(gè)業(yè)務(wù)域,干嘛用的,什么粒度的數(shù)據(jù)。
常規(guī)表
常規(guī)表是我們需要固化的表,是正式使用的表,是目前一段時(shí)間內(nèi)需要去維護(hù)去完善的表。
規(guī)范:分層前綴[dwd|dws|ads|bi]_業(yè)務(wù)域_主題域_XXX_粒度
業(yè)務(wù)域、主題域我們都可以用詞根的方式枚舉清楚,不斷完善,粒度也是同樣的,主要的是時(shí)間粒度、日、月、年、周等,使用詞根定義好簡(jiǎn)稱。中間表
中間表一般出現(xiàn)在Job中,是Job中臨時(shí)存儲(chǔ)的中間數(shù)據(jù)的表,中間表的作用域只限于當(dāng)前Job執(zhí)行過程中,Job一旦執(zhí)行完成,該中間表的使命就完成了,是可以刪除的(按照自己公司的場(chǎng)景自由選擇,以前公司會(huì)保留幾天的中間表數(shù)據(jù),用來排查問題)。
規(guī)范:mid_table_name_[0~9|dim]
table_name是我們?nèi)蝿?wù)中目標(biāo)表的名字,通常來說一個(gè)任務(wù)只有一個(gè)目標(biāo)表。
這里加上表名,是為了防止自由發(fā)揮的時(shí)候表名沖突,而末尾大家可以選擇自由發(fā)揮,起一些有意義的名字,或者簡(jiǎn)單粗暴,使用數(shù)字代替,各有優(yōu)劣吧,謹(jǐn)慎選擇。
通常會(huì)遇到需要補(bǔ)全維度的表,這里我喜歡使用dim結(jié)尾。
中間表在創(chuàng)建時(shí),請(qǐng)加上 ,如果要保留歷史的中間表,可以加上日期或者時(shí)間戳
drop table if exists table_name;
create table_name as xxx;
臨時(shí)表
臨時(shí)表是臨時(shí)測(cè)試的表,是臨時(shí)使用一次的表,就是暫時(shí)保存下數(shù)據(jù)看看,后續(xù)一般不再使用的表,是可以隨時(shí)刪除的表。
規(guī)范:tmp_xxx
只要加上tmp開頭即可,其他名字隨意,
注意tmp開頭的表不要用來實(shí)際使用,只是測(cè)試驗(yàn)證而已。維度表
維度表是基于底層數(shù)據(jù),抽象出來的描述類的表。維度表可以自動(dòng)從底層表抽象出來,也可以手工來維護(hù)。
規(guī)范:dim_xxx
維度表,統(tǒng)一以dim開頭,后面加上,對(duì)該指標(biāo)的描述,可以自由發(fā)揮。手工表
手工表是手工維護(hù)的表,手工初始化一次之后,一般不會(huì)自動(dòng)改變,后面變更,也是手工來維護(hù)。
一般來說,手工的數(shù)據(jù)粒度是偏細(xì)的,所以,暫時(shí)我們統(tǒng)一放在dwd層,后面如果有目標(biāo)值或者其他類型手工數(shù)據(jù),再根據(jù)實(shí)際情況分層。
規(guī)范:dwd_業(yè)務(wù)域_manual_xxx
手工表,增加特殊的主題域,manual,表示手工維護(hù)表
指標(biāo)
指標(biāo)的命名也參考詞根,避免出現(xiàn)同一個(gè)指標(biāo),10個(gè)人有10個(gè)命名方法。
后記
具體操作結(jié)合公司實(shí)際情況,規(guī)范及早制定。
附
附上之前我們?cè)侔⒗顳ataWorks上的一個(gè)規(guī)范示例