俗話說無規矩不成方圓。我們在搭建數據平台的時候,需要先制定好各種規范,越早越好,並且不斷的監督大家是否按照約定執行。一旦大家自由發揮,想要再次統一或者重構就非常的困難。會浪費很大的人力成本和時間成本,因此在這里總結一下數據倉庫的規范
關於項目
常規來說,數倉的建設是按照數倉分層模型開發的。也有會按照業務線來分層,在各自業務線下重新分層,單獨開發的。我們本次使用的是MySQL hive 數據倉庫進行分層處理,並用kettle配合使用,完成數據的分層存儲。
關於詞根
我忘記是不是叫“詞根”了,先寫着,后面找本書確認下。詞根屬於數倉建設中的規范,屬於元數據管理的范疇。哦,現在都把這個划到數據治理的一部分。正常來說,完整的數倉建設是包含數據治理的,只是現在談到數倉偏向於數據建模,而談到數據治理,更多的是關於數據規范、數據管理。
接着說我們的主角-詞根。
我們學習英語的時候應該有了解過詞根這個東西,它就是最細粒度的最簡單的一個詞語,我們主要用來規范中文和英文的映射關系。我們公司一部分業務是關於貨架的,英文名是:rack,rack就是一個詞根,那我們就在所有的表、字段等用到的地方都叫rack,不要叫成別的什么。這就是詞根的作用,用來統一命名,表達同一個含義。
指標體系中有很多“率”的指標,都可以拆解成XXX+率,率可以叫rate,那我們所有的指標都叫做XXX+rate。詞根可以用來統一表名、字段名、主題域名等等。
表名
表名需要見名知意,通過表名就可以知道它是哪個業務域,干嘛用的,什么粒度的數據。
1.常規表
常規表是我們需要固化的表,是正式使用的表,是目前一段時間內需要去維護去完善的表。
規范:分層前綴[dwd|dws|ads|bi]_業務域_主題域_XXX_粒度。
業務域、主題域我們都可以用詞根的方式枚舉清楚,不斷完善,粒度也是同樣的,主要的是時間粒度、日、月、年、周等,使用詞根定義好簡稱。
2.中間表
中間表一般出現在Job中,是Job中臨時存儲的中間數據的表,中間表的作用域只限於當前Job執行過程中,Job一旦執行完成,該中間表的使命就完成了,是可以刪除的(按照自己公司的場景自由選擇,以前公司會保留幾天的中間表數據,用來排查問題)。
規范:mid_table_name_[0~9|dim]
table_name是我們任務中目標表的名字,通常來說一個任務只有一個目標表。這里加上表名,是為了防止自由發揮的時候表名沖突,而末尾大家可以選擇自由發揮,起一些有意義的名字,或者簡單粗暴,使用數字代替,各有優劣吧,謹慎選擇。通常會遇到需要補全維度的表,這里我喜歡使用dim結尾。中間表在創建時,請加上 ,如果要保留歷史的中間表,可以加上日期或者時間戳
drop table if exists table_name;
create table_name as xxx;
3.臨時表
臨時表是臨時測試的表,是臨時使用一次的表,就是暫時保存下數據看看,后續一般不再使用的表,是可以隨時刪除的表。
規范:tmp_xxx
只要加上tmp開頭即可,其他名字隨意,注意tmp開頭的表不要用來實際使用,只是測試驗證而已。
4.維度表
維度表是基於底層數據,抽象出來的描述類的表。維度表可以自動從底層表抽象出來,也可以手工來維護。
規范:dim_xxx
維度表,統一以dim開頭,后面加上,對該指標的描述,可以自由發揮。
5.手工表
手工表是手工維護的表,手工初始化一次之后,一般不會自動改變,后面變更,也是手工來維護。一般來說,手工的數據粒度是偏細的,所以,暫時我們統一放在dwd層,后面如果有目標值或者其他類型手工數據,再根據實際情況分層。
規范:dwd_業務域_manual_xxx
手工表,增加特殊的主題域,manual,表示手工維護表
6.指標
指標的命名也參考詞根,避免出現同一個指標,10個人有10個命名方法。