阿里巴巴數(shù)據(jù)模型設(shè)計(jì)與構(gòu)建實(shí)踐
一、阿里巴巴數(shù)據(jù)需求流轉(zhuǎn)介紹
數(shù)據(jù)倉(cāng)庫(kù)建設(shè)過程中通常會(huì)有以下幾類角色參與:
- 數(shù)據(jù)需求方:包括運(yùn)營(yíng)同學(xué)、BI、業(yè)務(wù)產(chǎn)品經(jīng)理等業(yè)務(wù)角色,這類角色對(duì)數(shù)據(jù)概念了解甚少,可能也不知道模型、表、派 生指標(biāo)等專業(yè)數(shù)據(jù)名詞,但這類角色往往都是業(yè)務(wù)專家,對(duì)業(yè)務(wù)情況非常了解。
- 數(shù)據(jù)產(chǎn)品經(jīng)理:阿里內(nèi)部大部分 BU 都會(huì)有數(shù)據(jù)產(chǎn)品經(jīng)理這個(gè)角色,他們負(fù)責(zé)把業(yè)務(wù)需求轉(zhuǎn)化為能實(shí)際進(jìn)行數(shù)據(jù)開發(fā)的數(shù)據(jù)需求。這也就意味著數(shù)據(jù)產(chǎn)品經(jīng)理本身的要求是既需要對(duì)所負(fù)責(zé)的業(yè)務(wù)策略要非常地了解,也需要數(shù)據(jù)開發(fā)工作非常了解。
- 數(shù)據(jù)開發(fā)工程師:數(shù)據(jù)研發(fā)工程師主要負(fù)責(zé)數(shù)據(jù)模型、數(shù)據(jù)指標(biāo)的設(shè)計(jì)以及相應(yīng)的數(shù)據(jù)研發(fā)工作。
二、阿里巴巴數(shù)倉(cāng)建模最佳實(shí)踐
- 業(yè)務(wù)分類:阿里巴巴大多數(shù)數(shù)倉(cāng)團(tuán)隊(duì)都是基于 Kimball 理論做維度建模,其更注重公共層和應(yīng)用層的建設(shè)。由于涉及到的業(yè)務(wù)體系較為龐大,為了能夠更好的各模型所屬業(yè)務(wù)團(tuán)隊(duì),我們?cè)诰S度建模理論的基礎(chǔ)上,我們?cè)鲈O(shè)了“業(yè)務(wù)分類”,它從更高的視角把不同業(yè)務(wù)團(tuán)隊(duì)的數(shù)據(jù)倉(cāng)庫(kù)區(qū)分開來。
- 數(shù)據(jù)域:是公共層里非常重要的一個(gè)概念。在設(shè)置數(shù)據(jù)域時(shí),我們往往會(huì)先劃分好業(yè)務(wù)流程,通過將業(yè)務(wù)流程進(jìn)行聚合形成一部分?jǐn)?shù)據(jù)域,然后我們?cè)賹⒄麄€(gè)業(yè)務(wù)中重要的參與對(duì)象或系統(tǒng)梳理出來形成另外一部分?jǐn)?shù)據(jù)與,從而形成完整的數(shù)據(jù)域。
- 數(shù)據(jù)集市:是應(yīng)用層里非常重要的一個(gè)概念。應(yīng)用層是否建模,實(shí)際上要應(yīng)業(yè)務(wù)自身發(fā)展情況而定,可以選擇應(yīng)用層建模、部分建模或者不建模。數(shù)據(jù)集市又可以分為業(yè)務(wù)集市、數(shù)據(jù)產(chǎn)品集市和公共集市。
除了剛才講到的數(shù)倉(cāng)頂層設(shè)計(jì)外,數(shù)據(jù)規(guī)范的制定與執(zhí)行,也是整個(gè)數(shù)倉(cāng)建設(shè)過程中最難的點(diǎn)。數(shù)據(jù)規(guī)范,如表名規(guī)范到底應(yīng)該怎么去建,我們也有已經(jīng)將其以內(nèi)容呈現(xiàn)的方式,內(nèi)置在我們的零售行業(yè)模型模版中。諸如字段命名規(guī)范、存儲(chǔ)策略的規(guī)范命名等,我們也都以內(nèi)容內(nèi)置、輸入檢測(cè)、提交卡點(diǎn)等形式體現(xiàn)在產(chǎn)品中,在最大程度上保證規(guī)范的落地。
在維度建模理論中,維度是一個(gè)非常重要的概念,維度是我們觀察業(yè)務(wù)狀況的視角,建立整體統(tǒng)一的維度,有助于后續(xù)各種業(yè)務(wù)分析工作的開展。例如交易域的維度包含訂單、訂單類型、訂單支付類型等。
由于數(shù)據(jù)建模的使用具備一定的理論門檻,DataWorks 智能數(shù)據(jù)建模工作提供開箱即用的零售行業(yè)數(shù)據(jù)倉(cāng)庫(kù)模型內(nèi)容,涵蓋大部分分層劃域,涉及訂單、會(huì)員、商品等維度及大部分的模型和指標(biāo)。模型導(dǎo)入后,在當(dāng)前頁(yè)面可以完整地看到這些模型及指標(biāo)。
三、阿里巴巴數(shù)倉(cāng)建模實(shí)操演示
接下來我會(huì)帶大家一起做一個(gè)數(shù)據(jù)倉(cāng)庫(kù)模型設(shè)計(jì)的實(shí)操演示。數(shù)據(jù)建模主要有四方面的工作:數(shù)倉(cāng)規(guī)劃、數(shù)據(jù)標(biāo)準(zhǔn)、數(shù)據(jù)指標(biāo)和維度建模。在日常的建模工作中,架構(gòu)師先定義好數(shù)倉(cāng)規(guī)劃、數(shù)據(jù)標(biāo)準(zhǔn)、原子指標(biāo)修飾詞,再由模型設(shè)計(jì)師和數(shù)據(jù)研發(fā)同學(xué)把模型和指標(biāo)創(chuàng)建好。和建模分工一致,DataWorks 智能數(shù)據(jù)建模在產(chǎn)品設(shè)計(jì)上,數(shù)倉(cāng)規(guī)劃、數(shù)據(jù)標(biāo)準(zhǔn)和數(shù)據(jù)指標(biāo)也最終都是服務(wù)于維度建模。
現(xiàn)在我們一起看一下,整個(gè)數(shù)倉(cāng)建模實(shí)踐過程中,大家可能都會(huì)遇到的一些問題。
- 建模冷啟動(dòng)難的問題:對(duì)于大部分想要做好模型設(shè)計(jì)工作的數(shù)據(jù)倉(cāng)庫(kù)團(tuán)隊(duì)來說,在模型設(shè)計(jì)初期,可能會(huì)面臨很多的歷史包袱。
- 規(guī)范落地難的問題:規(guī)范制定非常難,制定好之后落地也很難。我們之前經(jīng)常會(huì)發(fā)現(xiàn)沒有按照規(guī)范去做研發(fā),導(dǎo)致了很多額外的溝通。
- 建模效率低的問題:從不建模到建模,日常建模方式一定會(huì)有效率的降低。
- 模型設(shè)計(jì)和數(shù)據(jù)研發(fā)脫節(jié)的問題:阿里內(nèi)部數(shù)據(jù)研發(fā)的模型設(shè)計(jì)更多是用線下的 Excel,這種方式對(duì)數(shù)據(jù)研發(fā)階段來講,能獲取的幫助不是特別多,銜接的體驗(yàn)就會(huì)較差。
下面來具體展開介紹每一個(gè)問題的解決方法。
問題1:如何解決已有數(shù)倉(cāng)建模冷啟動(dòng)難的問題?
由于歷史原因,很多模型沒法維護(hù),還存在很多相似的模型或低價(jià)值的模型,很多模型沒有在用了,但存儲(chǔ)還在。我們希望大家能夠做一次歷史模型的線下梳理,梳理出來后(我們稱為全面分析盤點(diǎn)),下線歷史上沒有用的或者相似的模型。
對(duì)相似模型處理完成后,會(huì)形成一個(gè)數(shù)據(jù)模型的總線矩陣,這個(gè)總線矩陣需要去兼容一些歷史規(guī)范問題,我們可以借此把整個(gè)總線矩陣梳理好,最后通過產(chǎn)品的方式把歷史存量的模型導(dǎo)入到產(chǎn)品里,也就完成了存量模型的線上化管理。最終線下模型處理好之后,存量模型開始正常在產(chǎn)品上做建模之前,我們會(huì)把線下建模的口子關(guān)掉,從而保障模型后續(xù)都是比較規(guī)范的。
大多數(shù)架構(gòu)師會(huì)通過 DataWorks 逆向建模把已經(jīng)線下治理好的存量模型一次性批量導(dǎo)入到 DataWorks 產(chǎn)品里,導(dǎo)入后再去正向建?;蛐薷摹_@里我們建議最好是做好線下梳理之后再使用這個(gè)功能。
問題2:如何解決數(shù)倉(cāng)規(guī)范落地難的問題?
逆向建模之后一個(gè)很重要的工作就是去關(guān)掉線下所有能夠去建模的口子,我們的做法是在系統(tǒng)里把建模檢查器配置好,其作用是后續(xù)所有人要去開發(fā)數(shù)倉(cāng)核心表時(shí),必須要建模,不能直接上線。
規(guī)范落地比較典型的場(chǎng)景是表名規(guī)范,過去大家需要記表名規(guī)則是什么,規(guī)則里的每個(gè)詞到底應(yīng)該怎么寫,而現(xiàn)在已經(jīng)完全產(chǎn)品化,模型設(shè)計(jì)師新建一個(gè)模型時(shí),會(huì)調(diào)用對(duì)應(yīng)分層下的模型命名規(guī)則,把表名自動(dòng)生成出來,直接避免了模型命名不規(guī)范的情況出現(xiàn)。
問題3:如何提升模型設(shè)計(jì)的工作效率?
在指標(biāo)設(shè)計(jì)方面,最重要的一個(gè)點(diǎn)是通過勾選原子指標(biāo)、修飾詞、時(shí)間周期批量生成派生指標(biāo),生成后再做匯總層模型和應(yīng)用層模型建設(shè),效率就會(huì)高很多。
在數(shù)據(jù)模型創(chuàng)建時(shí),一個(gè)經(jīng)典的建模場(chǎng)景是從表導(dǎo)入再字段冗余。以明細(xì)表模型創(chuàng)建為例,DWD 會(huì)基于 ODS 的數(shù)據(jù)表結(jié)構(gòu),直接導(dǎo)入,基本上不會(huì)做改變,只是基于這個(gè)基礎(chǔ)做一些臟數(shù)據(jù)處理,然后再把經(jīng)常需要分析的維度冗余到 DWD 這張表里來,這時(shí)就可以快速完成 DWD 的模型設(shè)計(jì)。
通過這樣的建模方式后續(xù)生成的 ETL 代碼就會(huì)非常規(guī)范?;旧现恍枰砑右幌?where 條件以及 case when等就可以了。
對(duì)于匯總表和應(yīng)用表,通常是直接從指標(biāo)導(dǎo)入,把數(shù)據(jù)指標(biāo)中創(chuàng)建好的派生指標(biāo)直接導(dǎo)入到模型字段里來,指標(biāo)名稱直接作為字段名稱,這樣后續(xù)應(yīng)用理解上也非常方便,而且也能夠統(tǒng)一。
上述介紹的是新建模型的場(chǎng)景,如果要修改模型,建議通過代碼建模,代碼模式會(huì)支持常用的 MaxCompute DDL、Hive DDL 等。
在代碼模式中,我們也支持根據(jù) select 語(yǔ)句快速生成模型,這個(gè)功能非常適用于平時(shí)喜歡先分析數(shù)據(jù),寫好 ETL 代碼,再去做模型設(shè)計(jì)的場(chǎng)景。
問題4:如何解決模型設(shè)計(jì)與數(shù)據(jù)研發(fā)脫節(jié)的問題?
大家對(duì)直接創(chuàng)建物理表的方式可能會(huì)比較熟悉,在 DataWorks 智能數(shù)據(jù)建模中創(chuàng)建模型再進(jìn)行物化時(shí),無需再編寫 DDL 語(yǔ)句,可直接將模型發(fā)布為物理表,只要在產(chǎn)品上選要發(fā)布到哪里、發(fā)布到哪個(gè)環(huán)境等即可。
簡(jiǎn)代碼打通了模型設(shè)計(jì)和數(shù)據(jù)研發(fā),先做好模型設(shè)計(jì)后,可以通過模型的數(shù)據(jù)開發(fā)功能,自動(dòng)生成模型對(duì)應(yīng)的 ETL 代碼,并打通數(shù)據(jù)開發(fā),將代碼加載到數(shù)據(jù)開發(fā)中。
數(shù)據(jù)模型設(shè)計(jì)好之后,一般都是用于給大家去使用的,我們一般會(huì)將穩(wěn)定下來的模型在資產(chǎn)中進(jìn)行上架操作,這樣模型就可以被大家找到和消費(fèi)。數(shù)據(jù)建模的分層劃域可以和資產(chǎn)目錄做好映射,打通之后模型可以自動(dòng)上架到數(shù)據(jù)資產(chǎn)以被找到和消費(fèi)。
四、數(shù)據(jù)模型應(yīng)用-數(shù)據(jù)資產(chǎn)介紹
DataWorks 數(shù)據(jù)資產(chǎn) 3D 全景圖,旨在展示企業(yè)數(shù)據(jù)資產(chǎn)的全貌,讓數(shù)倉(cāng)同學(xué)的工作能夠顯性化體現(xiàn)出來并且能體現(xiàn)出業(yè)務(wù)價(jià)值。
資產(chǎn)概覽是一些比較常規(guī)的統(tǒng)計(jì)性的信息,資產(chǎn)管理員可以在這里從不同維度來觀察企業(yè)數(shù)據(jù)資產(chǎn)的分布情況,便于做好企業(yè)數(shù)據(jù)資產(chǎn)盤點(diǎn)工作。
資產(chǎn)市場(chǎng)更加適合于業(yè)務(wù)人員日常去找數(shù)據(jù)資產(chǎn)及用資產(chǎn),管理員可以將希望開放給業(yè)務(wù)人員的數(shù)據(jù)資產(chǎn)進(jìn)行上架。
最后講一下模型的應(yīng)用,模型一旦物化之后,在數(shù)據(jù)資產(chǎn)上也可以直接去做字段的勾選以及 SQL 分析,完全是零代碼,當(dāng)然只是單表建模單表分析,結(jié)束后就可以直接下載數(shù)據(jù)。
五、Q & A
問:DataWorks 是否支持拉鏈表?
答:拉鏈的自動(dòng)生成,現(xiàn)在還沒有對(duì)外開放。
問:數(shù)據(jù)資產(chǎn)是怎么分享的?
答: 我們是由管理員開放所需共享的資產(chǎn),放在數(shù)據(jù)資產(chǎn)模塊里。普通業(yè)務(wù)人員間的資產(chǎn)分享,現(xiàn)在還是通過直接發(fā)產(chǎn)品地址的方式。
DataWorks 智能數(shù)據(jù)建模目前已經(jīng)在阿里云上商業(yè)化,當(dāng)前推出個(gè)人版本,6個(gè)月僅需60元,并贈(zèng)送零售電子商務(wù)模板和學(xué)習(xí)教程供各位開發(fā)者使用。
https://www.aliyun.com/product/bigdata/ide。