手撕資料倉庫之「命名篇」

導讀:

數倉中為什麼要在資料開發過程中強調遵守數倉開發命名規範呢?

主要原因如下幾點:

a、養成良好的程式設計習慣

b、寫出清楚、易懂、易維護的程式程式碼

c、提高程式碼質量與生產率

d、減少編碼中的不必要的錯誤

1、庫命名規範

庫命名

庫描述

數倉層命名

命名備註

buf

資料緩衝層

buf

buf_開頭

ods

資料操作儲存層

ods

ods_開頭

dwd

資料明細層

dwd

dwd_開頭

dws

資料彙總層

dws

dws_開頭

ads

資料應用層

ads

ads_開頭

dim

統一維度層

dim

dim_開頭

temp

臨時資料處理層

temp

temp_開頭

2、表命名規範

命名全部採用小寫字母和數字構成,只能以字母開頭,並且儘量避免使用數字。

命名應採用能夠準確反映其中文含義的英文單詞或英文單詞縮寫構成,避免出現英文單詞和漢語拼音混用的局面。

命名長度儘量控制在30個字元以內,考慮可讀性、易懂性、規範性;如果超過30個字元,儘量把長單詞轉換成縮略詞。

名稱的各部分之間以“_”(下劃線)拼接。

資料域、主題域命名統一管理

縮略詞請統一參考【字典庫】

【禁止】禁止縮寫英文單詞的首字母的母音

3、離線模型表

3。1、BUF層表命名規範

表名規範:buf_來源型別_[業務|系統]編碼_業務表名_裝載策略_裝載週期表名示例:buf。buf_db_xxx_user_info_i_d規範說明:- 儲存庫名:buf- 來源型別:區分不同來源及系統,含結構化、半結構及非結構化資料。—— 型別說明:DataBase(db)、Http(api)、Rsync Log(web|h5|app)、MQ(topicName)。- 業務編碼:參考業務對應的編碼對照庫,注:一般指業務系統簡稱編碼- 業務表名:與資料來源系統一致,以避免造成其二義性。有分表則去除分表規則,目標新增source_table欄位區分來源表名。- 裝載策略:增量(i)、全量(f)、快照(s)- 裝載週期:根據實際裝載週期確定。實時(rt)、分鐘(mi)、小時(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任務(o)、無週期(n)

3。2、ODS層表命名規範

表名規範:ods_來源型別[業務|系統]_業務表名_裝載策略_裝載週期表名示例:ods。ods_db_logs_gold_logs_i_d規範說明:- 儲存庫名:ods- 來源型別:區分不同來源及系統,含結構化、半結構及非結構化資料。—— 型別分類:DataBase(db)、Http(api)、Rsync Log(rsync)、MQ(topicName)、hive(layerName)。- 專案編碼:參考業務對應的編碼對照庫,注:一般指業務系統簡稱編碼- 業務表名:與資料來源系統一致,以避免造成其二義性。有分表則去除分表規則,目標新增source_table欄位區分來源表名。- 裝載策略:增量(i)、全量(f)、快照(s)、 拉鍊(h)、- 裝載週期:根據實際裝載週期確定。實時(rt)、小時(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任務(o)、無週期(n)

3。3、DWD層表命名規範

表名規範:dwd_一級資料域_二級資料域[_業務過程]_業務描述_裝載策略_裝載週期表名示例:dwd。dwd_log_app_click_info_i_d規範說明:- 儲存庫名:dwd- 一級資料域:使用者域、內容域、日誌域、財務域、互動域、服務域等等- 二級資料域:移動端、Web端、會員、金幣等等,統一定義- 業務過程:曝光、瀏覽、點選、註冊、登入、登出等等,統一定義- 業務描述:描述業務內容- 裝載策略:增量(i)、全量(f)、快照(s)、 拉鍊(h)- 裝載週期:根據實際裝載週期確定。實時(rt)、小時(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任務(o)、無週期(n)

3。4、DWS層表命名規範

表名規範:dws_一級資料域_二級資料域_資料粒度_業務描述_統計週期表名示例:dws。dws_log_mbr_event_info_1d規範說明:- 儲存庫名:dws- 一級資料域:使用者域、內容域、日誌域、財務域、互動域、服務域等等- 二級資料域:流量、渠道、會員、留存、事件等等- 資料粒度:描述業務資料粒度- 業務描述:描述業務內容- 統計週期:統計實際週期範圍,預設情況下,離線計算應該包括最近一天(_1[h|d|w|m|q|y]),最近N天(_n[h|d|w|m|q|y])和歷史截至當天(_t[h|d|w|m|q|y])三個表。小時(h)、天(d)、周(w)、月(m)、季(q)、年(y)。

3。5、ADS層表命名規範

表名規範:ads_應用型別_業務主題_業務描述_統計週期_裝載週期表名示例:ads。ads_rpt_channel_user_1d_d規範說明:- 儲存庫名:ads- 應用型別:固定報表、分析報表、標籤系統、使用者畫像、資料介面- 業務主題:看板、駕駛倉、ROI、渠道分析、漏斗分析、留存分析、活躍分析等等- 業務描述:描述業務內容- 統計週期:統計實際週期範圍,預設情況下,離線計算應該包括最近一天(_1[h|d|w|m|q|y]),最近N天(_n[h|d|w|m|q|y])和歷史截至當天(_t[h|d|w|m|q|y])三個表。小時(h)、天(d)、周(w)、月(m)、季(q)、年(y)。- 裝載週期:根據實際裝載週期確定。實時(rt)、小時(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任務(o)、無週期(n)

3。6、DIM層表命名規範

表名規範:dim_應用型別_業務主題_業務描述_[層級_裝載策略_裝載週期]表名示例:dim。dim_pub_city_lvl、dim_pub_chl_i_h規範說明:- 儲存庫名:dim- 應用型別:公共、自定義- 業務主題:渠道、版本、產品、城市等等- 業務描述:描述業務內容- 層級 :層級(lvl)- 裝載策略:增量(i)、全量(f)、快照(s)、 拉鍊(h)- 裝載週期:根據實際裝載週期確定。實時(rt)、小時(h)、天(d)、周(w)、月(m)、季(q)、年(y)、一次性任務(o)、無週期(n)

3。7、TEMP層表命名規範

表名規範:temp_目標表名_((資料日期[_資料小時])|(開始日期_結束日期))表名示例:temp。temp_dwd_log_app_click_info_i_d_20210311(會話表)、temp。temp_username_test_20210311_20210321 (臨時表)規範說明:- 儲存庫名:temp- 目標表名: 會話表:目標表名 臨時表:業務描述- 資料日期:ETL跑批日期 、ETL資料處理日期- 資料小時:ETL跑批小時 、ETL資料處理小時- 開始日期:臨時表有效開始日期- 結束日期:臨時表有效結束日期

4、欄位命名規範

通用規範

命名全部採用小寫、字母和數字構成,且只能以字母開頭,並且儘量避免使用數字;不允許使用除數字、字母、下劃線之外的特殊字元

命名應採用能夠準確反映其中文含義的英文單詞或英文單詞縮寫構成,避免出現英文單詞和漢語拼音混用的局面,儘量達到見字知意效果。

命名長度儘量控制在30個字元以內,特殊欄位除外

名稱的各部分之間以“_”(下劃線)連線

約定俗成的業務縮略詞,統一參考【字典庫】

實體名稱作為字首

欄位屬性的名稱儘量保留實體的名稱作為字首,比如“channel_id/渠道編號”

【禁止】除ods層,不能使用“id/name/title”的無實體的名稱;無實體含義的自增id除外

實體編號/名稱帶標識/名稱(id/name)為強制規範,如country_id,country_name; 不能以country命名 對於編號做為識別符號的屬性/列,一般統一命名為“××編號”的屬性/列,字尾應是id,如“渠道編號/channel_id”等;另外有些已經習慣了的叫法,比如uid,我們不用user_id,但這種情況不多,如果遇到需要單獨提出來交組內統一批准;

正例:city_id, city_name, country_id, country_name, province_id, province_name, province_short_name, city_level(公共城市維度表)

反例:id,name,country(公共城市維度表)

常用欄位規範

取值只有“是/否”的屬性/列,中文名必須以“是否”開頭,英文名字首應是is_,並且取值為string型別且必須滿足“是(1)/否(0)”;

正例:is_new_device(是否新增裝置)

反例:device_flag, device_type 。。。

日期型別的屬性/列,字尾應是dt,如“註冊日期/reg_dt”等(register簡寫);時間型別字尾應是time,如“事件發生時間/event_time”等;遇到時間戳型別稱為“時間標籤”,用ts字尾,建議儘量不要使用,如有需要提交組內批准

一般的分類中文名用“型別”,英文名用“type”;大類中文名用“類別”,英文名用“categ”(category簡寫);如果遇到特殊的分類情況可以建立單獨的分類關係實體,中文名用“分類”,英文名用“class”

其他

【禁止】禁止使用關鍵字,如desc、from、select、left、join、time等 等,請參考Hive官方保留字。

【禁止】禁止縮寫英文單詞的首字母的母音

【強制】表名、欄位名必須使用小寫字母或數字,必須以字母開頭,禁止使用除數字、字母、下劃線之外的特殊字元,禁止兩個下劃線中間只出現數字。

正例:create_time,create_name

反例:ctime,cname

5、欄位型別

說明:

長度一般不能超過25個字元長度。如無特殊需要,只允許使用以下幾種欄位型別。

型別

釋義

場景舉例

備註

string

字串型別

名字、評論、地址

bigint

整形型別

人數、PV、UV

double

浮點型型別

比率、比例

decimal

高精度浮點型型別

金額

推薦精度(18, 4)

複合型別

map、array

6、分割槽

分割槽分類

分割槽資料型別

分割槽欄位名

格式

示例

示例說明

小時

string

p_hr

HH

01

24小時制

string

p_dt

yyyy-MM-dd

2020-11-02

2020年11月02日

string

p_wk

yyyy-MM-dd

2020-11-02

2020年11月02日,每週的第一天

string

p_mt

yyyy-MM-dd

2020-11-01

2020年11月01日,每月的第一天

季度

string

p_qt

yyyy-MM-dd

2020-10-01

每季的第一天,2020年Q4

半年

string

p_hy

yyyy-MM-dd

2020-07-01

每半年的第一天,2020年上半年

string

p_ys

yyyy-MM-dd

2020-01-01

年的第一天,2020年

型別

string

p_tp

產品

string

p_pd

專案

string

p_pj

總結

數倉命名規範統一降低數倉模型理解成本,避免欄位二議性問題。後續將命名規範平臺化,提升開發效率、Code Review效率等。