企業(yè)級(jí)數(shù)倉(cāng)建設(shè),值得收藏!附PDF下載


一、前言
1.1 背景
無(wú)憂搬家數(shù)據(jù)以前很多都是數(shù)倉(cāng)同學(xué)從業(yè)務(wù)庫(kù)負(fù)責(zé)接入數(shù)據(jù)至ods層,然后就由各個(gè)下游分析師取ods貼源層數(shù)據(jù)然后進(jìn)行取數(shù)計(jì)算分析,數(shù)倉(cāng)這邊缺乏沉淀公共層數(shù)據(jù),從而有以下問(wèn)題:

251506bk-1.png


直接從ods貼源層取數(shù)據(jù),業(yè)務(wù)研發(fā)側(cè)一改造則下游鏈路級(jí)聯(lián)影響改動(dòng)很大
各數(shù)據(jù)分析下游從源頭貼源層就直接各自依賴計(jì)算,數(shù)據(jù)鏈路十分零散不好管理
貼源層數(shù)據(jù)與業(yè)務(wù)側(cè)保持一致,存在業(yè)務(wù)側(cè)數(shù)據(jù)質(zhì)量問(wèn)題導(dǎo)致污染各數(shù)據(jù)下游風(fēng)險(xiǎn)
數(shù)據(jù)指標(biāo)缺乏公共層沉淀,各下游數(shù)據(jù)分析重復(fù)計(jì)算資源浪費(fèi)
1.3 解決方案
基于以上的背景,為提高數(shù)據(jù)的易用性和復(fù)用性、減少數(shù)據(jù)冗余、提高數(shù)據(jù)產(chǎn)出效率,數(shù)倉(cāng)開(kāi)發(fā)這邊協(xié)同調(diào)研并結(jié)合下游BI需求,搭建無(wú)憂搬家主題域公共層數(shù)倉(cāng)模型,包含無(wú)憂搬家訂單主題、無(wú)憂搬家小哥主題等等,現(xiàn)在無(wú)憂搬家主題域沉淀了數(shù)倉(cāng)公共層以后,以上問(wèn)題可以得到有效緩解,下游能依賴數(shù)倉(cāng)公共層(dwb&dws) 的任務(wù)則直接優(yōu)先依賴使用該層級(jí)表,這樣可以做到:


251506bk-2.png



盡可能地屏蔽業(yè)務(wù)側(cè)改造對(duì)下游的直接影響,提升下游數(shù)據(jù)分析的穩(wěn)定性
提效BI同學(xué)和運(yùn)營(yíng)同學(xué)的數(shù)據(jù)分析需求,提升數(shù)據(jù)的易用性和復(fù)用性、提高數(shù)據(jù)鏈路產(chǎn)出效率
公共層表沉淀了核心基礎(chǔ)字段供下游使用,公共通用的基礎(chǔ)指標(biāo)和字段避免了下游重復(fù)計(jì)算
承擔(dān)起數(shù)據(jù)質(zhì)量保障環(huán)節(jié),在關(guān)鍵核心表設(shè)計(jì) 大禹 數(shù)據(jù)治理平臺(tái)監(jiān)控規(guī)則告警及熔斷機(jī)制
收斂了數(shù)據(jù)任務(wù)分散情況,優(yōu)化數(shù)據(jù)鏈路,構(gòu)建良好的血緣關(guān)系和數(shù)據(jù)架構(gòu)
二、數(shù)倉(cāng)建設(shè)
講完上面的背景和解決方案,接下來(lái)就來(lái)分享下無(wú)憂搬家數(shù)倉(cāng)建設(shè)的實(shí)際落地過(guò)程,數(shù)倉(cāng)建設(shè)這個(gè)對(duì)于數(shù)倉(cāng)開(kāi)發(fā)工程師來(lái)說(shuō)是必備的能力,比如當(dāng)你面臨著一個(gè)新業(yè)務(wù)的開(kāi)啟,就需要從0到1開(kāi)始搭建數(shù)據(jù)倉(cāng)庫(kù)或者數(shù)據(jù)集市,這時(shí)候就要考慮數(shù)據(jù)如何組織和設(shè)計(jì)才能使下游數(shù)據(jù)分析團(tuán)隊(duì)提效以及增強(qiáng)數(shù)倉(cāng)模型的健壯性。

2.1 數(shù)倉(cāng)概述
數(shù)據(jù)倉(cāng)庫(kù)具有面向主題的特性,那么就會(huì)有主題的概念,同時(shí),數(shù)倉(cāng)建設(shè)是遵循縱向分層開(kāi)發(fā),橫向劃分主題域設(shè)計(jì),遵循以下這個(gè)架構(gòu)圖,我們就可以以類似二維圖清晰地定位出數(shù)據(jù),這也從宏觀上體現(xiàn)了數(shù)據(jù)資產(chǎn)中的數(shù)據(jù)組織。

251506bk-3.jpg

2.2 建設(shè)步驟
2.2.1 業(yè)務(wù)調(diào)研
數(shù)倉(cāng)開(kāi)發(fā)是承上對(duì)接業(yè)務(wù)研發(fā)側(cè)&承下對(duì)接數(shù)據(jù)分析側(cè),在數(shù)倉(cāng)建設(shè)前期要對(duì)上游業(yè)務(wù)過(guò)程和對(duì)下游數(shù)據(jù)分析指標(biāo)體系有所了解和熟知,然后拉齊上下游溝通數(shù)據(jù)口徑和梳理設(shè)計(jì)數(shù)倉(cāng)表搭建。

無(wú)憂搬家的整體的業(yè)務(wù)流程

先是邀約部門(mén)針對(duì)獲取到的已有線索,邀約感興趣成為平臺(tái)搬家小哥的成員,然后來(lái)到貨拉拉各城市的培訓(xùn)點(diǎn)進(jìn)行面試,然后注冊(cè)認(rèn)證并交保證金成為我們平臺(tái)的一位搬家小哥,搬家小哥也會(huì)有角色,比如小哥隊(duì)長(zhǎng)和小哥隊(duì)員等,成為搬家小哥后就可以開(kāi)始接單和做單了,當(dāng)然搬家小哥由于各種原因也可以從平臺(tái)退保證金之后退出平臺(tái),這是搬家小哥的大致業(yè)務(wù)過(guò)程。對(duì)于用戶而言,下無(wú)憂搬家單其實(shí)跟下貨運(yùn)單無(wú)過(guò)多差別,貨運(yùn)單跟無(wú)憂搬家單的區(qū)別就在于后者會(huì)提供搬運(yùn)服務(wù)且參與對(duì)象多了搬家小哥這個(gè)主體。

2.2.2 主題域劃分
數(shù)倉(cāng)主題域:主題域通常是聯(lián)系較為緊密的數(shù)據(jù)主題的集合,根據(jù)業(yè)務(wù)需求分析的視角進(jìn)行劃分抽象歸類。

劃分方法:主題域劃分的方法一般有幾種

要么按照業(yè)務(wù)過(guò)程來(lái)劃分,一個(gè)業(yè)務(wù)過(guò)程抽象出一個(gè)主題域,比如業(yè)務(wù)系統(tǒng)中的商品、交易、物流等
要么按照業(yè)務(wù)部門(mén)來(lái)劃分,一個(gè)業(yè)務(wù)部門(mén)抽象出一個(gè)主題域,比如中臺(tái)部門(mén)、業(yè)務(wù)運(yùn)營(yíng)部門(mén)、供應(yīng)鏈部門(mén)等
要么按照業(yè)務(wù)系統(tǒng)來(lái)劃分,一個(gè)業(yè)務(wù)系統(tǒng)抽象出一個(gè)主題域,比如搬家系統(tǒng)、erp系統(tǒng) 等
無(wú)憂搬家業(yè)務(wù)的數(shù)倉(cāng)建設(shè)項(xiàng)目,是一個(gè)面向搬家業(yè)務(wù)部門(mén)級(jí)的數(shù)據(jù)集市,因?yàn)槠錁I(yè)務(wù)特性和定位,無(wú)憂搬家是公司業(yè)務(wù)中一個(gè)獨(dú)立的業(yè)務(wù)線,所對(duì)應(yīng)的業(yè)務(wù)系統(tǒng)和數(shù)據(jù)庫(kù)也是跟其他系統(tǒng)獨(dú)立開(kāi)的,比如無(wú)憂搬家訂單數(shù)據(jù)沒(méi)有整合到貨運(yùn)交易訂單中,以及搬家小哥這個(gè)角色在貨運(yùn)整體業(yè)務(wù)線中也不存在該實(shí)體,那么這時(shí)候采用上面第3點(diǎn)劃分方法,在已有企業(yè)級(jí)數(shù)倉(cāng)中,按照業(yè)務(wù)系統(tǒng)來(lái)劃分,新增一個(gè)無(wú)憂搬家主題域,就不會(huì)在建設(shè)過(guò)程中出現(xiàn)一些‘扯皮’操作,出現(xiàn)數(shù)據(jù)邊界歸屬問(wèn)題。

小結(jié):主題域的劃分一般比較謹(jǐn)慎,一旦定下來(lái)了避免頻繁變動(dòng),雖然數(shù)倉(cāng)建設(shè)是迭代建設(shè)的,不能保證一次性初始化好,但我們的主題域劃分和主題劃分要盡可能地涵蓋企業(yè)的所有業(yè)務(wù),以及在新業(yè)務(wù)進(jìn)來(lái)時(shí)能夠無(wú)影響地被包含進(jìn)來(lái)和可擴(kuò)展主題域和主題,企業(yè)級(jí)數(shù)倉(cāng)做主題劃分和主題域劃分,建議還是要站在全局的視角來(lái)看,然后先劃分出主題域,再接著在主題域里面劃分出各個(gè)主題,比如幾個(gè)核心大域,貨運(yùn)交易訂單域、貨運(yùn)用戶域、貨運(yùn)司機(jī)域。

2.2.3 主題劃分
數(shù)倉(cāng)主題:是在較高層次上將企業(yè)生產(chǎn)上的各個(gè)系統(tǒng)中某一分析對(duì)象的數(shù)據(jù)進(jìn)行整合、歸類并分析的一種范圍,屬于一個(gè)抽象概念,簡(jiǎn)單點(diǎn)說(shuō)每一個(gè)主題對(duì)應(yīng)一個(gè)宏觀分析領(lǐng)域。

劃分方法:說(shuō)白了主要就是要識(shí)別出分析對(duì)象主體,比如上面的主題域劃分完了后就產(chǎn)生一個(gè)搬家主題域,如果把搬家分析作為一個(gè)分析領(lǐng)域,那么‘搬家分析’所涉及到的主要分析對(duì)象就有用戶、訂單、搬運(yùn)工 等,則數(shù)倉(cāng)的主題就可以劃分為訂單主題、搬運(yùn)工主題 等下游數(shù)據(jù)分析師關(guān)注度高的數(shù)據(jù)主題聚焦分析。

2.2.4 輸出總線矩陣
即業(yè)務(wù)過(guò)程和維度,組建成的矩陣。

251506bk-4.jpg
輸出總線矩陣
2.2.5 數(shù)倉(cāng)分層設(shè)計(jì)模型表開(kāi)發(fā)
數(shù)倉(cāng)分層的每一層建設(shè)都有其專屬的職責(zé)和側(cè)重點(diǎn),數(shù)倉(cāng)分層設(shè)計(jì)很重要,但如何分層以及命名其實(shí)沒(méi)有固定的標(biāo)準(zhǔn),各層之前的職責(zé)在各行業(yè)和公司也各有理解和應(yīng)用,我建議是無(wú)需深究概念,不追究千篇一律都一致,但要知其各層主要職責(zé)劃分和按公司內(nèi)部約定好的規(guī)范應(yīng)用遵守。

貨拉拉的數(shù)倉(cāng)分層設(shè)計(jì)

「ODS貼源數(shù)據(jù)層」:主要同步業(yè)務(wù)庫(kù)數(shù)據(jù)與其保持一致,不做數(shù)據(jù)清洗動(dòng)作
「DWD明細(xì)數(shù)據(jù)層」:存儲(chǔ)各個(gè)單一業(yè)務(wù)過(guò)程的明細(xì)數(shù)據(jù),采用表視圖方式,對(duì)ODS層數(shù)據(jù)清洗數(shù)據(jù)清洗和數(shù)倉(cāng)規(guī)范化,降低存儲(chǔ)成本,并給上下游留下了改造兼容的緩沖層
「DWB基礎(chǔ)寬表層」:此層主要采用寬表思路,用來(lái)做主題基礎(chǔ)明細(xì)寬表,面向主題把不同業(yè)務(wù)過(guò)程的DWD明細(xì)表和視圖關(guān)聯(lián)起來(lái)做數(shù)據(jù)橫向整合,結(jié)合下游數(shù)據(jù)指標(biāo)分析做打標(biāo)簽化,沉淀指標(biāo)復(fù)雜口徑邏輯
「DWS輕度匯總層」:存放同主題業(yè)務(wù)下的通用匯總數(shù)據(jù),這一層通常是抽象出一些通用指標(biāo)和原子指標(biāo),會(huì)涉及復(fù)雜的數(shù)據(jù)邏輯計(jì)算而得出一些公共通用指標(biāo)
251506bk-5.png
無(wú)憂搬家主題域的模型表分層設(shè)計(jì)架構(gòu)圖
健壯性評(píng)估

當(dāng)后續(xù)搬家主題域業(yè)務(wù)新增,還可以輕松地?cái)U(kuò)展出其他主題,畢竟按照上面的劃分法,搬家的數(shù)據(jù)基本都劃分在搬家主題域,剩下的就是搬家有新業(yè)務(wù)進(jìn)來(lái)時(shí)擴(kuò)展新主題或包含進(jìn)已有主題。

模型表開(kāi)發(fā)舉例講解

表名:無(wú)憂搬家訂單費(fèi)用基礎(chǔ)寬表

設(shè)計(jì):把dwd費(fèi)用明細(xì)表,縱表打橫成為橫表(寬表) ,屏蔽各個(gè)type費(fèi)用項(xiàng)對(duì)應(yīng)的映射關(guān)系取值,統(tǒng)一由數(shù)倉(cāng)來(lái)做解析,提升下游對(duì)費(fèi)用明細(xì)數(shù)據(jù)的易用性。

做法:收斂粒度到order_id每筆訂單,對(duì)應(yīng)各自的費(fèi)用項(xiàng),并處理出一個(gè)各費(fèi)用項(xiàng)的拼接標(biāo)識(shí)去重?cái)?shù)組,使得下游使用時(shí)可以區(qū)分出這筆訂單到底是沒(méi)有這個(gè)費(fèi)用項(xiàng)還是這筆費(fèi)用項(xiàng)本來(lái)值就為0。

優(yōu)勢(shì):提升了數(shù)據(jù)易用性,收斂了數(shù)據(jù)量。

2.2.6 數(shù)據(jù)質(zhì)量保障
傳統(tǒng)數(shù)據(jù)開(kāi)發(fā)流程中,往往是大數(shù)據(jù)調(diào)度平臺(tái)線上執(zhí)行腳本代碼后,大數(shù)據(jù)集群計(jì)算再寫(xiě)入數(shù)據(jù)表,我們只根據(jù)數(shù)據(jù)任務(wù)的執(zhí)行狀態(tài)(成功or失敗)來(lái)判斷數(shù)據(jù)任務(wù)是否成功產(chǎn)出,但數(shù)據(jù)質(zhì)量卻沒(méi)有得到保障,比如數(shù)據(jù)任務(wù)執(zhí)行成功但數(shù)據(jù)未寫(xiě)入,比如字段數(shù)據(jù)錯(cuò)位,比如不合理的數(shù)據(jù)空值插入等等各種數(shù)據(jù)質(zhì)量問(wèn)題,所以我們有必要增加一個(gè)環(huán)節(jié)-數(shù)據(jù)質(zhì)量監(jiān)控 ,輔助我們做到故障升級(jí)前及時(shí)感知,故障升級(jí)后快速定位。

監(jiān)控規(guī)則設(shè)計(jì)思路 & 實(shí)踐

以下思路最終形成的實(shí)現(xiàn)邏輯借助大數(shù)據(jù)內(nèi)部自研數(shù)據(jù)治理平臺(tái)-大禹 來(lái)配置監(jiān)控規(guī)則及時(shí)感知業(yè)務(wù)數(shù)據(jù)以及熔斷數(shù)據(jù)質(zhì)量避免污染傳遞下游。

表數(shù)據(jù)量波動(dòng)監(jiān)控
監(jiān)控?cái)?shù)據(jù)量波動(dòng)情況有助于我們識(shí)別出暴漲暴跌場(chǎng)景。

比如:全量表數(shù)據(jù)量一般只可能大于上一天數(shù)據(jù)量,跌了or等于都可能代表著數(shù)據(jù)異常了。

表字段枚舉值值域監(jiān)控
枚舉值值域監(jiān)控主要針對(duì)的是業(yè)務(wù)側(cè)改動(dòng)場(chǎng)景,改動(dòng)頻率不高但設(shè)計(jì)這類監(jiān)控可以讓我們及時(shí)感知到業(yè)務(wù)側(cè)的數(shù)據(jù)變動(dòng)調(diào)整。

比如:主訂單表的order_status主訂單狀態(tài)枚舉值 和 搬運(yùn)訂單表的order_status搬運(yùn)訂單狀態(tài)枚舉值,監(jiān)控業(yè)務(wù)側(cè)改動(dòng)場(chǎng)景。

表核心指標(biāo)異常監(jiān)控
通過(guò)一些數(shù)據(jù)場(chǎng)景來(lái)監(jiān)控?cái)?shù)據(jù)是否異常。

比如:一般訂單主表內(nèi)每筆訂單都會(huì)攜帶地理位置信息的addr_info字段json數(shù)組數(shù)據(jù),通過(guò)對(duì)addr_info解析出來(lái)的地理位置信息數(shù)據(jù)設(shè)計(jì)null校值驗(yàn),從而就能發(fā)現(xiàn)無(wú)憂搬家地理位置解析表的地理位置信息數(shù)據(jù)異常。

表多源join抽樣監(jiān)控
因?yàn)閷挶韺訒?huì)有較多的join場(chǎng)景和字段很多,所以可以按每個(gè)join子查詢抽樣監(jiān)控一兩個(gè)關(guān)鍵指標(biāo)。

三、結(jié)語(yǔ)
自此無(wú)憂搬家主題域數(shù)據(jù)倉(cāng)庫(kù)建設(shè)目前已介紹完畢。無(wú)憂搬家主題域目前建設(shè)了無(wú)憂搬家訂單主題&無(wú)憂搬家小哥主題,從依賴到 數(shù)倉(cāng) 公共層(dwb&dws)下游鏈路來(lái)看:

目前就覆蓋滿足了下游數(shù)據(jù)分析團(tuán)隊(duì)的上千個(gè)數(shù)據(jù)分析任務(wù),數(shù)據(jù)鏈路不再像以前各自分散不好管理,且 業(yè)務(wù) 改造也不會(huì)直接影響到 數(shù)據(jù)分析師 們的任務(wù),由數(shù)倉(cāng)公共層數(shù)據(jù)模型為其保障了數(shù)據(jù)質(zhì)量,以更加良好的數(shù)據(jù)模型和數(shù)據(jù)架構(gòu)賦能業(yè)務(wù),助力貨拉拉業(yè)務(wù)更好更快的向前發(fā)展。

當(dāng)然,無(wú)憂搬家公共層模型現(xiàn)在還不算完善,這也不止無(wú)憂搬家業(yè)務(wù)線,貨運(yùn)業(yè)務(wù)線的其他主題域公共層模型也需要持續(xù)迭代升級(jí),以及歷史存量不規(guī)范和無(wú)效任務(wù)治理,數(shù)據(jù)質(zhì)量監(jiān)控設(shè)計(jì)還沒(méi)完全覆蓋,我們會(huì)在未來(lái)繼續(xù)迭代,夯實(shí)數(shù)倉(cāng)公共層模型,沉淀好數(shù)據(jù)資產(chǎn)。


作者:江鑫彪


歡迎關(guān)注微信公眾號(hào) :大數(shù)據(jù)球球