一篇文章搞懂数据仓库:数据仓库规范设计
目錄
一、為什么要進(jìn)行規(guī)范設(shè)計(jì)?
二、設(shè)計(jì)規(guī)范 - 指標(biāo)
三、命名規(guī)范 - 表命名
3.1 常規(guī)表
3.2 中間表
3.3 臨時表
3.4 維度表
四、開發(fā)規(guī)范
五、流程規(guī)范
一、為什么要進(jìn)行規(guī)范設(shè)計(jì)?
無規(guī)矩、不方圓。規(guī)范設(shè)計(jì)是在具體開發(fā)工作之前制定的,過程中不斷進(jìn)行完善。目的在于約束N個人對齊認(rèn)知,按照一個標(biāo)準(zhǔn)或流程進(jìn)行開發(fā),以保證數(shù)據(jù)一致性,流程清晰且穩(wěn)定。
一個良好的規(guī)范設(shè)計(jì),應(yīng)當(dāng)起到以下作用:提高開發(fā)效率,提升質(zhì)量,降低溝通對齊成本,降低運(yùn)維成本等。
下面小編將帶領(lǐng)大家盤一盤數(shù)據(jù)倉庫有哪些規(guī)范,從中挑選幾個重點(diǎn)細(xì)說:
- 設(shè)計(jì)規(guī)范
? ? ? ? ? ? 邏輯架構(gòu)、技術(shù)架構(gòu)、分層設(shè)計(jì)、主題劃分、方法論
- ?命名規(guī)范
? ? ? ? ? ? 各層級命名、任務(wù)命名、表命名、字段命名、指標(biāo)命名等?
- 模型規(guī)范
? ? ? ? ? ? 建模方法、建模工具、血緣關(guān)系、維度退化、一致性維度、元數(shù)據(jù)管理
- 開發(fā)規(guī)范
? ? ? ? ? ? 腳本注釋、字段別名、編碼規(guī)范、腳本格式、數(shù)據(jù)類型、縮寫規(guī)范?
- 流程規(guī)范
? ? ? ? ? ? 需求流程、工程流程、上線流程、調(diào)度流、調(diào)度和表生命周期管理
?
二、設(shè)計(jì)規(guī)范 - 指標(biāo)
- Step1:面向主題域管理
為了提高指標(biāo)管理的效率,你需要按照業(yè)務(wù)線、主題域和業(yè)務(wù)過程三級目錄方式管理指標(biāo)。
- Step2:劃分原子指標(biāo)和派生指標(biāo)
原子指標(biāo) +?原子指標(biāo)? =?派生指標(biāo)
- Step3:進(jìn)行指標(biāo)命名規(guī)范
需要遵循兩個原則:易懂與統(tǒng)一
- 易懂,就是看到指標(biāo)的名稱,就可以基本判斷這個指標(biāo)歸屬于哪個業(yè)務(wù)過程;
- 統(tǒng)一,就是要確保派生指標(biāo)和它繼承的原子指標(biāo)命名是一致的。
對于原子指標(biāo),標(biāo)名稱適合用“動作 + 度量”的命名方式(比如注冊用戶數(shù)、購買用戶數(shù))
對于派生指標(biāo),應(yīng)該嚴(yán)格遵循“時間周期 + 統(tǒng)計(jì)粒度 + 修飾詞 + 原子指標(biāo)”的命名方式。(比如30天內(nèi)黑卡會員購買用戶數(shù))
- Step4:分級管理
指標(biāo)確實(shí)是多,如果一視同仁去管理其實(shí)很難,所以可以按照下面的原則進(jìn)行等級劃分:
- 一級指標(biāo):數(shù)據(jù)中臺直接產(chǎn)出,核心指標(biāo)(提供給公司高層看的)、原子指標(biāo)以及跨部門的派生指標(biāo)。
- 二級指標(biāo):基于中臺提供的原子指標(biāo),業(yè)務(wù)部門創(chuàng)建的派生指標(biāo)。
三、命名規(guī)范 - 表命名
3.1 常規(guī)表
常規(guī)表是我們需要固化的表,是正式使用的表,是目前一段時間內(nèi)需要去維護(hù)去完善的表。
規(guī)范:分層前綴[dwd|dws|ads|bi]_業(yè)務(wù)域_主題域_XXX_更新評率|全量/增量。?
業(yè)務(wù)域、主題域我們都可以用詞根的方式枚舉清楚,不斷完善,粒度也是同樣的,主要的是時間粒度、日、月、年、周等,使用詞根定義好簡稱。
例如:? dwd_xxx_xxx_da
-
di :每日增量
-
da:每日全量
-
mi:每月增量
-
ma:每月全量
3.2 中間表
中間表一般出現(xiàn)在Job中,是Job中臨時存儲的中間數(shù)據(jù)的表,中間表的作用域只限于當(dāng)前Job執(zhí)行過程中,Job一旦執(zhí)行完成,該中間表的使命就完成了,是可以刪除的(按照自己公司的場景自由選擇,以前公司會保留幾天的中間表數(shù)據(jù),用來排查問題)。
規(guī)范:mid_table_name_[0~9|dim]
table_name是我們?nèi)蝿?wù)中目標(biāo)表的名字,通常來說一個任務(wù)只有一個目標(biāo)表。這里加上表名,是為了防止自由發(fā)揮的時候表名沖突,而末尾大家可以選擇自由發(fā)揮,起一些有意義的名字,或者簡單粗暴,使用數(shù)字代替,各有優(yōu)劣吧,謹(jǐn)慎選擇。通常會遇到需要補(bǔ)全維度的表,這里我喜歡使用dim結(jié)尾。中間表在創(chuàng)建時,請加上 ,如果要保留歷史的中間表,可以加上日期或者時間戳
3.3 臨時表
臨時表是臨時測試的表,是臨時使用一次的表,就是暫時保存下數(shù)據(jù)看看,后續(xù)一般不再使用的表,是可以隨時刪除的表。
規(guī)范:tmp_xxx
只要加上tmp開頭即可,其他名字隨意,注意tmp開頭的表不要用來實(shí)際使用,只是測試驗(yàn)證而已。
3.4 維度表
維度表是基于底層數(shù)據(jù),抽象出來的描述類的表。維度表可以自動從底層表抽象出來,也可以手工來維護(hù)。
規(guī)范:dim_xxx
維度表,統(tǒng)一以dim開頭,后面加上,對該指標(biāo)的描述,可以自由發(fā)揮。
四、開發(fā)規(guī)范
| 1 | 表和列的注釋釋是否有缺失,復(fù)雜計(jì)算邏輯是否有注釋釋 |
| 2 | 任務(wù)是否支持多次重跑而輸出不變,不能有insert into語句 |
| 3 | 分區(qū)表是否使用分區(qū)鍵過濾并且有有效裁剪 |
| 4 | 外連接的過逑條件是否使用正確,例如在左連接的where語句存在右表的過濾條件 |
| 5 | 關(guān)聯(lián)小表,是否使用/*+ map join * / hint |
| 6 | 不允許引用別的計(jì)算任務(wù)臨時表 |
| 7 | 原則上不允許存在一個任務(wù)更新多個目標(biāo)表 |
| 8 | 是否存在笞、迪卡爾積 |
| 9 | 禁止在代碼里面使用drop 111ble、creat它111ble、renaiue 111ble、chan零column等ddl語句 |
| 10 | 使用動態(tài)分區(qū)時,有沒有檢查分區(qū)鍵值為NULL的情況 |
| 11 | DQC質(zhì)量監(jiān)控規(guī)則是否配置,嚴(yán)禁棵奔 |
| 12 | 代碼中有沒有進(jìn)行適當(dāng)?shù)囊?guī)避數(shù)據(jù)傾斜語句 |
| 13 | Where條件中is null語句有沒有進(jìn)行空字符串處理 |
五、流程規(guī)范
根據(jù)阿里流程規(guī)范,本文將數(shù)據(jù)倉庫研發(fā)流程抽象為如下幾點(diǎn):
?
數(shù)倉系列傳送門:https://blog.csdn.net/weixin_39032019/category_8871528.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的一篇文章搞懂数据仓库:数据仓库规范设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 感知哈希算法原理与实现
- 下一篇: Andoird自定义ViewGroup实