數(shù)據(jù)治理實踐 | 數(shù)據(jù)表合規(guī)治理
我猜各位數(shù)倉同學可能會經(jīng)常收到下游抱怨,例如:數(shù)據(jù)表難用、想要的指標都不知道存放在哪個數(shù)據(jù)表、數(shù)據(jù)表命名缺少規(guī)范不易讀等,由于設計數(shù)據(jù)表是一個“經(jīng)驗活”(包括業(yè)務了解、設計中的經(jīng)驗沉淀等),因此對于數(shù)倉同學來說有時候想做好一個完美的數(shù)據(jù)表其實頗有挑戰(zhàn),也從另外角度證實線上數(shù)據(jù)表大多數(shù)來說都不夠合規(guī),需要持續(xù)治理。
本期語興從數(shù)據(jù)表治理角度出發(fā),探討數(shù)據(jù)表合規(guī)治理的最佳實踐及相關挑戰(zhàn)。
0 1 數(shù)據(jù)表合規(guī)治理的背景
隨著業(yè)務的快速迭代,同時數(shù)倉也在擴張期高速支持,產生的數(shù)據(jù)量越來越大,劃分的數(shù)據(jù)域也愈來越多,但很多數(shù)倉在初步搭建時都沒有確定好數(shù)據(jù)標準、模型設計規(guī)范、沒有一套完整數(shù)據(jù)的生命周期管理體系、同時組內成員技術/業(yè)務水平質量參差不齊導致,從而導致煙囪數(shù)據(jù)表大量產生,無規(guī)范/無元數(shù)據(jù)維護的數(shù)據(jù)表讓人無法看懂,數(shù)據(jù)表很難發(fā)揮出數(shù)據(jù)的價值(這里特指復用性),為了快速支持業(yè)務導致分層混亂(這里不代表非要做完數(shù)據(jù)表再去支持業(yè)務、而是在支持業(yè)務后能否沉淀資產)。
從語興自身去說,當前所在的業(yè)務線數(shù)據(jù)表也混亂,有時候想查一個指標甚至發(fā)現(xiàn)線上有5個以上數(shù)據(jù)表出現(xiàn)重復加工(存在之前指標中心未建設導致情況),歷史字段名/表命名起的也很隨意沒有規(guī)范,線上數(shù)據(jù)鏈路較長錯綜復雜依賴導致產出數(shù)據(jù)也晚,同時有23%的ODS穿透率(ODS穿透率:代表ODS跨層引用率,常見為ODS層到ADS層引用,口徑為:被跨層依賴的ODS表數(shù)量/ODS層表數(shù)量)。
0 2 數(shù)據(jù)表合規(guī)治理前的思考
由于數(shù)據(jù)表之間相互依賴過多、鏈路過長且繁雜,因此直接上手可能會造成線上事故,需要與團隊多次頭腦風暴后對當前治理優(yōu)先級進行排期,語興這邊為大家提供一個思路,可以先從簡單的數(shù)據(jù)標準重制定->無用/臨時數(shù)據(jù)表下線->應用指標公共下沉復用->解決ODS穿透問題->煙囪數(shù)據(jù)表重構及下線->元數(shù)據(jù)非合規(guī)數(shù)據(jù)表(包括元數(shù)據(jù)字段信息)修改。
同時在初期我們需要完成各類元數(shù)據(jù)接入,搭建治理看板,開發(fā)團隊治理產出統(tǒng)計數(shù)據(jù)表,保障治理進度以及人力資源協(xié)調。
這里我們可以借助網(wǎng)易的easy data和數(shù)據(jù)治理360平臺完成模型質量的評估幫助大家更快找到治理方向。

(網(wǎng)易easy data-模型設計中心Demo圖)

(網(wǎng)易easy data-數(shù)據(jù)治理360 Demo圖)
0 3 數(shù)據(jù)表合規(guī)治理的過程
1.數(shù)據(jù)標準重制定
對當前數(shù)據(jù)域/主題域按照業(yè)務流程及應用重新劃分,重新制定元數(shù)據(jù)規(guī)范(表名、字段命名、字段數(shù)據(jù)格式等)用于新數(shù)據(jù)表建設中規(guī)范內容。
(1)數(shù)據(jù)域與主題域區(qū)別及如何劃分
主題域:從業(yè)務視角自上而下分析,從整體業(yè)務環(huán)節(jié)中升華出來大的專項分析模塊,結合對接的業(yè)務范圍和行業(yè)形態(tài)從更高的視角去洞察整個業(yè)務流程;
數(shù)據(jù)域:從數(shù)據(jù)視角自下而上搭建,對每個業(yè)務環(huán)節(jié)進行切割劃分,形成不同環(huán)節(jié)的數(shù)據(jù)集,組裝為完整的業(yè)務流程;
可能大家看到這還是有點懵,那在這里舉個例子:假如現(xiàn)在的業(yè)務是金融產品(例如貸款、賒購等),按照金融產品業(yè)務生命周期拆解,可以分為貸前(準入、授信等)、貸中(支用、還款等)、貸后(催回等),那這里貸前中的環(huán)節(jié)內容就是數(shù)據(jù)域,假如我們想從更高角度(風控、營銷活動分析)去看整個業(yè)務流程并從中得到一些專題分析內容,那這里升華的部分就叫主題域。
(2)元數(shù)據(jù)規(guī)范(具體內容在附錄)
除了已知的詞根/命名等內容,還需要保證元數(shù)據(jù)的清洗包括數(shù)據(jù)表使用說明、存儲標準、數(shù)據(jù)表負責人注明、字段類型統(tǒng)一等。
2.無用/臨時數(shù)據(jù)表下線
根據(jù)數(shù)據(jù)血緣及任務依賴(這里建議在數(shù)倉側開發(fā)血緣數(shù)據(jù)表,可不到字段血緣,如有條件可將范圍擴大到可視化側)對線上長期無用表、下游無血緣且空跑數(shù)據(jù)表、臨時表進行掃描及下線,降低無用存儲及計算損耗。
元數(shù)據(jù)信息采集:可使用云端數(shù)據(jù)平臺自帶功能如下圖,如使用開源組件同學可使用三方工具Apache Ambari、Apache Atlas、等對Hive元數(shù)據(jù)信息收集,并后續(xù)存儲在數(shù)據(jù)表中存放,并可以根據(jù)數(shù)據(jù)表進行重要等級打標,給予表檢索及使用熱度,這里建議使用DataHub開源數(shù)據(jù)中心,DataHub提供了可擴展的元數(shù)據(jù)管理平臺,可以滿足數(shù)據(jù)發(fā)現(xiàn),數(shù)據(jù)可觀察與治理。這也極大的解決了數(shù)據(jù)復雜性的問題,地址:datahubproject.io。

(網(wǎng)易easy data-數(shù)據(jù)治理360 推薦表下線治理Demo圖)
3. 應用指標公共下沉復用
由于在數(shù)倉擴張期切沒有指標中心前提下大量開發(fā)應用側數(shù)據(jù)表導致指標復用性較差問題,首先我們查看應用層指標是否口徑一致,如不一致需要與下游再次溝通后修改,其次我們對應用層模型指標按照數(shù)據(jù)域、周期(1D(1天)、30D(最近30天)、60D(最近60天)、90D(最近90天)、MTD(月初至今)、TD(歷史至今))拆解并將不同顆粒度下的指標放入對應數(shù)據(jù)表驗證后復用,并切換線上數(shù)據(jù)表直接引用指標。
4. 解決ODS穿透問題
依靠我們在下線無用/臨時數(shù)據(jù)表時的數(shù)據(jù)血緣找到跨層引用數(shù)據(jù)表,并對這些數(shù)據(jù)表按照模型5要素(數(shù)據(jù)域、顆粒度、度量、維度、事實表類型)構建CDM(DWD與DWS)層,并驗證ADS/DWS標簽/指標引用新DWD數(shù)據(jù)表的質量情況,最后完成DWD/DWS數(shù)據(jù)表上線,及DWS/ADS的引用數(shù)據(jù)表切換。

(網(wǎng)易easy data-數(shù)據(jù)資產地圖數(shù)據(jù)血緣Demo圖)
5.煙囪數(shù)據(jù)表重構/下線
對于線上歷史多次重復開發(fā)煙囪數(shù)據(jù)表進行重構/下線,可復用公共指標以及整合其他相似場景下數(shù)據(jù)表字段內容到一個或多個數(shù)據(jù)表中,提升數(shù)據(jù)表易用性,使數(shù)據(jù)表清晰明了,由于對煙囪數(shù)據(jù)表重構/下線,從而也避免由內容不足而導致的相互依賴和任務鏈路延長問題發(fā)生。
6. 元數(shù)據(jù)非合規(guī)數(shù)據(jù)表重構/修改
對原來非合規(guī)數(shù)據(jù)表元數(shù)據(jù)進行內容按照新定的標準重構,切記在建設同時需要修改下游表名依賴及代碼中字段引用信息,避免線上故障發(fā)生,可以先重構ODS、DWD、DWS數(shù)據(jù)表的元數(shù)據(jù)信息,保障數(shù)據(jù)準確性后上線,后續(xù)可按照主題域分工,讓組內每位同學加入進來切換ADS數(shù)據(jù)表,但在切換前需要與下游知會溝通,并拉會對切換工作計劃排期,溝通后并與下游一起調整。
7. 數(shù)據(jù)表合規(guī)后續(xù)維護
可以從數(shù)據(jù)表價值(被引用次數(shù)、查詢次數(shù)、被收藏次數(shù)等)、數(shù)據(jù)表元數(shù)據(jù)規(guī)范(按照新數(shù)據(jù)標準去檢測打分)設定數(shù)據(jù)表合規(guī)評判分,并設立紅黑榜,以及對應獎懲措施,后續(xù)可通過Python等開發(fā)不合規(guī)數(shù)據(jù)表信息提示(可日推、周推提醒),可通過郵件或者群信息方式,指定負責人定時治理不規(guī)范的數(shù)據(jù)表,維護好數(shù)據(jù)表的質量,同時還需要建設數(shù)據(jù)表設計中心,強制數(shù)據(jù)表上線前審核,以及按照強管控方式強行限定數(shù)據(jù)表名、詞根內容、字段名等達到易讀有保障效果。

(網(wǎng)易easy-data模型設計中心主題域建設Demo圖)

(網(wǎng)易easy-data模型設計中心數(shù)據(jù)表內容建設Demo圖)
0 4 數(shù)據(jù)表合規(guī)治理的結果
(1)下線各層無用/臨時數(shù)據(jù)表總計80+,釋放存儲資源3.7T;
(2)完成30+個應用層煙囪數(shù)據(jù)表整合,及370+公共指標下沉;
(3)ODS穿透率由原來23%下降至4%;
(4)推出治理紅黑榜的,維持整體的資產健康分在80分以上;
(5)數(shù)據(jù)產出平均時間由原來每日最晚8:30產出降低至7:10(任務鏈路縮短);
(6)與團隊配合完成網(wǎng)易某業(yè)務線數(shù)倉數(shù)據(jù)表命名、字段命名、字段類型、數(shù)據(jù)表標注規(guī)范、數(shù)據(jù)表分區(qū)生命周期等6個方向規(guī)范制定;
0 5 數(shù)據(jù)表合規(guī)治理中遇到的難點由于在治理中后期涉及煙囪數(shù)據(jù)表重構問題,與下游多次對接無果(包含數(shù)據(jù)表遷移時需要下游配合報表改動,但只會徒增下游工作量),導致治理難推動,并且在想出合理方案時,也會因為下游各類情況導致治理進展不斷Delay,后續(xù)經(jīng)過多次磨合才實現(xiàn)數(shù)據(jù)表的更換,相互之間協(xié)調都較困難。
0 6 數(shù)據(jù)表合規(guī)治理思考對于數(shù)據(jù)表合規(guī)治理是持續(xù)性的工作,數(shù)倉側無法保障每個數(shù)據(jù)表就一定是合規(guī)的、易用的,要把數(shù)據(jù)表治理常態(tài)化,強制規(guī)范化從而減少問題發(fā)生。
對于本次遇到治理困難為部門之間協(xié)調配合問題,其實在事后自己也有一個復盤思考,我覺得治理工作配合要從3個點出發(fā):
(1)讓下游配合其實最重要的是調動他們積極性,因為數(shù)據(jù)表治理對于下游來說可有可無 ,沒有你數(shù)據(jù)表治理線上任務依舊在跑著,數(shù)倉只是修改了數(shù)據(jù)表內容,保障了易用性,可能對于下游來說毫無感知,所以可以從下游使用數(shù)據(jù)中的痛點去溝通,在優(yōu)先業(yè)務支持的同時給予時間設計數(shù)據(jù)表內容,共同維護好數(shù)據(jù)標準。
(2)除了這些還可以加一些獎懲措施活動,讓下游覺得配合是有價值的,例如通過紅黑榜定期也給他們發(fā)送郵件或者信息,并開展簡單的培訓,讓下游具備治理的意識,同時在他們自助治理后提供激勵。
(3)如果治理在周邊部門起到了效果,可以做更大的推進作用,比如我們在和下游一起做治理并取到了效果,可以發(fā)治送理效果月報/周報 發(fā)送全部門,讓其他人也有感知,并定期分享自己治理心得與其他部門數(shù)據(jù)部溝通,提升數(shù)據(jù)部在公司的影響力。
0 7 數(shù)據(jù)標準(附錄)1.數(shù)據(jù)表命名規(guī)范
-
ODS層(接入層):
ods__{業(yè)務數(shù)據(jù)庫名}_{業(yè)務數(shù)據(jù)表名}(可以在結尾補充增量或全量情況,或者在元數(shù)據(jù)側補充)
-
DWD層(明細層):
dwd_{一級數(shù)據(jù)域}_{二級數(shù)據(jù)域}_{三級數(shù)據(jù)域}_{業(yè)務過程(不清楚或沒有寫detail)}_存儲策略(df/di,df為全量數(shù)據(jù),di為增量數(shù)據(jù)))
-
DWS層(匯總層):
dws_{一級數(shù)據(jù)域}_{二級數(shù)據(jù)域}_{三級數(shù)據(jù)域}_{顆粒度}(例如員工/部門)_{業(yè)務過程}_{周期粒度}(例如近30天寫30d、90天寫3m)
-
ADS層(應用層):
ads_{應用主題/應用場景}_{顆粒度}(例如買家/賣家)_{業(yè)務過程}_{調度周期}(例如1天調度一次寫1d)
-
DIM表(維度表):
dim_{維度定義}_{更新周期(可不添加)}(例如日期寫date)
-
TMP表(臨時表):
tmp_{表名}_{臨時表編號}
-
VIEW(視圖):
{表名}_view
-
備份表:
{表名}_bak
2.數(shù)據(jù)表命名詞根
(1)存儲策略
-
df:日全量
-
di:日增量
-
hf:小時全量
-
hi:小時增量
-
mf:月全量
-
mi:月增量
-
wf:周全量
-
wi:周增量
(2)顆粒度
-
buyer:買家
-
seller:賣家
-
user:用戶
-
emp:員工
-
order:訂單
(3)統(tǒng)計周期
-
1d:近一天指標統(tǒng)計
-
1m:近一月指標統(tǒng)計
-
1y:近一年指標統(tǒng)計
-
3m:近三個月指標統(tǒng)計
-
6m:近六個月指標統(tǒng)計
-
nd:近n天指標統(tǒng)計(無法確定具體天可用nd替代)
-
td:歷史累計
(4)調度周期
-
1d:天調度
-
1m:月調度
-
1y:小時調度
3.字段命名規(guī)范
-
是否某某類型用戶,字段命名規(guī)范:is_{內容}
-
枚舉值類型字段命名規(guī)范:xxx_type
-
時間戳類型字段命名規(guī)范:xxx_date,xxx_time
-
周期指標命名:{內容}_{時間描述}(如最近一次lst1,最近兩次lst2,歷史his,最近第二次last2nd_date)
-
百分比命名:{內容}_rate
-
數(shù)值類型(整型)命名:{內容}_cnt_{周期}(周期看情況添加)
-
數(shù)值類型(小數(shù))金額命名:{內容}_amt_{周期}(周期看情況添加)
4.字段類型規(guī)范
-
文本:String
-
日期:String
-
整數(shù):Bigint
-
小數(shù):高精度用Decimal、正常使用Double
-
枚舉值:單枚舉-'Y'/'N'用String、多枚舉用String
-
各類:IDString
5.數(shù)據(jù)表中其他元數(shù)據(jù)規(guī)范
-
數(shù)據(jù)表負責人(Owner);
-
數(shù)據(jù)表中文名及使用說明;
-
每個開發(fā)字段中文名(中文名需要包含該字段內容,例如是否為某某類型用戶,需要寫出包含內容(Y/N));
-
數(shù)據(jù)表的顆粒度;
-
數(shù)據(jù)表的主鍵或聯(lián)合主鍵;
6.數(shù)據(jù)表中存儲周期規(guī)范
-
ODS層1年
-
DWD層3-5年
-
DWS層10年(部分可永久)
-
ADS層10年(部分可永久)
-
DIM層3-5年(部分可永久)
數(shù)據(jù)表分區(qū)建議最多2級分區(qū),超過2級分區(qū)會造成數(shù)據(jù)長周期存儲問題,1級分區(qū)為業(yè)務日期,2級根據(jù)業(yè)務場景設置。
