數(shù)倉規(guī)范詳解文檔(2)
統(tǒng)一規(guī)范
- 采用蛇形命名法,即采用一個下劃線分隔詞根。
- 優(yōu)先使用詞根中已有關(guān)鍵字(數(shù)倉標準配置中的詞根管理),- - 定期 Review 新增命名的不合理性。
- 禁止采用非標準的縮寫。
- 命名一律采用小寫,只能以字母開頭。
- 命名不宜過長。專有規(guī)范
- 表
- 分層-分域-分詞根-分時間周期
- 正式表,所在層級名稱+數(shù)據(jù)域+表描述+時間周期或加載策略,如增量、快照、拉鏈/小時、日、周、月、季、年
- 中間表,對應正式表+_mid+阿拉伯數(shù)字
- 臨時表,z+創(chuàng)建者姓名檢查+表名
- 視圖
- 參照表命名規(guī)范+_v
- 字段
- 優(yōu)先從詞根中取,多次出現(xiàn)的要增加到詞根庫
- 任務
- 與目標表名相同
- 指標
- 一個原子指標+多個修飾詞(可選)+時間周期
- 原子指標+時間周期(可選)
- 原子指標
業(yè)務修飾詞 + 詞根 - 衍生指標
- 派生指標
代碼設(shè)計規(guī)范
- 腳本是否有備注、復雜計算邏輯是否有注釋釋。
- 任務是否支持多次重跑而輸出不變,不能有 insert into 語句。
- 分區(qū)表是否使用分區(qū)鍵過濾并且有有效裁剪。
- 外連接的過逑條件是否使用正確,例如在左連接的 where 語句存在右表的過濾條件。
- 關(guān)聯(lián)小表,是否使用/*+ map join * /。
- 不允許引用別的計算任務臨時表。
- 原則上不允許存在一個任務更新多個目標表。
- 是否存在笛卡爾積。
- 禁止在代碼里面使用 drop、create、rename 等 DDL 語句。
- 使用動態(tài)分區(qū)時,有沒有檢查分區(qū)鍵值為 NULL 的情況。
- 對于重要的任務 DQC 質(zhì)量監(jiān)控規(guī)則是否配置,嚴禁裸奔。
- 代碼中有沒有進行適當?shù)囊?guī)避數(shù)據(jù)傾斜語句。
指標體系建設(shè)
- 指標層級劃分方式
- 一級分類
- 二級分類
- 三級分類
- 一級分類
- 二級分類
- 按分析主題
- 按業(yè)務過程
- 指標定義
- 原子指標(某一業(yè)務事件行為下的度量,不可再拆分的指標) 例如:訂單金額
- 衍生指標(對原子指標進行四則運算)
- 派生指標(統(tǒng)計周期+統(tǒng)計粒度+業(yè)務限定+原子指標)例如:最近一天+新創(chuàng)建的+訂單個數(shù)(阿里大數(shù)據(jù)之路對于派生指標的定義:派生指標=原子指標+時間周期修飾詞+其它修飾詞。唯一歸屬于某一個原子指標,繼承原子指標的數(shù)據(jù)域)
- 唯一性
- 可擴展
- 易理解
- 所屬分類
- 指標類別
- 名稱
- 描述
- 口徑/算法
- 計量單位
- 適用維度
- ...
- 內(nèi)容
- 原則
- 類別
- 說明:網(wǎng)上對于指標分類說法不統(tǒng)一,大家知道咋回事兒就行了。搜了一下阿里的大數(shù)據(jù)之路,沒有衍生指標的概念。說法一:衍生指標=派生指標。那么用我上邊派生指標的定義即可。說法二:衍生指標是對原子指標進行四則運算得到的。那么衍生指標就是原子指標增加減少幾個修飾詞或者時間周期擴大縮小后得到的。所以感覺衍生指標有點雞肋搞不好就變成原子/派生指標了。
- 指標管理流程
- 指標新增申請
- 初審:明確指標口徑,檢查指標庫是否包含
- 二審:審核指標定義需要的各項元素是否準確完備
- 入指標庫
這里,我把數(shù)倉規(guī)范,一共分為四大類:設(shè)計規(guī)范、流程規(guī)范、質(zhì)量管理規(guī)范、安全規(guī)范。
設(shè)計規(guī)范,又劃分為四部分:數(shù)據(jù)模型設(shè)計、命名規(guī)范、指標體系設(shè)計、詞根庫。
流程規(guī)范,主要是從數(shù)倉管理的角度,對數(shù)倉場景下的各種流程進行約束。核心流程一共提煉出來五類:需求提交、模型設(shè)計、ETL開發(fā)、前端開發(fā)、上線流程。
質(zhì)量管控規(guī)范,之所以單獨列出來,是因為數(shù)據(jù)質(zhì)量,跟模型設(shè)計一樣,對數(shù)倉建設(shè)的成敗關(guān)系極大。試想下,一個數(shù)據(jù)質(zhì)量都無法保證的數(shù)據(jù)倉庫,有誰會用? 數(shù)據(jù)質(zhì)量規(guī)范,主要是從數(shù)據(jù)流動的角度分為三類:源端管控、數(shù)倉管理、應用管控。
安全規(guī)范,隨著國家、社會、企業(yè)對數(shù)據(jù)的越來越重視,另一方面隨著互聯(lián)網(wǎng)的普及使得個人隱私變的越來越難以保證,數(shù)據(jù)泄露時有發(fā)生。數(shù)據(jù)安全對于數(shù)據(jù)倉庫的重要程度急速提升,所以安全規(guī)范被單列了出來。從大的層面上安全規(guī)范分為三類:網(wǎng)絡(luò)安全、賬號安全、數(shù)據(jù)安全。
橫向分層
- 說明
- 分層設(shè)計是數(shù)據(jù)架構(gòu)設(shè)計的產(chǎn)出之一,在模型設(shè)計環(huán)節(jié)做為強制規(guī)范遵守。
- 分層規(guī)范
- 應用層,面向最終應用。
- 主題域劃分,依據(jù)是最終應用。生命周期也與應用同步。
- 匯總數(shù)據(jù)層+主題寬表。
- 數(shù)據(jù)域劃分,依據(jù)參考下邊的縱向分域。
- 對數(shù)據(jù)源做清洗、轉(zhuǎn)換、補全、編碼轉(zhuǎn)換后加載到明細數(shù)據(jù)層。
- 數(shù)據(jù)域劃分,依據(jù)參考下邊的縱向分域。
- 貼源層,原始數(shù)據(jù)不做變化或者僅做最簡單的補全后存入。
- 數(shù)據(jù)域劃分,依據(jù)是數(shù)據(jù)源。
- ODS
- DWD
- DWS
- ADS
- 層次調(diào)用規(guī)范
- 禁止反向調(diào)用
- ODS 只能被 DWD 調(diào)用。
- DWD 可以被 DWS 和 ADS 調(diào)用。
- DWS 只能被 ADS 調(diào)用。
- 數(shù)據(jù)應用可以調(diào)用 DWD、DWS、ADS,但建議優(yōu)先考慮使用匯總度高的數(shù)據(jù)。
- ODS->DWD->DWS>ADS
- ODS->DWD->ADS
- 定義
- 主題域通常是聯(lián)系較為緊密的數(shù)據(jù)主題的集合,方便尋找和使用數(shù)據(jù)。
- 基本原則
- 高內(nèi)聚、低耦合。
- 數(shù)量不能太多。建議不超過十個。
- 必須保持穩(wěn)定。既能涵蓋當 前所有的業(yè)務需求,又能在新業(yè)務進入時無影響地被包含進已有的數(shù)據(jù)域中或擴展新的數(shù)據(jù)域。
- 需要結(jié)合團隊和業(yè)務的實際情況,比如業(yè)務是否穩(wěn)定、團隊成員建模水平等。
- 適度的抽象。太低不好適應變化,太高不易于理解使用。
- 分類
- 面向分析場景,實現(xiàn)較難,對業(yè)務理解、抽象能力等要求高。
- 依據(jù)業(yè)務流程劃分,實現(xiàn)相對容易。
- 數(shù)據(jù)/業(yè)務主題域
- 分析主體域
- 劃分依據(jù)
- 按照業(yè)務或業(yè)務過程劃分:比如一個靠銷售廣告位置的門戶網(wǎng)站主題域可能會有廣告域,客戶域等,而廣告域可能就會有廣告的庫存,銷售分析、內(nèi)部投放分析等主題。
- 根據(jù)需求方劃分:比如需求方為財務部,就可以設(shè)定對應的財務主題域,而財務主題域里面可能就會有員工工資分析,投資回報比分析等主題。
- 按照功能或應用劃分:比如微信中的朋友圈數(shù)據(jù)域、群聊數(shù)據(jù)域等,而朋友圈數(shù)據(jù)域可能就會有用戶動態(tài)信息主題、廣告主題等。
- 按照部門劃分:比如可能會有運營域、技術(shù)域等,運營域中可能會有工資支出分析、活動宣傳效果分析等主題?;驹瓌t
- 高內(nèi)聚和低耦合
- 核心模型與擴展模型分離
- 公共處理邏輯下沉及單一
- 成本與性能平衡
- 數(shù)據(jù)可回滾
- 一致性
縱向分域
命名清晰、可理解附加字段
- 維表:創(chuàng)建時間、更新時間
- 事實表:ETL 日期、更新時間
其它要求
- 表、字段的備注信息,必須言簡意賅,在描述清楚的前提下盡量簡潔。
- 字段類型的約束:比如字符串用 String,數(shù)值用 Int,年月日都用 String 比如 yyyyMMdd 等。
命名規(guī)范
統(tǒng)一規(guī)范
- 采用蛇形命名法,即采用一個下劃線分隔詞根。
- 優(yōu)先使用詞根中已有關(guān)鍵字(數(shù)倉標準配置中的詞根管理),- - 定期 Review 新增命名的不合理性。
- 禁止采用非標準的縮寫。
- 命名一律采用小寫,只能以字母開頭。
- 命名不宜過長。專有規(guī)范
- 表
- 分層-分域-分詞根-分時間周期
- 正式表,所在層級名稱+數(shù)據(jù)域+表描述+時間周期或加載策略,如增量、快照、拉鏈/小時、日、周、月、季、年
- 中間表,對應正式表+_mid+阿拉伯數(shù)字
- 臨時表,z+創(chuàng)建者姓名檢查+表名
- 視圖
- 參照表命名規(guī)范+_v
- 字段
- 優(yōu)先從詞根中取,多次出現(xiàn)的要增加到詞根庫
- 任務
- 與目標表名相同
- 指標
- 一個原子指標+多個修飾詞(可選)+時間周期
- 原子指標+時間周期(可選)
- 原子指標
- 衍生指標
- 派生指標
代碼設(shè)計規(guī)范
- 腳本是否有備注、復雜計算邏輯是否有注釋釋。
- 任務是否支持多次重跑而輸出不變,不能有 insert into 語句。
- 分區(qū)表是否使用分區(qū)鍵過濾并且有有效裁剪。
- 外連接的過逑條件是否使用正確,例如在左連接的 where 語句存在右表的過濾條件。
- 關(guān)聯(lián)小表,是否使用/*+ map join * /。
- 不允許引用別的計算任務臨時表。
- 原則上不允許存在一個任務更新多個目標表。
- 是否存在笛卡爾積。
- 禁止在代碼里面使用 drop、create、rename 等 DDL 語句。
- 使用動態(tài)分區(qū)時,有沒有檢查分區(qū)鍵值為 NULL 的情況。
- 對于重要的任務 DQC 質(zhì)量監(jiān)控規(guī)則是否配置,嚴禁裸奔。
- 代碼中有沒有進行適當?shù)囊?guī)避數(shù)據(jù)傾斜語句。
指標體系建設(shè)
- 指標層級劃分方式
- 一級分類
- 二級分類
- 三級分類
- 一級分類
- 二級分類
- 按分析主題
- 按業(yè)務過程
- 指標定義
- 原子指標(某一業(yè)務事件行為下的度量,不可再拆分的指標) 例如:訂單金額
- 衍生指標(對原子指標進行四則運算)
- 派生指標(統(tǒng)計周期+統(tǒng)計粒度+業(yè)務限定+原子指標)例如:最近一天+新創(chuàng)建的+訂單個數(shù)(阿里大數(shù)據(jù)之路對于派生指標的定義:派生指標=原子指標+時間周期修飾詞+其它修飾詞。唯一歸屬于某一個原子指標,繼承原子指標的數(shù)據(jù)域)
- 唯一性
- 可擴展
- 易理解
- 所屬分類
- 指標類別
- 名稱
- 描述
- 口徑/算法
- 計量單位
- 適用維度
- ...
- 內(nèi)容
- 原則
- 類別
- 說明:網(wǎng)上對于指標分類說法不統(tǒng)一,大家知道咋回事兒就行了。搜了一下阿里的大數(shù)據(jù)之路,沒有衍生指標的概念。說法一:衍生指標=派生指標。那么用我上邊派生指標的定義即可。說法二:衍生指標是對原子指標進行四則運算得到的。那么衍生指標就是原子指標增加減少幾個修飾詞或者時間周期擴大縮小后得到的。所以感覺衍生指標有點雞肋搞不好就變成原子/派生指標了。
- 指標管理流程
- 指標新增申請
- 初審:明確指標口徑,檢查指標庫是否包含
- 二審:審核指標定義需要的各項元素是否準確完備
- 入指標庫
詞根庫
- 定義
- 把可能會多次用到的短語,集中命名,保證全局范圍內(nèi)的命名含義一致性。
- 內(nèi)容
- 所屬分類
- 名稱
- 英文簡稱
- 數(shù)據(jù)類型
- 備注
- 分類
- 普通詞根:描述事物的最小單元體,如:交易-trade。
- 專有詞根:具備約定成俗或行業(yè)專屬的描述體,如:美元-USD。
- 公共字段
流程規(guī)范
公共字段=詞根組合+其它關(guān)鍵詞。
公共字段放入詞根庫不太嚴謹,但字段命名時候可以直接取用,降低了命名不一致的風險,所以工具化不太完善的公司推薦這樣使用。
- 提出需求
- 需求提出人:以文檔的形式提出需求(寫清楚需求內(nèi)容、交付物、期望交付日期),發(fā)給數(shù)倉 Leader。
- 溝通需求
- 數(shù)倉 Leader 將需求分配給相關(guān)人承接,同時協(xié)商好實際交付日期。
- 如果需求提出人的交付日期與數(shù)倉 Leader 的交付日期不一致,雙方需要進一步協(xié)商一致。
- 開發(fā)交付
- 需求承接人,需按照協(xié)商一致的交付日期,按期交付。
模型設(shè)計流程
- 數(shù)據(jù)調(diào)研、業(yè)務調(diào)研、需求調(diào)研
- 數(shù)據(jù)建模
- 確定業(yè)務過程->聲明粒度->確定維度->確定事實
- 業(yè)務建模->邏輯建模->物理建模
- 構(gòu)建總線矩陣
- 構(gòu)建指標體系
- 根據(jù)已有的分層分域,分治、各個擊破。
- 總體思路
- 多種方式結(jié)合使用
- 評審
- 除了模型設(shè)計,還需要拉上必要的開發(fā)、業(yè)務、分析師、產(chǎn)品經(jīng)理、數(shù)倉運維等。
- 上線、迭代、完善
ETL開發(fā)流程
- 需求理解
- 數(shù)據(jù)探查
- 程序開發(fā)
- 流程依賴
- 配置調(diào)度
- 接口規(guī)范
- 代碼部署規(guī)范
上線流程
- 申請
- 上線時間
- 上線功能范圍
- 對其它模塊、上下游依賴的影響
- 上線支持團隊清單
- 上線詳細操作步驟
- 測試報告
- 回滾方案
- 評審
- 代碼 Review
- 上下游影響分析
- 上線
質(zhì)量管控規(guī)范
- 上線支持團隊就緒
- 嚴格按照上線操作步驟執(zhí)行
- 失敗回滾
- 源端變動,必須提前通知數(shù)倉側(cè)。
- 有條件的話,使用工具監(jiān)控源端重點內(nèi)容的變動。
數(shù)倉管理
- 對已有規(guī)范沒有貫徹的給予警告、處罰:建模規(guī)范、開發(fā)規(guī)范、上線規(guī)范
- 使用工具加強數(shù)據(jù)質(zhì)量監(jiān)控,發(fā)現(xiàn)問題及時通知、告警。建立數(shù)據(jù)質(zhì)量解決機制,責任到人。
- 定期復盤
- 重要常見問題入告警規(guī)則
- 源端數(shù)據(jù)質(zhì)量問題,協(xié)調(diào)源端解決
- 存儲模型、ETL開發(fā)、上線流程等引起的問題,需要制定合適的解決方案
應用管控
- 統(tǒng)一指標定義
- 統(tǒng)一指標口徑
- 統(tǒng)一外部數(shù)據(jù)輸出歸口
安全規(guī)范
內(nèi)外網(wǎng)隔離,外網(wǎng)環(huán)境訪問內(nèi)網(wǎng)需要登錄 VPN;
核心數(shù)據(jù)存儲、功能模塊,只開放給特定的少部分人。
賬號安全
每個人分配獨立的賬號,賦予合理的權(quán)限,禁止相互借用。
數(shù)據(jù)庫、大數(shù)據(jù)組件開通多個角色賬號。比如只讀、部分表讀寫、管理員等。當然還可以按實際需求細分。Hive、ODPS 的話也是可以實現(xiàn)單人單號的。
服務器登錄。也是單人單號
公司內(nèi)部應用賬號。單人單號。
數(shù)據(jù)安全
至少做到表級別的權(quán)限控制,實在不行就分庫。
ODS 層不對外開放,只對 ODS-DWD 層相關(guān)部分開發(fā)人員可見。
特別敏感數(shù)據(jù),如用戶年齡、號碼、身份證好、地址等,應該放到專門的數(shù)據(jù)庫里,數(shù)倉主庫只存放用戶 ID 和其它必須字段。例如年齡應該脫敏成年齡區(qū)間或開發(fā)特定的 UDF 轉(zhuǎn)化函數(shù)。
我們分別從設(shè)計規(guī)范、流程規(guī)范、質(zhì)量管控、數(shù)據(jù)安全四個方面,詳細闡述了數(shù)倉規(guī)范。應該已經(jīng)涵蓋了數(shù)倉規(guī)范的方方面面。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。