 數(shù)字經(jīng)濟的快速發(fā)展,給企業(yè)的經(jīng)營帶來了新的機遇和挑戰(zhàn),如何有效開展數(shù)據(jù)治理,打破數(shù)據(jù)孤島,充分發(fā)揮數(shù)據(jù)的業(yè)務價值,保護數(shù)據(jù)安全,已成為業(yè)界的熱門話題。本文基于美團配送數(shù)據(jù)治理的歷程,分享了數(shù)據(jù)定義、模型設計、數(shù)據(jù)生產(chǎn)三環(huán)節(jié)統(tǒng)一的配送數(shù)據(jù)“底座”的建設與實踐。1 前言 2 什么是體系化建模 3 為什么要進行體系化建模 4 如何進行體系化建模 4.1 高層模型設計 4.2 詳細模型設計 4.3 上線前卡點
5 總結(jié)
1 前言本文基于美團配送數(shù)據(jù)治理的歷程,重點和大家分享一下配送數(shù)據(jù)“底座”的建設與實踐,如何通過體系化建模建立起數(shù)據(jù)定義到數(shù)據(jù)生產(chǎn)的橋梁,達成數(shù)據(jù)定義、模型設計、數(shù)據(jù)生產(chǎn)三個環(huán)節(jié)的統(tǒng)一,消除因數(shù)據(jù)標準缺失和執(zhí)行不到位引發(fā)的數(shù)據(jù)信任問題,在高質(zhì)量地實現(xiàn)數(shù)據(jù)到信息的轉(zhuǎn)化的同時,為后續(xù)的數(shù)據(jù)便捷消費提供數(shù)據(jù)和元數(shù)據(jù)保障。希望能給從事數(shù)據(jù)治理方向的同學在實現(xiàn)數(shù)據(jù)到資產(chǎn)的轉(zhuǎn)化過程提供一些參考和借鑒。2 什么是體系化建模體系化建模是以維度建模為理論基礎,以事前治理的理念驅(qū)動,讓元數(shù)據(jù)貫穿其中的建模流程,上承指標、維度的定義,下接實際的數(shù)據(jù)生產(chǎn)。首先,通過高層模型設計,將業(yè)務指標結(jié)構(gòu)化拆解為原子指標/計算指標+限定條件的組合方式,并將其歸屬到特定的業(yè)務過程和主題下,完成業(yè)務指標的計劃化定義;其次,基于高層模型設計自動生產(chǎn)詳細的物理模型設計;第三,基于產(chǎn)生的物理模型設計,半自動或自動地生成數(shù)據(jù)加工邏輯,以確保最終的業(yè)務定義和物理實現(xiàn)的統(tǒng)一。具體如下圖1所示: 圖1 體系化建模概述 從對體系化建模的定義來看,它強調(diào)了兩個統(tǒng)一,即數(shù)據(jù)需求與模型設計的統(tǒng)一和模型設計與物理實現(xiàn)的統(tǒng)一。數(shù)據(jù)需求與模型設計的統(tǒng)一,模型設計是倉庫領域劃分和具體需求相結(jié)合的產(chǎn)物。倉庫領域劃分是對數(shù)據(jù)進行基于業(yè)務本身但超越和脫離業(yè)務需求限制的抽象,對數(shù)據(jù)完成主題、業(yè)務過程的抽象,作為業(yè)務指標、維度需求歸屬和實現(xiàn)數(shù)據(jù)建設高內(nèi)聚、低耦合的重要依據(jù);具體的需求模型設計,是在倉庫領域劃分基礎上的內(nèi)容填充,將需求以指標、維度的形式歸屬到對應的主題與業(yè)務過程,以此驅(qū)動和約束具體詳細模型設計,勾勒出寶貴的信息架構(gòu)資產(chǎn)。模型設計與物理實現(xiàn)的統(tǒng)一,基于模型設計環(huán)節(jié)沉淀的信息架構(gòu)元數(shù)據(jù),以此來驅(qū)動和約束實際的物理模型,約束對應物理模型的DDL,在數(shù)據(jù)加工時,防止因缺乏有效約束帶來的“煙囪式”開發(fā),是模型上線前,自動完成業(yè)務定義與物理實現(xiàn)一致性驗證,確保DML實現(xiàn)的正確性。3 為什么要進行體系化建模此前一段時期,配送數(shù)據(jù)建設存在著需求管理(指標、維度)、模型設計、模型開發(fā)相互割裂不統(tǒng)一的現(xiàn)象,數(shù)據(jù)架構(gòu)規(guī)范無法進行實質(zhì)、有效的管理,元數(shù)據(jù)(指標、維度、模型設計)與實際物理模型割裂、不匹配,造成各種數(shù)據(jù)資產(chǎn)信息缺失。而且由于缺乏系統(tǒng)抓手,無法完全規(guī)范研發(fā)的模型設計質(zhì)量,導致部分需求直接進行了數(shù)據(jù)開發(fā),引起惡化模型建設質(zhì)量的問題。這種缺乏規(guī)范和約束帶來的“煙囪式”開發(fā),在浪費技術資源的同時造成數(shù)據(jù)重復且不可信。配送體系化建模切入點是:以規(guī)范“基礎數(shù)據(jù)建設”,消除因“煙囪式”開發(fā)給業(yè)務帶來的困擾和技術上的浪費。3.1 體系化建??梢詫?shù)據(jù)架構(gòu)進行實質(zhì)有效的管理,從源頭消除“煙囪式”開發(fā)體系化建模不僅可以在工具上實現(xiàn)一體化設計和開發(fā),而且能在機制上形成模型設計與開發(fā)實施的有效協(xié)同。以需求驅(qū)動模型設計,以模型設計驅(qū)動和約束開發(fā)實施,防止因模型設計與開發(fā)實施割裂、開發(fā)實施缺少約束帶來的無序、“煙囪式”開發(fā)。3.2 體系化建模沉淀的規(guī)范元數(shù)據(jù),可以有效消除業(yè)務在檢索和理解數(shù)據(jù)時的困擾體系化建模不但將原先割裂的數(shù)據(jù)規(guī)范定義、模型設計以及最終的物理模型實現(xiàn)連接在一起,而且以元數(shù)據(jù)的形式將數(shù)據(jù)資產(chǎn)的刻畫沉淀了下來,每個指標不僅有規(guī)范的業(yè)務定義和清晰的加工口徑,而且還可以映射到對應的物理表上,有效地消除了業(yè)務在檢索和理解數(shù)據(jù)時的困擾。4 如何進行體系化建模實現(xiàn)體系化建模要從源頭開始,將數(shù)據(jù)規(guī)范定義、數(shù)據(jù)模型設計和ETL開發(fā)鏈接在一起,以實現(xiàn)“設計即開發(fā),所建即所得”。整體策略是從源頭開始,先在需求層面解決指標定義的問題,然后依次約束和驅(qū)動模型設計進而約束數(shù)據(jù)加工,將產(chǎn)生于線上業(yè)務流程各環(huán)節(jié)的數(shù)據(jù)進行領域化抽象,并實現(xiàn)業(yè)務規(guī)則的數(shù)字化,完成“物理世界”的數(shù)字孿生,形成“數(shù)字世界”。在工具層面實現(xiàn)基于需求的一體化設計和開發(fā),在機制上形成模型設計與數(shù)據(jù)開發(fā)的有效協(xié)同。
圖2 體系化建模思路 體系化建模不僅在工具上基于需求實現(xiàn)一體化設計和開發(fā),而且在機制上形成模型設計與數(shù)據(jù)加工的有效協(xié)同。首先,基于數(shù)倉規(guī)劃,將業(yè)務提的指標、維度映射到對應的主題、業(yè)務過程,然后基于數(shù)據(jù)定義標準,對業(yè)務指標進行結(jié)構(gòu)化拆解,實現(xiàn)指標的技術定義,完成高層模型設計;其次,基于高層模型設計環(huán)節(jié)沉淀的元數(shù)據(jù),驅(qū)動和約束最終的物理模型設計,為后續(xù)的數(shù)據(jù)加工確定最終的DDL,完成物理模型設計,以此來約束后續(xù)的數(shù)據(jù)開發(fā)。 圖3 體系化建模流程
4.1 高層模型設計一線的數(shù)據(jù)需求都是以指標和維度的形式提給數(shù)據(jù)工程師的,數(shù)據(jù)工程師首先要根據(jù)拿到的指標需求確定要分析的業(yè)務過程,完成業(yè)務過程的劃分和定義,同時將指標歸屬到對應的業(yè)務過程下;其次,根據(jù)指標的業(yè)務口徑,將業(yè)務指標拆分成原子指標+限定條件+時間周期或計算指標+限定條件+時間周期形式,完成指標的技術定義;第三,綜合各方分析視角,完成該業(yè)務過程一致維度的設計,多個業(yè)務過程一致性維度的設計構(gòu)成該主題下的總線矩陣。上述高層模型設計,涉及兩個環(huán)節(jié)。第一,通過業(yè)務抽象完成領域模型劃分,我們基于業(yè)務的實際流程來劃分業(yè)務過程,并按照分析領域完成業(yè)務過程的歸屬。在特定的業(yè)務下,分析領域和對應的業(yè)務流程不會隨著分析需求的變化而變化,領域劃分也不會隨著分析需求的變化而變化,可以基于此劃分,構(gòu)建穩(wěn)定的資產(chǎn)目錄。第二,通過完成業(yè)務指標的技術定義并將其歸屬到特定的業(yè)務過程下,以及確定特定業(yè)務過程的分析維度完成邏輯建模。邏輯建模進一步勾勒出了在特定的分析領域和業(yè)務過程下,具體的分析度量和分析維度,完成最終的高層模型設計,高層模型的設計決定了在特定的分析域和分析業(yè)務過程下的具體物理產(chǎn)出。 圖4 高層模型設計更具體的講,確定業(yè)務過程下的分析度量需要完成業(yè)務指標的技術定義,并將其歸屬到特定的業(yè)務過程下。在這一步中,我們從技術角度對業(yè)務指標產(chǎn)出了結(jié)構(gòu)化的技術定義,形成了一套結(jié)構(gòu)化指標體系。一方面結(jié)構(gòu)化定義容易統(tǒng)一并形成標準,避免全文字描述帶來理解上的歧義,另一方面結(jié)構(gòu)化的定義有助于系統(tǒng)來保障其一致性,解決靠人工來保障一致性難以實施的難題。我們的結(jié)構(gòu)化指標方案將指標分為:原子指標、計算指標和衍生指標,并針對這三類指標做了如下明確的定義: 原子指標:指在某一業(yè)務過程下不可再拆分的指標,具有明確業(yè)務含義的名詞。在物理實現(xiàn)上,它是特定業(yè)務過程下業(yè)務實體字段加特定聚合算子的組合。 計算指標:由原子指標與限定條件組合并經(jīng)過加減乘除四則運算得到的指標。計算指標有明確的計算公式作為計算指標的定義,可以與多個限定條件進行組合。對于計算指標的歸屬,我們遵循2個原則①由于原子指標都能歸屬到相應的業(yè)務過程,業(yè)務過程一般來說都有時間前后順序,將計算指標歸屬到順序靠后的業(yè)務過程中;②如果涉及到多個業(yè)務過程,同時這些業(yè)務過程沒有時間的先后順序,這種情況下需要判斷指標描述內(nèi)容與主題業(yè)務過程的相關性,然后再歸屬到對應的業(yè)務過程。在物理實現(xiàn)上,計算指標可以由其定義的計算公式直接自動的生成其實現(xiàn)邏輯。 衍生指標:由 “時間周期+多個限定條件+原子指標/計算指標” 組成的指標。由于衍生指標是由原子指標/計算指標衍生出來的,所以衍生指標需要歸屬到原子指標/計算指標所屬的業(yè)務過程。 限定條件:限定條件是指標業(yè)務口徑的一個邏輯封裝,時間周期也可以算作一類特殊的限定條件,是衍生指標必須包含的。在物理實現(xiàn)上我們將其加工成衍生事實的一個邏輯標簽。
在這樣的定義后,衍生指標便清晰地分為原子衍生指標和計算衍生指標兩類,都可以比較容易地通過結(jié)構(gòu)化的方式半自動生成定義和實現(xiàn)。衍生指標覆蓋了用戶生成報表等數(shù)據(jù)產(chǎn)品的所有指標,而原子指標和計算指標作為指標體系的核心內(nèi)容不直接提供給用戶使用。在指標的實現(xiàn)方式上也容易明確,原子指標和計算指標的邏輯盡量下沉在基礎事實層中,而衍生指標在中間層和應用層根據(jù)需求實現(xiàn)。 4.2 詳細模型設計詳細模型設計是將高層模型設計轉(zhuǎn)化為實際物理生產(chǎn)的橋梁,詳細模型設計必須結(jié)合數(shù)據(jù)的生產(chǎn)流程,給出與其分層模型相匹配的實際物理模型。根據(jù)數(shù)倉不同分層間的職責邊界,詳細模型設計又呈現(xiàn)出不同特點。 具體說來,需要數(shù)據(jù)工程師結(jié)合業(yè)務需求,對應的邏輯建模產(chǎn)出的DDL完成最終物理模型的加工生產(chǎn),這是我們詳細模型設計的核心。對于中間層匯總模型,是為提高查詢性能,基于明細模型進行預計算的過程,不涉及任務業(yè)務口徑的加工,只要元數(shù)據(jù)定義清晰,完全可以通過工具實現(xiàn)“TEXT2SQL”進而實現(xiàn)配置化生產(chǎn)。我們的工程師只需要關注基建層的開發(fā),中間和應用層建設交給工具完成,節(jié)省了大量的時間和精力。在展開詳細模型設計之前,我們先介紹一下數(shù)倉分層,然后通過數(shù)據(jù)分層來介紹與之匹配的詳細模型設計。 4.2.1 數(shù)倉分層簡介按照整個數(shù)據(jù)生產(chǎn)的流轉(zhuǎn)鏈路看,數(shù)據(jù)會經(jīng)歷產(chǎn)生、接入、加工到最后的消費,數(shù)倉的建設主要集中在數(shù)據(jù)的接入和加工環(huán)節(jié)。數(shù)據(jù)的接入包含數(shù)據(jù)的獲取和清洗兩個過程,通過該過程完成了數(shù)據(jù)從業(yè)務系統(tǒng)到倉庫的流轉(zhuǎn),為后續(xù)基于分析場景的數(shù)據(jù)建模提供了原始數(shù)據(jù),我們將該過程產(chǎn)生的數(shù)據(jù)定義為準備區(qū)數(shù)據(jù),該過程基本通過工具實現(xiàn)了自動化,不需要太多的人為參與和設計。另一過程,為了支持用戶、報表制作者以及其他BI應用的查詢,我們需要為用戶提供開放區(qū)數(shù)據(jù),目前采取維度建模和倉庫分層理論,通過星型明細模型+多維匯總模型的方式分別滿足用戶固定的在線分析,以及無法預期的、隨意查詢的即席分析訴求。該區(qū)域是數(shù)據(jù)工程師整體工作的核心,可以利用在線建模沉淀的元數(shù)據(jù),輔助我們完成數(shù)據(jù)生產(chǎn)的提效和提質(zhì)。在數(shù)據(jù)準備區(qū),我們將數(shù)據(jù)模型分為基礎明細層(B3)、中間匯總層(B2、B1)來支撐不同場景的數(shù)據(jù)需求。 圖5 數(shù)據(jù)分層模型
4.2.2 元數(shù)據(jù)驅(qū)動的詳細模型設計設計理念 元數(shù)據(jù)驅(qū)動的詳細模型設計,是基于高層模型設計產(chǎn)出的邏輯模型,進而來驅(qū)動和約束后續(xù)要加工的物理模型DDL,大致分成三步:第一,確定物理模型名稱;第二,基于模型歸屬自動生成基礎事實,基于需求確定衍生事實,完成事實確定;第三,基于總線矩陣,確定模型一致性維度。 每一步具體操作的內(nèi)容因模型所屬的倉庫分層不同而有所區(qū)別。對于中間匯總層而言,只是在基礎模型基礎上的多維上卷,基礎模型確定以后,人工通過簡單的指標拖拽,就可以自動生產(chǎn)DDL而且可以自動生產(chǎn)DML,相對較簡單,在此不做詳述。接下來,我們重點描述一下基礎事實層的詳細模型設計,具體如下圖所示:  圖6 詳細模型設計第一步,根據(jù)模型的出處確定模型名稱,經(jīng)過此處,不僅規(guī)范了模型命名,而且在數(shù)據(jù)生產(chǎn)前自動實現(xiàn)了資產(chǎn)掛載,方便了后續(xù)數(shù)據(jù)的管理和運營;第二步,根據(jù)第一步的模型掛載,約束并確定該模型要生產(chǎn)的事實,即該模型所包含的基礎事實字段由對應業(yè)務過程下的快照表決定,自動生產(chǎn)基礎事實字段,該模型所包含的衍生事實由由對應業(yè)務過程下的衍生指標所需的限定條件決定,確保了需求、模型設計、物理實現(xiàn)三者的統(tǒng)一。 通過該過程,我們約束了實際生產(chǎn)環(huán)節(jié)物理模型的隨意加工,從源頭消除了“煙囪式”開發(fā)帶來的冗余。通過元數(shù)據(jù)約束了對應主題應該生產(chǎn)哪些事實,從源頭防止了邊界不清帶來的交叉耦合問題,保障了最終物理模型的高內(nèi)聚、低耦合。  圖7 元數(shù)據(jù)驅(qū)動的模型設計從源頭消除煙囪式開發(fā) 第三步,基于總線矩陣確定物理模型的一致性維度,不是基于需求來添加維度,后期如果因需求變動而頻繁調(diào)整基礎模型,這樣會導致基礎模型復用性差,而是在模型生產(chǎn)之初,一次性完成維度的設計和生產(chǎn),以提升模型的穩(wěn)定性和復用性。 圖8 采用總線矩陣約束模型保障模型復用性和穩(wěn)定性 在闡述了詳細模型設計的理念和約束后,我們再詳細看一下在具體產(chǎn)品層面是如何實現(xiàn)的。詳細模型設計就是基于上一階段的高層模型設計和物理建模的基本原則,采用系統(tǒng)化的方式引導數(shù)據(jù)工程師按照標準的流程完成對應的物理模型設計,以最終產(chǎn)出的DDL作為該環(huán)節(jié)的交付物,指導數(shù)據(jù)工程師在生產(chǎn)環(huán)節(jié),完成最終的DML編寫。這個環(huán)節(jié)除了輔助數(shù)據(jù)工程師完成規(guī)范化的模型設計外,還通過物理模型完備了上下文描述,包括完成了物理表與資產(chǎn)目錄的映射關系、物理字段與指標維度的映射關系,為后續(xù)資產(chǎn)消費環(huán)節(jié)提供了完備的基礎元數(shù)據(jù)。按照物理模型設計最終的交付物來看,它的設計流程主要包括兩部分:第一,按照規(guī)范和標準,確定物理模型的名稱;第二,按照規(guī)范和標準,確定物理模型的數(shù)據(jù)字典。- 通過確定所建物理模型對應的數(shù)倉層級、主題域和業(yè)務過程,自動生成該物理表的名稱。
 圖9 詳細模型設計之確定物理表的名稱和資產(chǎn)歸屬
- 基于高層模型設計環(huán)節(jié)確定的分析度量和維度,自動生成物理表對應的數(shù)據(jù)字典,確保模型設計與最終物理落地的一致性,從源頭杜絕不規(guī)范的開發(fā)。
 圖10 詳細模型設計之確定物理表的字段信息并完成指標、維度與字段的映射
4.3 上線前卡點高層模型設計和詳細模型設計約束和規(guī)范了數(shù)據(jù)工程師如何確定一個模型的DDL,對于如何約束和保證實際的加工邏輯(模型的DML)和業(yè)務定義保持一致,并沒有與之匹配的約束卡點。上線前卡點就是利用高層模型和詳細模型設計這兩個環(huán)節(jié)產(chǎn)生的元數(shù)據(jù),通過自動化的方式來完成DML與業(yè)務定義的一致性驗證,消除人工驗證帶來的成本問題。具體卡點驗證包括四類:- 相同指標不同出處的數(shù)據(jù)一致性驗證,將來自不同出處的相同指標上卷到相同維度,它們具有相同的數(shù)值;
- 業(yè)務定義與具體實現(xiàn)的一致性驗證,此類驗證主要針對碼值類字段,具體數(shù)值必須與其對應的業(yè)務定義一致;
- 研發(fā)合規(guī)的約束類驗證,例如,主鍵必須唯一、全表掃描、代碼流程分支覆蓋(T+1重導、批量重導、全量重導);
- 變更時的級聯(lián)影響,包括下游的生產(chǎn)任務影響和消費任務影響。
5 總結(jié)體系化建模是配送數(shù)據(jù)團隊圍繞著數(shù)據(jù)資產(chǎn)化建設“提質(zhì)降本和數(shù)據(jù)應用提效”這一目標孵化的產(chǎn)物,本著將標準流程工具化的思路,我們通過工具來約束和規(guī)范數(shù)據(jù)工程師的生產(chǎn),力圖將模型的規(guī)范化治理做到事前,避免重蹈業(yè)務快速發(fā)展階段“先建設后治理”的覆轍。在模型提質(zhì)方面,我們實現(xiàn)了高層模型設計、物理模型設計的統(tǒng)一以及業(yè)務定義與物理實現(xiàn)的統(tǒng)一,而且在提效方面,在線建模通過系統(tǒng)的方式為我們沉淀了寶貴的元數(shù)據(jù),是我們后續(xù)基于元數(shù)據(jù)進行應用提效的關鍵。① 體系化建模,搭建起了數(shù)據(jù)定義到生產(chǎn)的橋梁,實現(xiàn)數(shù)據(jù)到信息的轉(zhuǎn)化,提供了完備的流程保障,并在配送內(nèi)部實現(xiàn)了涉及10多個主題、180多個原子指標、300多個計算指標和90多個衍生指標的統(tǒng)一。 圖11 數(shù)據(jù)定義、生產(chǎn)、加工全流程統(tǒng)一在美團內(nèi)部,涉及配送交易、履約等核心主題的規(guī)范性建設方面治理評分均取得了優(yōu)秀的成績,特別是在指標完整性建設得分和物理模型維度完整性得分方面,均取得90分以上優(yōu)秀成績。 圖12 健康的主題得分② 得益于體系化建模實現(xiàn)的元數(shù)據(jù)和數(shù)據(jù)的統(tǒng)一,我們實現(xiàn)了數(shù)據(jù)建設從“保姆”模式到“服務+自助”模式的轉(zhuǎn)變。在數(shù)據(jù)檢索方面,得益于體系化建模沉淀的高質(zhì)量元數(shù)據(jù),我們構(gòu)建了數(shù)據(jù)地圖,解決了數(shù)據(jù)“可搜索/可獲取”問題,并在檢索內(nèi)容方面實現(xiàn)了所建即所得。 圖13 數(shù)據(jù)可檢索在數(shù)據(jù)消費方面,得益于體系化建模沉淀的高質(zhì)量元數(shù)據(jù),我們實現(xiàn)了“服務+自助”的數(shù)據(jù)服務模式,不僅消除了傳統(tǒng)報表開發(fā)完全依賴產(chǎn)研帶來的開發(fā)流程長、需求響應慢、覆蓋用戶少等問題,而且解決了無法“零SQL”即席分析的難題,滿足了業(yè)務人員通過“拖、拉、拽”即可快速產(chǎn)生分析報告的訴求。 圖14 按需自由組裝指標獲取數(shù)據(jù)目前,該模式廣泛應用于所有業(yè)務大區(qū)”零SQL“數(shù)據(jù)運營人員早報、周報、季度述職等業(yè)務場景,得益于上述模式,不僅得到了一線人員廣泛好評,而且也將我們的數(shù)據(jù)RD從“取數(shù)”、“跑數(shù)”的繁重工作中解脫出來。 作者簡介:王鵬、新興、曉飛,均來自美團配送事業(yè)部數(shù)據(jù)團隊。
|