您的位置:首頁 >綜合 > 股票 >

數(shù)倉建模平臺在網(wǎng)易嚴(yán)選的探索實踐

一、背景及現(xiàn)狀

首先來介紹一下當(dāng)前企業(yè)數(shù)倉建設(shè)的現(xiàn)狀。

1、模型分層和建模流程

數(shù)倉建設(shè)的意義,簡單來說就是將業(yè)務(wù)數(shù)據(jù)通過整合、轉(zhuǎn)換、計算以及其它一些操作,提取出有價值的信息,最終把這些信息反饋給業(yè)務(wù),為業(yè)務(wù)的發(fā)展持續(xù)賦能。


(資料圖片僅供參考)

從技術(shù)上來看,現(xiàn)在通用的模型遵循圖中的分層設(shè)計準(zhǔn)則。源頭是ODS層,即引入層,嚴(yán)選的數(shù)據(jù)主要有兩個來源,一個是數(shù)據(jù)庫binlog對應(yīng)的快照,另一個是日志,包括業(yè)務(wù)日志、埋點日志、APP日志等等。

中間部分是數(shù)倉建模。包括貼源層,我們命名為DWD事實層,然后是DWS明細層,第三層是DWS匯總層,再后面是DM集市層,主要是面向上層的應(yīng)用以及數(shù)據(jù)產(chǎn)品的需求。

圖中右邊是嚴(yán)選數(shù)倉建模的生命周期。首先是業(yè)務(wù)調(diào)研和需求分析;然后定義指標(biāo),進行數(shù)據(jù)刻畫;第三步就是進行邏輯模型的設(shè)計,把不同的指標(biāo)和它們的維度進行關(guān)聯(lián),也就是進行數(shù)據(jù)組織的過程;第四步就是編碼開發(fā),將數(shù)據(jù)生產(chǎn)出來;接下來是上線交付、對外服務(wù),也就是進行數(shù)據(jù)使用;最后就是長期的運行維護。

2、網(wǎng)易嚴(yán)選數(shù)倉現(xiàn)狀

網(wǎng)易嚴(yán)選的核心業(yè)務(wù)是電商,數(shù)倉建設(shè)已有六七年時間,已經(jīng)具有了相當(dāng)大的規(guī)模,有大量的模型和指標(biāo)都在服務(wù)于各種各樣的生產(chǎn)環(huán)境上的產(chǎn)品。其中物理模型的數(shù)量有一萬多個,開發(fā)任務(wù)有近萬個,指標(biāo)數(shù)也有近萬個,產(chǎn)品和服務(wù)有數(shù)十個。

嚴(yán)選整個數(shù)倉建模流程中的各個步驟都有相應(yīng)的一些產(chǎn)品進行承接,比如指標(biāo)設(shè)計,就是通過我們的指標(biāo)管理系統(tǒng)進行指標(biāo)定義和模型設(shè)計;模型開發(fā)和任務(wù)運維是通過離線開發(fā)平臺進行編碼;數(shù)據(jù)對外提供服務(wù)是通過數(shù)據(jù)服務(wù)平臺。由于歷史原因,我們各個產(chǎn)品之間目前基本上是獨立的狀態(tài),沒有形成一個完整的體系,而各系統(tǒng)也存在著一些問題,包括接下來將重點介紹的指標(biāo)管理系統(tǒng)。

3、舊指標(biāo)管理系統(tǒng)現(xiàn)狀

舊的指標(biāo)管理系統(tǒng)存在的問題大致可以歸納為四大方面:

首先是功能邊界有限。當(dāng)前系統(tǒng)不支持DW層模型的設(shè)計和管理,沒有模型物理化能力,無法有效指導(dǎo)模型開發(fā),缺乏與任務(wù)運維和數(shù)據(jù)服務(wù)關(guān)聯(lián)的能力。

第二是指標(biāo)定義不規(guī)范。存在比較多的指標(biāo)重復(fù)定義、原子指標(biāo)命名不規(guī)范、原子指標(biāo)與派生指標(biāo)混用等。比如包含派生詞、未包含統(tǒng)計單位,另外非匯總數(shù)據(jù)也可能被錯誤的定義成一些指標(biāo),比如一些根據(jù)機器學(xué)習(xí)算法得出預(yù)測值。

第三是模型設(shè)計不規(guī)范。模型命名分層不清晰,模型開發(fā)線上化率比較低,存在大量沒有進行登記的模型,模型與指標(biāo)的關(guān)聯(lián)關(guān)系也比較混亂。整個模型設(shè)計,沒有跟模型開發(fā)進行強綁定,可能有些需求比較緊急就導(dǎo)致開發(fā)人員忽略了設(shè)計過程。

第四是模型構(gòu)建不規(guī)范。邏輯模型與物理模型的結(jié)構(gòu)存在差異。存在很多煙囪式的開發(fā),導(dǎo)致指標(biāo)被重復(fù)計算。還有跨層依賴問題,比如DM層直接依賴了最底下的DWD層;反向依賴問題,比如DWS層依賴了DM層,DM層的有些數(shù)據(jù)當(dāng)作匯總表在用。

4、數(shù)倉建設(shè)的痛點

通過對現(xiàn)有系統(tǒng)的量化分析,我們整理出了當(dāng)前數(shù)倉建設(shè)的痛點。

首先,業(yè)務(wù)復(fù)雜多變,比如電商會經(jīng)常做活動,各種玩法帶來很多復(fù)雜的業(yè)務(wù)流程,由此帶來的就是數(shù)倉體量龐大,數(shù)據(jù)之間的關(guān)系網(wǎng)非常復(fù)雜。

其次,事前規(guī)劃不足,模型設(shè)計能力欠缺,經(jīng)常出現(xiàn)指標(biāo)重復(fù)定義、描述不規(guī)范的情況,指標(biāo)和模型缺乏嚴(yán)謹性。

第三,設(shè)計和實現(xiàn)過程就脫節(jié),一方面開發(fā)效率低下,職責(zé)不清,存在重復(fù)計算的問題,另外,依賴關(guān)系混亂,人工編碼也很容易引入錯誤。

第四,事后治理困難,由于事前和事中沒有做好,就會導(dǎo)致事后治理起來非常困難,比如業(yè)務(wù)有變動,模型設(shè)計或者指標(biāo)的計算方式就會有變化,但是很難追溯,變更過程非常復(fù)雜。數(shù)據(jù)質(zhì)量也就無法保障,運維管理過程會非常低效。

第五,數(shù)據(jù)孤島問題,指標(biāo)口徑不一致,觀察視角不統(tǒng)一,比如開發(fā)人員看到的是指標(biāo)模型,而上層應(yīng)用可能看到的是表字段的視角,繼而導(dǎo)致學(xué)習(xí)和使用數(shù)據(jù)的成本比較高。

二、解決方案1、方案切入點

針對上述痛點,我們制定了以建設(shè)完整、規(guī)范的數(shù)倉建模體系為目標(biāo)的解決方案:制定一個標(biāo)準(zhǔn),輸出一款產(chǎn)品,落地一套規(guī)范。

我們在一開始的時候其實是有一個標(biāo)準(zhǔn)的,但僅停留在文檔層面,并沒有非常好的落地。所以希望通過產(chǎn)品化的方式,對這套標(biāo)準(zhǔn)進行強制的規(guī)范落地。產(chǎn)品會包括業(yè)務(wù)過程管理、維度管理、指標(biāo)定義、模型設(shè)計等能力。通過這款產(chǎn)品,落地一整套的規(guī)范,比如指標(biāo)定位數(shù)據(jù)、數(shù)據(jù)訪問約束,以及后期的模型治理、任務(wù)運維規(guī)范等等。

2、方案做什么-平臺定位

我們的數(shù)倉建模平臺,整體上還是以經(jīng)典的數(shù)倉建模方法論為理論依據(jù),結(jié)合網(wǎng)易嚴(yán)選的數(shù)倉建設(shè)現(xiàn)狀,對標(biāo)業(yè)界優(yōu)秀的相關(guān)產(chǎn)品,借助大數(shù)據(jù)其它產(chǎn)品能力,指導(dǎo)數(shù)倉從設(shè)計、開發(fā)、使用到最后維護,這樣一套全流程一站式的解決方案。

上圖中右邊是我們新建的數(shù)據(jù)建模平臺在大數(shù)據(jù)體系中的定位,以及與其它一些平臺的關(guān)聯(lián)。

3、方案怎么做-產(chǎn)品框架

上圖是整體的產(chǎn)品框架,產(chǎn)品功能重點在紅框中的數(shù)據(jù)模型設(shè)計部分。主要分為五大塊內(nèi)容:數(shù)據(jù)規(guī)劃、數(shù)據(jù)標(biāo)準(zhǔn)、維度建模、數(shù)據(jù)指標(biāo)和數(shù)據(jù)資產(chǎn)。其中維度建模和數(shù)據(jù)指標(biāo)是我們整個產(chǎn)品設(shè)計的核心。數(shù)據(jù)規(guī)劃和數(shù)據(jù)標(biāo)準(zhǔn)主要是結(jié)合嚴(yán)選現(xiàn)狀,做一些定制化內(nèi)容,相對來說沒有后面幾塊做的靈活。

下面一層是數(shù)據(jù)開發(fā),這一層就是將上面的邏輯定義設(shè)計真正落實到代碼當(dāng)中。最下面是物理層,包括引擎、存儲、計算等等。

右邊的應(yīng)用場景包括數(shù)據(jù)報表、風(fēng)控引擎、用戶畫像、榜單服務(wù)、輿情管理等等。

4、方案怎么做-功能模塊

功能模塊中,有三個核心的功能模塊:

第一塊是業(yè)務(wù)過程和指標(biāo)定義,包括業(yè)務(wù)過程定義、總線矩陣設(shè)計、維度管理、度量定義、原子指標(biāo)管理、派生指標(biāo)管理等等。

第二塊是邏輯模型設(shè)計,結(jié)合現(xiàn)狀設(shè)計了一個分層模型,最底下是數(shù)據(jù)引入層ODS層;通過清洗轉(zhuǎn)換,形成了明細模型DWD層;再通過一些細粒度計算,以及一些復(fù)雜的數(shù)據(jù)規(guī)劃(如歸一化、標(biāo)準(zhǔn)化、維度計算等),形成數(shù)據(jù)服務(wù)模型DWS明細層,在這個明細層關(guān)聯(lián)原子指標(biāo);然后再把原子指標(biāo)這一層數(shù)據(jù)進行派生匯總,形成匯總DWS層,這一層模型跟派生指標(biāo)進行關(guān)聯(lián);最后上面是面向應(yīng)用的集市層DM,按需進行取數(shù)。

第三塊是模型物理化和構(gòu)建,主要包括模型進行物理化,任務(wù)的發(fā)布和運維,以及數(shù)據(jù)服務(wù)的生成和綁定。

三、實施步驟1、實施過程-3步走戰(zhàn)略

嚴(yán)選數(shù)倉規(guī)范化建設(shè)制定了三步走的戰(zhàn)略:

第一步是規(guī)范指標(biāo)定義體系建設(shè),包括規(guī)范業(yè)務(wù)過程、度量、指標(biāo)命名、指標(biāo)分類、派生依賴、匯總算法、派生算法、派生詞關(guān)聯(lián)等等。

第二步是規(guī)范模型的設(shè)計體系建設(shè),在指標(biāo)定義規(guī)范的前提下,進行模型設(shè)計的規(guī)范,包括模型命名、分層、依賴、數(shù)據(jù)時效、維度關(guān)聯(lián)等等。

第三步是規(guī)范指標(biāo)計算和模型構(gòu)建的過程,我們希望不僅模型是規(guī)范的,數(shù)據(jù)的生產(chǎn)過程也必須是規(guī)范的,包括結(jié)構(gòu)的一致性、自動構(gòu)建任務(wù)、任務(wù)運維、變更通知、算法優(yōu)化、參數(shù)調(diào)優(yōu)等。

2、實施步驟1 - 規(guī)范指標(biāo)定義體系建設(shè)

第一個實施步驟是規(guī)范指標(biāo)定義體系的建設(shè)。原先的設(shè)計流程通常僅僅是很隨意地錄入到舊的指標(biāo)管理系統(tǒng)中,經(jīng)常存在指標(biāo)含義表述不清、重復(fù)設(shè)計等問題;此外還存在不少指標(biāo)只記錄在離線文檔,口口相傳。

規(guī)范后的定義流程按照下面五步強制流程來走:

(1)切分業(yè)務(wù)域。

(2)進行維度設(shè)計,生成派生詞,也就是業(yè)務(wù)限定。

(3)設(shè)計業(yè)務(wù)過程,包括確定業(yè)務(wù)流程,設(shè)計維度矩陣以及度量。

(4)設(shè)計原子指標(biāo)、衍生原子指標(biāo),包括關(guān)聯(lián)度量,明確數(shù)據(jù)類型、匯總方式,公式化地描述衍生原子指標(biāo)的計算方式。

(5)基于原子指標(biāo),設(shè)計派生指標(biāo)、派生計算指標(biāo),保證派生指標(biāo)能夠自動關(guān)聯(lián)依賴的原子指標(biāo),確定派生詞集合以及時間周期,自動生成中英文標(biāo)識。

對于指標(biāo)派生和依賴的規(guī)范建設(shè),我們制定了各類指標(biāo)派生的原則,定義派生指標(biāo)=統(tǒng)計周期+派生詞集合+原子指標(biāo)。比如”日支付成功抖音渠道銷售額“,“日”就是統(tǒng)計周期,“支付成功”是支付狀態(tài)維度的一個派生詞,“抖音渠道”是渠道維度的一個派生詞,“銷售額”是原子指標(biāo)。

在產(chǎn)品層面,如上圖右邊所示,做了一些限定去保證指標(biāo)完全按照我們的設(shè)計規(guī)范進行設(shè)計。

我們希望形成圖中的邏輯閉環(huán),首先在設(shè)計規(guī)范上達成共識,使得指標(biāo)是可描述、可理解、可查詢、可管理,并且可使用的,最后要達到可驗證,通過驗證來優(yōu)化指標(biāo)定義規(guī)范,從而形成一個邏輯閉環(huán)。我們單獨對于指標(biāo)的可查詢、可管理、可理解這一塊做了一個指標(biāo)地圖,目的就是對于指標(biāo)的一些必要信息能夠快速定位和快速查詢,能夠快速消除理解上的歧義,降低指標(biāo)的使用門檻。

3、實施步驟2 - 規(guī)范模型設(shè)計體系建設(shè)

第二個實施步驟是規(guī)范模型設(shè)計體系建設(shè)。為了打破原有數(shù)據(jù)開發(fā)的一些不好的工作習(xí)慣,我們設(shè)計了一整套嚴(yán)格的模型設(shè)計流程:

(1)設(shè)計DWD事實模型,要關(guān)聯(lián)業(yè)務(wù)過程和度量設(shè)計。

(2)設(shè)計DWS底層模型,要實現(xiàn)標(biāo)識自動生成,關(guān)聯(lián)原子指標(biāo)、維度,以及模型物理化。

(3)設(shè)計DWS匯總模型,因為DWS底層模型是關(guān)聯(lián)原子指標(biāo)的,而DWS匯總層模型是關(guān)聯(lián)派生指標(biāo)的,派生指標(biāo)本身就有嚴(yán)格的量化定義,所以DWS匯總模型的指標(biāo)依賴包括模型的依賴關(guān)系是可以自動發(fā)現(xiàn)并自動關(guān)聯(lián)的。借助產(chǎn)品的能力,可以做到所有指標(biāo)、維度等信息都是可以溯源的,從而達到模型設(shè)計規(guī)范化建設(shè)的目的。

(4)設(shè)計DM集市層模型,我們將這一層定位為僅取數(shù),不做任何數(shù)據(jù)計算匯總、轉(zhuǎn)換的工作,也就是達到one data的效果。我們的模型指標(biāo)只會在一個地方進行設(shè)計和計算,其它地方都是從這個地方取數(shù)就行了。

對于模型設(shè)計規(guī)范,舉幾個例子來說明。首先,我們做了模型命名規(guī)范的分層,前后綴當(dāng)中要體現(xiàn)分層和業(yè)務(wù)過程,后綴代表模型數(shù)據(jù)的更新方式。

模型分層職責(zé)劃分為,DWD事實層只做清洗、轉(zhuǎn)換、歸一化等工作;DWS明細層做一些細粒度計算,包括一些復(fù)雜的計算,比如有的訂單數(shù)據(jù)里面需要對每一件商品的銷售額計算用戶支付的金額,要把這一單商品的運費均攤到每一件商品當(dāng)中,那么就要在明細層中實現(xiàn)運費均攤計算;DWS匯總層就是基于明細層做派生計算;DM集市層僅僅是面向應(yīng)用,只取數(shù)不計算。

最后,模型內(nèi)容限定,就是不同層對應(yīng)不同類型的指標(biāo),且只包含維度、匯總粒度、時間周期等這些信息。

上圖是我們產(chǎn)品設(shè)計的一個demo??梢钥吹?,匯總信息是基于派生指標(biāo)得到的,所依賴的原子指標(biāo)都可以自動發(fā)現(xiàn),并且定位到上游的模型以及計算的邏輯?;谝?guī)范的指標(biāo)依賴和規(guī)范的模型定義,就可以實現(xiàn)對模型構(gòu)建和指標(biāo)計算的規(guī)范化。

4、實施步驟3 - 規(guī)范指標(biāo)計算和模型構(gòu)建

第三個步驟是規(guī)范指標(biāo)計算和模型構(gòu)建。原來我們存在一些不規(guī)范的模型開發(fā)習(xí)慣,首先,我們的模型設(shè)計和開發(fā)幾乎是獨立的,導(dǎo)致人工編碼工作量大,還有可能前后不一致,存在實際的業(yè)務(wù)邏輯與定義不符。另外為了快速交付,存在一些煙囪式開發(fā)、指標(biāo)重復(fù)計算和跨層依賴的情況。

在規(guī)范后的模型開發(fā)流程中,我們對DWD層和DWS底層模型還是按照平臺設(shè)計+人工開發(fā)的方式。但對DWS匯總層進行了自動構(gòu)建能力的建設(shè),平臺基于指標(biāo)定義和模型設(shè)計,完全能自動發(fā)現(xiàn)依賴并按指標(biāo)匯總邏輯生成計算代碼,自動完成任務(wù)的開發(fā)、調(diào)度和運維。最后DM層相對簡單,且定位清晰:只取數(shù)不計算,平臺也做了自動構(gòu)建能力的建設(shè),并支持自動生成和綁定標(biāo)準(zhǔn)數(shù)據(jù)服務(wù)。

從DWD層模型到DM層模型構(gòu)建的職責(zé)劃分如上圖所示。前兩層雖然是人工開發(fā)的,但為了盡可能規(guī)范整個數(shù)倉體系的建設(shè),模型的設(shè)計必須在平臺上完成,并且平臺能夠?qū)@兩層模型進行持續(xù)規(guī)范化掃描和監(jiān)控,防范指標(biāo)模型體系的快速腐化。

后面兩層則完全由平臺進行設(shè)計,基于指標(biāo)之間的關(guān)聯(lián)派生關(guān)系,黑盒形式實現(xiàn)數(shù)據(jù)的計算可以從源頭保障指標(biāo)口徑統(tǒng)一、數(shù)據(jù)質(zhì)量穩(wěn)定。減少開發(fā)工作量、降低變更的復(fù)雜性,達到指標(biāo)可定位、可管理、可追溯,并且可控制。整個數(shù)倉體系的指標(biāo)實現(xiàn)“定義即實現(xiàn),所見即所得”是本平臺建設(shè)的最終目標(biāo)。

我們還實現(xiàn)了一個指標(biāo)匯總代碼生成引擎,支持并抽象了嚴(yán)選離線數(shù)倉幾乎所有常用的指標(biāo)計算場景。主要包括9步:首先是找到派生指標(biāo)依賴的原子指標(biāo),綁定底層模型,根據(jù)派生詞拼接匯總時的過濾條件,然后根據(jù)指標(biāo)匯總方法拼接聚合函數(shù),根據(jù)維度關(guān)聯(lián)相應(yīng)維度表,再從維度表中獲取維度屬性,接著是根據(jù)取數(shù)范圍拼接取數(shù)的時間周期條件,根據(jù)模型粒度拼接分組條件,最后根據(jù)回刷周期拼接目標(biāo)分區(qū)。

這是我們系統(tǒng)自動生成的匯總代碼的一個demo,里面每一部分都能體現(xiàn)出前面描述的流程。

模型的發(fā)布、更新和運維是指標(biāo)數(shù)據(jù)真正落地的過程,通過對接嚴(yán)選大數(shù)據(jù)體系的其它相關(guān)產(chǎn)品如離線開發(fā)平臺、實時開發(fā)平臺、數(shù)據(jù)質(zhì)量平臺等實現(xiàn)。

上圖是產(chǎn)品設(shè)計的一個demo,對模型的發(fā)布、更新和運維完全實現(xiàn)了黑盒化。這樣做的好處一方面是大大降低了數(shù)據(jù)開發(fā)人工操作的工作量,他們只需要在平臺上直接點發(fā)布,就可以完成一整套流程;另一方面也可以避免數(shù)據(jù)質(zhì)量以及時效性、產(chǎn)出效率等方面的問題。

網(wǎng)易嚴(yán)選已有一個相對比較完整和成熟的數(shù)據(jù)服務(wù)平臺,所以我們就直接對接即可實現(xiàn)數(shù)據(jù)的對外服務(wù)。我們通過規(guī)范化的指標(biāo)和模型的定義,生成標(biāo)準(zhǔn)的數(shù)據(jù)服務(wù)的查詢代碼,形成了代碼的模板化構(gòu)建,減少了人工干預(yù),為下游數(shù)據(jù)使用規(guī)范化進行了約束。

四、成果和總結(jié)1、取得效果

最后做一個成果總結(jié),現(xiàn)在我們這個平臺在模型指標(biāo)的定義和設(shè)計規(guī)范化,以及模型的自動化構(gòu)建這兩塊已經(jīng)全面落地。一方面是增量的指標(biāo)模型,已經(jīng)實現(xiàn)完全的規(guī)范化,對于存量的指標(biāo)模型正在逐步進行切換。另一方面由于DWS匯總層以及DM層的自動化構(gòu)建能力的交付,使得模型的開發(fā)效率、業(yè)務(wù)需求的交付效率都有了大幅提升。

2、業(yè)務(wù)價值

我們的產(chǎn)品最重要的價值是解決了指標(biāo)口徑不一致的核心問題,對于數(shù)據(jù)的設(shè)計、生產(chǎn)、使用、維護治理都形成統(tǒng)一的視角,達到了降本增效的目的。

在整個實施過程中,比較重要的一點就是我們一直在探索規(guī)范性和靈活性之間的平衡點,有些規(guī)范定的太死可能會導(dǎo)致需求不能滿足,即數(shù)倉建模一些現(xiàn)有的場景可能無法滿足;但是太靈活又可能會導(dǎo)致逐漸腐化的后果。所以其間的平衡是很重要的一項工作。

關(guān)鍵詞:
最新動態(tài)
相關(guān)文章
數(shù)倉建模平臺在網(wǎng)易嚴(yán)選的探索實踐
阿聯(lián)酋金主身份被起低,恒大汽車5億美金...
中國建筑材料流通協(xié)會:7月全國建材家居...
2023江蘇南京審計大學(xué)教學(xué)科研崗招聘擬...
成都兒童???城北分院)怎么樣?當(dāng)家醫(yī)...
香港黨派制度(香港黨派)