螞蟻指標(biāo)系統(tǒng)的設(shè)計(jì)與實(shí)踐

本次分享人為螞蟻集團(tuán)的王高航老師,分享題目為螞蟻指標(biāo)系統(tǒng)的設(shè)計(jì)與實(shí)踐,王高航老師自 2016 年加入螞蟻集團(tuán)以來,一直在數(shù)據(jù)中臺(tái)領(lǐng)域深耕。在此期間,參與了螞蟻新老兩代數(shù)據(jù)平臺(tái)的研發(fā)并主導(dǎo)了多個(gè)核心子產(chǎn)品。目前,王高航老師負(fù)責(zé)螞蟻數(shù)據(jù)中臺(tái)的數(shù)據(jù)架構(gòu)與治理、數(shù)據(jù)建模、資產(chǎn)管理、安全合規(guī)等產(chǎn)品的研發(fā)。
一、指標(biāo)系統(tǒng)的問題定義
1、什么是指標(biāo)系統(tǒng)

首先需要明確什么是指標(biāo)。從統(tǒng)計(jì)學(xué)角度看,指標(biāo)是綜合體現(xiàn)總體數(shù)量特征的概念和數(shù)值。在數(shù)據(jù)倉庫體系中,指標(biāo)是其核心產(chǎn)物,它是信息層面的一種載體。從 DIKW 模型的角度分析,指標(biāo)必須滿足一些基本要求,包括準(zhǔn)確性、完整性、及時(shí)性和一致性。
另一方面,系統(tǒng)是由若干相互作用、相互依賴的組成部分構(gòu)成的,具有特定功能的有機(jī)整體。這里的核心概念是“有機(jī)”,因?yàn)橹笜?biāo)并不是一個(gè)孤立的技術(shù),而是與人有著非常緊密的互動(dòng),構(gòu)成了一個(gè)有機(jī)的整體。
指標(biāo)系統(tǒng)包括三個(gè)層次:
- 首先,概念層,它是公司核心概念的載體,如交易額和日活用戶等,雖然高度抽象,但對(duì)于整個(gè)系統(tǒng)來說至關(guān)重要。
- 在確立了概念之后,為了確保其權(quán)威性和持續(xù)性,需要建立一套與之配套的流程機(jī)制,這是第二層。這一層的作用是確保概念能夠得到有效地實(shí)施和推廣,為公司的業(yè)務(wù)發(fā)展提供有力的支撐。
- 最后,第三層是產(chǎn)品化的載體,通常是一個(gè)內(nèi)容型產(chǎn)品,如指標(biāo)平臺(tái)或指標(biāo)中臺(tái)。第三層雖然重要,但在實(shí)踐中發(fā)現(xiàn),許多平臺(tái)過于強(qiáng)調(diào)這一層,而忽略了上面兩層的重要性。實(shí)際上,對(duì)于指標(biāo)中臺(tái)或指標(biāo)系統(tǒng)來說,最重要的是上面兩層,尤其是第一層。如果沒有前兩層的基礎(chǔ),僅靠產(chǎn)品化載體是很難實(shí)現(xiàn)其持續(xù)發(fā)揮效果的。
2、指標(biāo)系統(tǒng)的常見問題

(1)在概念層面
我們面臨的主要是二義性的問題。具體來說,是同名不同義、同義不同名、或者指標(biāo)間值沖突的情況。為了解決這些問題,需要對(duì)各個(gè)領(lǐng)域的概念達(dá)成共識(shí)。
(2)在流程機(jī)制層面
需要關(guān)注的是如何確保指標(biāo)的持續(xù)保鮮和有效迭代。盡管在短期內(nèi)研發(fā)一批指標(biāo)相對(duì)容易,但長期保持這些指標(biāo)的活力和有效性卻非常有挑戰(zhàn)性。為了解決這一問題,我們需要從機(jī)制和流程的角度出發(fā),建立相應(yīng)的保障措施,以確保指標(biāo)的持續(xù)優(yōu)化和更新。
(3)在產(chǎn)品層面
主要解決的是效率問題。這包括指標(biāo)定義、研發(fā)運(yùn)維以及進(jìn)一步下鉆分析的效率。為了提升效率,我們需要對(duì)相關(guān)結(jié)構(gòu)進(jìn)行優(yōu)化,并借助人工智能技術(shù)進(jìn)行輔助,提高指標(biāo)工具和平臺(tái)的使用效果,降低不必要的成本和時(shí)間消耗。
綜上,我們需要在概念、流程機(jī)制和產(chǎn)品三個(gè)層面上分別解決二義性、持續(xù)保鮮和效率問題。通過共識(shí)領(lǐng)域概念、設(shè)計(jì)流程機(jī)制、核心結(jié)構(gòu)優(yōu)化及人工智能輔助等手段,更好地應(yīng)對(duì)這些挑戰(zhàn),提升指標(biāo)系統(tǒng)的有效性和應(yīng)用價(jià)值。
二、指標(biāo)系統(tǒng)設(shè)計(jì)
1、如何進(jìn)行概念共識(shí)
接下來介紹如何構(gòu)建指標(biāo)系統(tǒng)。首先從第一層開始,即概念共識(shí)。概念共識(shí)是整個(gè)指標(biāo)系統(tǒng)的基石,沒有概念共識(shí)整個(gè)指標(biāo)系統(tǒng)只是一個(gè)空中樓閣,只能在短期、局部發(fā)布有限的價(jià)值。下面我們展開介紹一下如何進(jìn)行概念共識(shí)。

(1)共識(shí)的模式
一是通過 BI 驅(qū)動(dòng)的方式。因?yàn)?BI 是連接業(yè)務(wù)和數(shù)據(jù)工程師的橋梁,能夠在實(shí)際溝通交流中進(jìn)行一些抽象和翻譯,從而形成完整的指標(biāo)體系。
另一種方式是由數(shù)據(jù)架構(gòu)師驅(qū)動(dòng)。因?yàn)樗麄冏鳛閿?shù)據(jù)工程師的代表,對(duì)整個(gè)領(lǐng)域有更深入的認(rèn)識(shí),能夠進(jìn)行全局的抽象和概念定義。
對(duì)于無法實(shí)現(xiàn)全成員共識(shí)的情況,就只能在角色內(nèi)部共識(shí),然后在交互的時(shí)候進(jìn)行語言的翻譯,翻譯的工作可以由數(shù)據(jù)工程師或 BI 來完成。
(2)關(guān)于共識(shí)范圍的問題
不能期待所有成員都能達(dá)成共識(shí),特別是在一個(gè)比較大的組織內(nèi)。因此,共識(shí)的范圍需要根據(jù)具體情況進(jìn)行劃分??梢酝ㄟ^組織架構(gòu)視角、業(yè)務(wù)領(lǐng)域視角或消費(fèi)場(chǎng)景視角來實(shí)現(xiàn)。例如,按公司級(jí)、部門級(jí)或團(tuán)隊(duì)級(jí)進(jìn)行劃分,或者基于業(yè)務(wù)領(lǐng)域抽象進(jìn)行范圍劃分。或者,也可以根據(jù)具體的消費(fèi)場(chǎng)景來決定共識(shí)的范圍。
在選擇共識(shí)模式和范圍時(shí),沒有絕對(duì)的標(biāo)準(zhǔn),需要考慮各種因素。如全成員共識(shí)的優(yōu)點(diǎn)是共識(shí)程度高,但難度也較大,對(duì)于核心角色的能力要求很高;角色內(nèi)部共識(shí)的難度較低,但效果相對(duì)較差;按組織架構(gòu)視角共識(shí)的難度較低,但穩(wěn)定性較差;按業(yè)務(wù)領(lǐng)域共識(shí)的穩(wěn)定性較好,但難度較高;按消費(fèi)場(chǎng)景共識(shí)的靈活性高,但共識(shí)程度較低。
經(jīng)過探索與實(shí)踐,在螞蟻內(nèi)部,核心指標(biāo)主要按照業(yè)務(wù)領(lǐng)域進(jìn)行范圍劃分,并在領(lǐng)域內(nèi)實(shí)現(xiàn)全成員的共識(shí)的方式。這樣既可以保證共識(shí)程度,也能保證其穩(wěn)定性。
2、指標(biāo)語義層的位置

指標(biāo)是業(yè)務(wù)語義的核心載體,在架構(gòu)層面語義層有三種不同的方式。
(1)第一種是將語義層與數(shù)據(jù)層融合
即直接在數(shù)倉中定義語義層。這種方式的好處是前期實(shí)施成本較低,只需要將已有的表、視圖等進(jìn)行相應(yīng)的調(diào)整即可。此外,由于數(shù)據(jù)通常由獨(dú)立的數(shù)據(jù)團(tuán)隊(duì)集中管理,因此具有組織保障。然而,這種方式的缺點(diǎn)也很明顯,主要表現(xiàn)在敏捷性不足。由于是集中式團(tuán)隊(duì)作業(yè),只能由數(shù)據(jù)同學(xué)進(jìn)行定義,可能會(huì)缺乏業(yè)務(wù)輸入和全局視角,導(dǎo)致理解成本相對(duì)較高。此外,由于語義層與物理層過度耦合,訪問性能和靈活性會(huì)受到一定限制。
(2)第二種方式是將數(shù)據(jù)獨(dú)立于數(shù)據(jù)倉庫層
把語義層單獨(dú)抽出來成為獨(dú)立的一個(gè)產(chǎn)品。這種方式的好處在于邏輯層與物理層的解耦,可以統(tǒng)一數(shù)據(jù)的訪問模型,支持各種湖倉的場(chǎng)景,并通過自動(dòng)優(yōu)化提高性能。由于是獨(dú)立出來的,因此業(yè)務(wù)理解和維護(hù)成本相對(duì)較低,BI 等人員也有共同參與構(gòu)建的可能性。此外,集中式管理使得治理程度較好,可以減少一些二義性的問題。然而,這種方式的缺點(diǎn)在于前期成本較高,需要獨(dú)立抽取這一層,同時(shí)復(fù)雜性也相對(duì)較高。
(3)第三種方式是集成在數(shù)據(jù)的消費(fèi)工具中
這種方式的好處在于高度的靈活性和敏捷性。然而,由于各自分散,很難實(shí)現(xiàn)一致性,且跨平臺(tái)工具難以復(fù)制和復(fù)用。因?yàn)檫@一層會(huì)有很多貼近消費(fèi)的特殊優(yōu)化,對(duì)于其他工具來說很難復(fù)用。
這三種方式?jīng)]有絕對(duì)的好壞之分,應(yīng)根據(jù)公司的具體情況而定。根據(jù)模式定義和傾向性,如果只是角色內(nèi)部控制,可以選擇第一種和第三種方式;如果是全成員共識(shí),第二種方式可能更加適合;如果按組織架構(gòu)共識(shí),第一種方式較為合適;如果是業(yè)務(wù)領(lǐng)域共識(shí),獨(dú)立于一層的方式更好;如果是按消費(fèi)場(chǎng)景共識(shí),則應(yīng)選擇第三種方式。
3、構(gòu)建概念共識(shí)

為了構(gòu)建這個(gè)概念共識(shí),需要借助一些工具或方法論作為支撐。
從本質(zhì)上講,概念共識(shí)是統(tǒng)一語言的過程,而阿里之前提出的 OneData 方法論,是一個(gè)指標(biāo)語言標(biāo)準(zhǔn)化的工具。這套工具對(duì)于從事指標(biāo)工作的各位來說并不陌生。然而,隨著時(shí)間的推移,我們發(fā)現(xiàn)僅依賴這一套工具并不足夠。主要原因是,它在實(shí)踐層面更多的是從微觀的視角出發(fā),缺乏宏觀視角。
為了彌補(bǔ)這一不足,我們引入了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)這一思想。領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)并非我們的創(chuàng)新,而是在工程領(lǐng)域被廣泛采納的一種思想。引入它的目的在于增強(qiáng)宏觀視角,更具前瞻性以適應(yīng)不斷變化的業(yè)務(wù)需求。此外,隨著數(shù)據(jù)業(yè)務(wù)化的趨勢(shì),我們需要實(shí)現(xiàn)更大范圍、更深層次的語言共識(shí)。領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的一些方法論在此過程中發(fā)揮了重要作用。
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的核心在于領(lǐng)域模型與統(tǒng)一語言。領(lǐng)域模型是對(duì)業(yè)務(wù)本質(zhì)的抽象,基于業(yè)務(wù)本質(zhì)進(jìn)行建模。在實(shí)際操作中,需要關(guān)注兩個(gè)結(jié)合點(diǎn)。
首先,在宏觀層面上,基于業(yè)務(wù)本質(zhì)對(duì)數(shù)據(jù)域進(jìn)行劃分,這有助于領(lǐng)域知識(shí)的交流與共享。如果劃分僅按組織進(jìn)行,那么領(lǐng)域知識(shí)也只能按組織劃分,這無疑增加了交流的難度。
其次,我們需要進(jìn)行更大范圍的業(yè)務(wù)術(shù)語討論。這意味著在線應(yīng)用架構(gòu)師與數(shù)據(jù)架構(gòu)師之間需要有一定的交流,能夠一起討論類似的問題,確保彼此的語言是相通的。
三、指標(biāo)系統(tǒng)設(shè)計(jì)——機(jī)制流程設(shè)計(jì)
1、機(jī)制流程的設(shè)計(jì)

機(jī)制流程的設(shè)計(jì)是為了確保指標(biāo)的持續(xù)建設(shè)及保鮮。我們?cè)趯?shí)踐過程中發(fā)現(xiàn),指標(biāo)系統(tǒng)的建設(shè)相對(duì)容易,但持續(xù)的維護(hù)和運(yùn)轉(zhuǎn)卻非常困難。從因果圖上看,良好的建設(shè)和維護(hù)能夠促進(jìn)消費(fèi)者的使用;用的人多了,也就能促進(jìn)建設(shè)和維護(hù)。但現(xiàn)實(shí)中這個(gè)增強(qiáng)回路很難運(yùn)轉(zhuǎn)起來,主要從建設(shè)角度看,往往是可建可不建的狀態(tài),有部分同學(xué)更傾向于維護(hù)在離線的 excel 中,一旦維護(hù)不足指標(biāo)不保鮮,消費(fèi)者就喪失信心轉(zhuǎn)而線下問人;對(duì)于消費(fèi)者,指標(biāo)的使用場(chǎng)景有限,只是偶爾去看一下的話增量價(jià)值沒有那么大,不一定會(huì)持續(xù)去推動(dòng)生產(chǎn)者進(jìn)行指標(biāo)維護(hù)。
為了解決這個(gè)問題,有兩個(gè)思路,一是通過產(chǎn)品化及 AI 能力,提升指標(biāo)管理、指標(biāo)研發(fā)的效率,讓在線的指標(biāo)維護(hù)管理效率高于線下表格;二是通過與消費(fèi)平臺(tái)的深度集成,提升找數(shù)、取數(shù)、分析的效率。當(dāng)然在前期,我們還需要依靠一些管理機(jī)制來確保系統(tǒng)的冷啟動(dòng)。
2、權(quán)責(zé)定義

在管理機(jī)制中,有幾個(gè)關(guān)鍵角色需要詳細(xì)闡述。
首先,業(yè)務(wù)負(fù)責(zé)人是負(fù)責(zé)提出需求和建立指標(biāo)模型的人。他們通常是 BI 或數(shù)據(jù)架構(gòu)師,具有深厚的業(yè)務(wù)背景和專業(yè)知識(shí)。業(yè)務(wù)負(fù)責(zé)人對(duì)指標(biāo)原子或業(yè)務(wù)限定有最終解釋權(quán),需要在負(fù)責(zé)領(lǐng)域內(nèi)制定無歧義的標(biāo)準(zhǔn),確保指標(biāo)建模的準(zhǔn)確性和標(biāo)準(zhǔn)化。
接下來,技術(shù)負(fù)責(zé)人負(fù)責(zé)實(shí)現(xiàn)指標(biāo)模型。他們需要選擇實(shí)現(xiàn)方式,確保準(zhǔn)確實(shí)現(xiàn)并及時(shí)產(chǎn)出。技術(shù)負(fù)責(zé)人需要與業(yè)務(wù)負(fù)責(zé)人保持密切溝通,確保對(duì)指標(biāo)口徑的理解保持一致,避免歧義。
最后,消費(fèi)者是指標(biāo)的最終使用者。他們享有知情權(quán),對(duì)指標(biāo)口徑的變更需及時(shí)了解。消費(fèi)者有責(zé)任準(zhǔn)確理解指標(biāo)口徑,合理使用數(shù)據(jù),避免濫用。
在管理機(jī)制中,各角色需明確職責(zé),相互協(xié)作,確保指標(biāo)建模、實(shí)現(xiàn)和消費(fèi)的順利進(jìn)行。
3、變更流程

基于權(quán)責(zé)劃分,我們?cè)O(shè)計(jì)了一套變更的流程。在流程中,業(yè)務(wù)負(fù)責(zé)人擁有最終解釋權(quán),并承擔(dān)著明確實(shí)現(xiàn)口徑的責(zé)任,具備審批權(quán)。消費(fèi)者則擁有被通知的權(quán)利,業(yè)務(wù)負(fù)責(zé)人和技術(shù)負(fù)責(zé)人應(yīng)確保消費(fèi)者及時(shí)獲悉相關(guān)信息。
四、指標(biāo)系統(tǒng)設(shè)計(jì)——產(chǎn)品化
1、產(chǎn)品化載體

產(chǎn)品化的載體就是指標(biāo)平臺(tái),其目標(biāo)是解決效率問題。平臺(tái)服務(wù)于數(shù)據(jù)管理者、指標(biāo)建模者、指標(biāo)研發(fā)者和消費(fèi)者。
數(shù)據(jù)管理者的主要訴求是確保指標(biāo)數(shù)據(jù)的準(zhǔn)確性,避免出現(xiàn)任何歧義,同時(shí)關(guān)注數(shù)據(jù)質(zhì)量和投入成本。指標(biāo)建模者主要關(guān)注的是建模效率和建模門檻。指標(biāo)研發(fā)者關(guān)心研發(fā)效率。而消費(fèi)者,則更關(guān)心數(shù)據(jù)質(zhì)量和消費(fèi)效率。
基于這些核心訴求,指標(biāo)平臺(tái)需要具備四個(gè)核心能力:
- 首先是標(biāo)準(zhǔn)化的指標(biāo)口徑定義和管理能力,確保數(shù)據(jù)的準(zhǔn)確性和一致性。
- 其次是高效的指標(biāo)研發(fā)能力,快速響應(yīng)業(yè)務(wù)需求。
- 第三是通過便捷的消費(fèi)能力,使數(shù)據(jù)更易于獲取和使用。
- 最后是便捷的指標(biāo)下鉆分析能力,幫助用戶快速定位問題并進(jìn)行優(yōu)化。
2、指標(biāo)平臺(tái)常見結(jié)構(gòu)

在業(yè)界,指標(biāo)平臺(tái)已經(jīng)得到了廣泛的應(yīng)用。阿里集團(tuán)和螞蟻集團(tuán)內(nèi)部也有多個(gè)指標(biāo)平臺(tái),有些是作為業(yè)務(wù)管理平臺(tái)中的指標(biāo)模塊,而有些則是獨(dú)立的指標(biāo)平臺(tái)。
從結(jié)構(gòu)上看,指標(biāo)平臺(tái)通常包括統(tǒng)一詞庫管理、原子指標(biāo)管理以及業(yè)務(wù)限定管理?;谶@些基礎(chǔ),通過派生指標(biāo),可以形成一個(gè)龐大的指標(biāo)庫。在這個(gè)庫中,可以進(jìn)行簡單的指標(biāo)運(yùn)維、衍生以及提供看數(shù)、取數(shù)或指標(biāo) API 等服務(wù)。最終,物理指標(biāo)會(huì)在研發(fā)平臺(tái)中完成,并異步掛載到 ADM 或 DWS 表中。
然而,從我們對(duì)指標(biāo)平臺(tái)能力的要求上看,現(xiàn)有的指標(biāo)平臺(tái)也存在一些問題。

首先是標(biāo)準(zhǔn)化指標(biāo)口徑定義和管理的能力。這個(gè)結(jié)構(gòu)只標(biāo)準(zhǔn)化了邏輯口徑,沒有標(biāo)準(zhǔn)化物理口徑,它的物理口徑通常隱藏在復(fù)雜的 SQL 中。因此,它只能解決單指標(biāo)的二義性,無法解決多指標(biāo)間的二義性,只能通過組織流程保障和統(tǒng)一中間層資產(chǎn)建設(shè)來緩解。

第二是指標(biāo)下鉆分析能力。因?yàn)榛?ADM 或 DWS 有很多復(fù)雜 SQL,要做到下鉆明細(xì)是比較困難的,無法做到自動(dòng)的下鉆分析,只能人為地查看 SQL 去理解口徑。

第三是需要具備高效的研發(fā)能力?;诨A(chǔ)指標(biāo)進(jìn)行簡單衍生可以快捷生產(chǎn),解決一部分效率問題。

第三個(gè)問題是通用便捷的消費(fèi)能力。這個(gè)結(jié)構(gòu)在,掛載的指標(biāo)只能以一個(gè)指標(biāo) code 這樣一維的形式存在,但數(shù)據(jù)領(lǐng)域大部分消費(fèi)還是以“表”這樣的二維形式,因此,這個(gè)結(jié)構(gòu)下的指標(biāo)要消費(fèi)只能是指標(biāo)取數(shù) api 的形式,或者需要與下游數(shù)據(jù)服務(wù)進(jìn)行深度打通,不夠通用。
綜上所述,現(xiàn)有的指標(biāo)平臺(tái)結(jié)構(gòu)雖然解決了很多問題,但仍不能完全滿足能力的要求。
3、螞蟻指標(biāo)平臺(tái)結(jié)構(gòu)

螞蟻指標(biāo)平臺(tái)在近期進(jìn)行了一次升級(jí),主要涉及以下幾個(gè)關(guān)鍵方面。
首先,在原子詞庫的框架下,我們?yōu)槊總€(gè)詞設(shè)定了具體的物理口徑。這種物理口徑是基于數(shù)據(jù)模型進(jìn)行確定的,以確保其二義性得到保障。
基于這些綁定的物理口徑,構(gòu)建了一個(gè)統(tǒng)一詞庫。這個(gè)統(tǒng)一詞庫依托標(biāo)準(zhǔn)化模板,可以自動(dòng)計(jì)算指標(biāo)并產(chǎn)出,省去了手動(dòng)計(jì)算這一步驟。此外,我們還為這些指標(biāo)賦予了一個(gè)載體,使其能夠自動(dòng)匯總到一張匯總邏輯表中。

這一結(jié)構(gòu)具有幾個(gè)優(yōu)勢(shì)。首先,它解決了口徑不一致的問題。由于每個(gè)詞庫都綁定了物理口徑,實(shí)現(xiàn)了邏輯口徑與物理口徑的標(biāo)準(zhǔn)化,因此可以更徹底地解決二義性問題。

第二點(diǎn)是它增強(qiáng)了研發(fā)效率及指標(biāo)下鉆分析的能力。指標(biāo)實(shí)現(xiàn)了定義即研發(fā),不需要在研發(fā)模塊手動(dòng)寫任務(wù)再上掛到指標(biāo)中,極大地提效。另外因?yàn)樽罱K的指標(biāo)是基于綁定口徑的詞庫計(jì)算而來的,它有一個(gè)強(qiáng)血緣,因此很容易基于指標(biāo)就回溯到相應(yīng)的明細(xì)表,展開詳細(xì)口徑,進(jìn)行進(jìn)一步的分析。

最后針對(duì)自動(dòng)研發(fā)的指標(biāo),我們將同粒度的指標(biāo)自動(dòng)匯總到一張“邏輯表”中,這樣下游用戶可以基于該表的模型進(jìn)行數(shù)據(jù)消費(fèi),實(shí)現(xiàn)更通用的消費(fèi)。
4、輔助指標(biāo)建模

為了解決指標(biāo)建模中的難點(diǎn),我們引入了指標(biāo)輔助建模。在實(shí)踐中,我們發(fā)現(xiàn)從指標(biāo)抽取出四要素(如原子指標(biāo)、業(yè)務(wù)限定)可能會(huì)遇到一些困難。困難主要在于缺乏統(tǒng)一的標(biāo)準(zhǔn)。例如,當(dāng)需要查看昨日支付寶在國內(nèi)線下成交金額數(shù)時(shí),指標(biāo)建模者或BI、架構(gòu)師需要拆分原子指標(biāo)、業(yè)務(wù)限定和統(tǒng)計(jì)周期。雖然統(tǒng)計(jì)周期相對(duì)容易處理,但原子指標(biāo)和業(yè)務(wù)限定有多種拆分方式。因?yàn)闆]有明確的對(duì)錯(cuò)之分,這可能導(dǎo)致混亂。
為了解決這一問題,我們引入了一些指標(biāo)的智能建模推薦。基本邏輯原理包括兩條路線:一是基于基本指標(biāo)進(jìn)行分詞,分詞詞庫基于業(yè)務(wù)詞條和指標(biāo)詞庫。分詞后,進(jìn)行分類和同義詞修正。例如,確定是“成交金額”還是“交易金額”,并確保每個(gè)指標(biāo)的唯一性。另一條路線是利用大模型對(duì)業(yè)務(wù)詞條和已有詞庫進(jìn)行構(gòu)建,并基于大模型直接給出推薦結(jié)果。通過這些方法,可以提高指標(biāo)建模的準(zhǔn)確性和效率。
5、研發(fā)提效

關(guān)于指標(biāo) SQL 的研發(fā)提效問題,其基本原理是基于模板,每個(gè)模板對(duì)應(yīng)一個(gè)基本元素,通過邏輯生成來解決問題?;A(chǔ)能力比較簡單,關(guān)鍵在于如何提高場(chǎng)景的覆蓋率。
起初,我們通過簡單的單表模板或配置來解決問題,只能覆蓋約 30% 的情況。接下來,我們引入維度或雪花模型的指標(biāo)配置,將所有維度擴(kuò)展成一張?zhí)摂M大寬表,進(jìn)行指標(biāo)配置,解決了約 60% 的問題。
為了解決 80% 的問題,我們進(jìn)一步豐富關(guān)聯(lián)關(guān)系和模型能力。例如,引入橋接表、層級(jí)維度以及復(fù)雜的關(guān)聯(lián)關(guān)系。更進(jìn)一步,解決 90% 的問題則需要處理二次匯總和自關(guān)聯(lián)能力,比如一些二次匯總或者自關(guān)聯(lián)的標(biāo)簽類指標(biāo)。
對(duì)于更復(fù)雜的情況,我們?nèi)栽谔剿骺赡艿慕鉀Q方案。然而,任何解決方案都存在極限,無法達(dá)到 100% 的覆蓋率。在未來,我們需要更加關(guān)注產(chǎn)品交互能力,或者使用更適合的 DAX 語言來處理復(fù)雜的分析指標(biāo)。
6、通用消費(fèi)能力

最后,關(guān)于通用消費(fèi)能力,可以通過匯總邏輯表將所有指標(biāo)按維度匯總成一張?zhí)摂M寬表。用戶可見的維度和指標(biāo)可以作為表的字段進(jìn)行展開。對(duì)于物理層,進(jìn)行一些內(nèi)部自動(dòng)物化處理以提高效率。
利用邏輯表的查詢翻譯引擎,將用戶所有的 SQL 轉(zhuǎn)化為邏輯表,并進(jìn)一步將邏輯表轉(zhuǎn)換為物理表的 SQL。這個(gè)引擎是整個(gè)系統(tǒng)中的核心組件。
在此基礎(chǔ)上,建立接入層。在這一層,我們實(shí)現(xiàn)了多種協(xié)議,包括 HTTP、RPC 以及 JDBC 等,以滿足不同用戶的需求。此外我們還對(duì)螞蟻內(nèi)部的 Max Computer 引擎進(jìn)行查詢協(xié)議的代理,用戶只需切換一個(gè) endpoint,就可以方便地查詢邏輯表。
為了提高查詢效率,我們還引入了邏輯表加速技術(shù),以滿足一些需要快速響應(yīng)的指標(biāo)服務(wù)的需求。
7、專家經(jīng)驗(yàn)平民化

基于業(yè)務(wù)模型的特性,通過專家經(jīng)驗(yàn)的積累,可以有效提升數(shù)倉的執(zhí)行效率。為了實(shí)現(xiàn)這一目標(biāo),主要采取了以下幾個(gè)策略:
- 同源表同粒度的合并計(jì)算,以減少重復(fù)計(jì)算。
- 長短周期的漸進(jìn)計(jì)算優(yōu)化,避免不必要的重復(fù)計(jì)算。
- 粒度上卷的優(yōu)化,基于新粒度的上卷,提高計(jì)算效率。
- 自動(dòng)構(gòu)建 BitMap 優(yōu)化,進(jìn)一步簡化計(jì)算過程。
- 在純 SQL 層面,通過 count distinct 轉(zhuǎn) group by、full outer join 轉(zhuǎn) union all、自動(dòng) map join 等優(yōu)化。
這些策略對(duì)于專家來說是常見的優(yōu)化手段,但對(duì)于剛上手的同學(xué)來說可能并不容易掌握。因此,我們通過內(nèi)置優(yōu)化方法,有效提升數(shù)倉的平均執(zhí)行效率,為業(yè)務(wù)提供更好的支持。
8、基于 ROI 的智能物化

在邏輯表物化層面,我們根據(jù)下游的消費(fèi)頻率和時(shí)間要求,對(duì)指標(biāo)所在的匯總表進(jìn)行智能的物化拆分和冗余處理。拆分和冗余的決策主要基于 3 個(gè)因素:
一是消費(fèi)者對(duì)每個(gè)指標(biāo)的時(shí)效要求,如果所有的表都被整合在一張物化表中,它受限于產(chǎn)出時(shí)間最慢的指標(biāo),使整體產(chǎn)出時(shí)效很長,所以在物化的時(shí)候需要根據(jù)時(shí)效進(jìn)行分組,例如要求在九點(diǎn)產(chǎn)出數(shù)據(jù),那么七點(diǎn)和七點(diǎn)二十的數(shù)據(jù)可以合并到同一張物化表中。同樣地,根據(jù)十點(diǎn)的要求,九點(diǎn)和九點(diǎn)二十的數(shù)據(jù)也可以合并在一起。
二是在邏輯表內(nèi)基于消費(fèi)的頻率進(jìn)行計(jì)算與存儲(chǔ)的取舍,如果下游經(jīng)常需要將某些字段頻繁地連接在一起,我們會(huì)在物化表內(nèi)部進(jìn)行冗余處理。
三是跨表的冗余。在實(shí)際使用時(shí),許多維度屬性會(huì)被一起使用。為了提高性能,我們會(huì)針對(duì)一些維度屬性進(jìn)行冗余處理。例如,用戶的一些信息,如姓名和性別會(huì)被冗余存儲(chǔ)在另一張物化表中,由系統(tǒng)來保障一致性。
五、業(yè)務(wù)實(shí)踐及未來展望
1、業(yè)務(wù)實(shí)踐情況

在螞蟻集團(tuán),當(dāng)前已有近三萬個(gè)派生指標(biāo),其中 70% 是自動(dòng)化研發(fā)的?;?codeless 定義和自動(dòng)物化的策略,數(shù)據(jù)二義性問題明顯有所改進(jìn),尤其是基于自動(dòng)化的效率實(shí)現(xiàn)了數(shù)量級(jí)的提升。在指標(biāo)計(jì)算性能方面,由于各種物化的自動(dòng)化策略的應(yīng)用,研發(fā)提效 10 倍以上,指標(biāo)計(jì)算成本下降 20%。
在網(wǎng)商銀行這一典型場(chǎng)景中,主要面臨的問題是口徑的統(tǒng)一,因?yàn)楦髯幽K間存在口徑性的沖突,導(dǎo)致子業(yè)務(wù)報(bào)表合在一起時(shí)數(shù)據(jù)無法對(duì)齊。此外,敏捷性和靈活性也是指標(biāo)交付中需要關(guān)注的問題。一旦指標(biāo)交付出現(xiàn)異常波動(dòng)或問題,進(jìn)行二次分析的難度較大。
在指標(biāo)系統(tǒng)的實(shí)踐中,我們采取了統(tǒng)一的數(shù)據(jù)模型為基礎(chǔ),構(gòu)建了指標(biāo)模型。在此基礎(chǔ)上,建立了統(tǒng)一的指標(biāo)庫,并與業(yè)務(wù)制度分析平臺(tái)進(jìn)行了深度結(jié)合,這種結(jié)合使得我們能夠進(jìn)行線上分析。目前已構(gòu)建了數(shù)千個(gè)派生指標(biāo),其中自動(dòng)化率高達(dá) 90% 以上,保證了口徑的一致性,并提升了效率。
在螞蟻安全領(lǐng)域,主要面臨的問題包括口徑問題、重復(fù)研發(fā)導(dǎo)致的計(jì)算和存儲(chǔ)浪費(fèi)、成本增速超過預(yù)算以及依賴混亂的計(jì)算成本壓力。為了解決這些問題,數(shù)據(jù)工程師聚焦于數(shù)據(jù)建模和指標(biāo)建模,而業(yè)務(wù)同學(xué)則負(fù)責(zé)派生指標(biāo)的構(gòu)建。通過這種方式,我們實(shí)現(xiàn)了上萬個(gè)派生指標(biāo),自動(dòng)化率達(dá)到了 85%,交付周期從兩天縮短到一小時(shí),計(jì)算成本平均下降了百分之三十左右。同時(shí),指標(biāo)安全性問題也得到了較好的解決。
2、未來展望

未來將更加關(guān)注大模型的運(yùn)用。大模型為語義層帶來了一個(gè)寶貴的機(jī)會(huì)。
一方面大模型能夠輔助建模,降低語義層構(gòu)建的成本。但短期內(nèi),大模型不會(huì)完全替代,因?yàn)闃I(yè)務(wù)的抽象以及一些子領(lǐng)域基礎(chǔ)數(shù)據(jù)仍比較稀缺。
另一方面語義層是大模型不可替代的領(lǐng)域知識(shí)中心,通過將語義層與大模型結(jié)合,將極大提升消費(fèi)效率,包括自然語言找數(shù)、自然語言取數(shù)和自然語言分析等。
六、問答環(huán)節(jié)
Q1:物理口徑是如何做到綁定的?
A1:在物理口徑的綁定方面,我們需要在定義原子指標(biāo)時(shí),直接為其指定相應(yīng)的口徑。具體的綁定過程可以分為兩個(gè)主要步驟。首先,選擇主表,并為其添加相應(yīng)的原子指標(biāo)計(jì)算口徑。其次,業(yè)務(wù)限定通常與維表相關(guān),這可能涉及到主表或其關(guān)聯(lián)的表。在綁定過程中,我們通常不需要對(duì)時(shí)間周期進(jìn)行綁定,只需要在主表指定時(shí)間字段和格式就可以了。
Q2:指標(biāo)是單獨(dú)存儲(chǔ)的嗎?如果是單獨(dú)存儲(chǔ)的,是不是按照列式存儲(chǔ)比較好?如果維度不太固定或者多變的情況,有什么好的方案嗎?
A2:首先,指標(biāo)存儲(chǔ)分為兩個(gè)層級(jí)。第一層是最基礎(chǔ)的層級(jí),通常不會(huì)進(jìn)行單獨(dú)的存儲(chǔ)。在物化視圖方面,如果原始數(shù)據(jù)是采用列式存儲(chǔ),那么物化后依然會(huì)保持列式存儲(chǔ)。
對(duì)于加速后的指標(biāo)服務(wù)存儲(chǔ),存在多種選擇。一種方式是我們可以內(nèi)置一些加速存儲(chǔ)的功能。另一種方式則是做加速,并存儲(chǔ)到目標(biāo)消費(fèi)平臺(tái)中。不過,數(shù)據(jù)并不會(huì)單獨(dú)存儲(chǔ)在目標(biāo)消費(fèi)平臺(tái)中。
此外,對(duì)于維度不太固定或者可能會(huì)變化的情況,我們需要考慮一些好的解決方案。目前匯總邏輯表是按照同維度進(jìn)行聚合的。當(dāng)維度發(fā)生變化時(shí),比如增加或減少維度,這通常不是建表的問題。
如果引入新的維度,我們需要考慮如何迭代表結(jié)構(gòu)。對(duì)于新表,我們會(huì)創(chuàng)建另一張匯總邏輯表,而不是在同一張表上進(jìn)行操作。因?yàn)椴煌S度很難聚合在一起。如果硬要聚合,可能會(huì)導(dǎo)致數(shù)據(jù)表變得龐大而難以管理。
為了避免這種情況,我們可以考慮使用分區(qū)表來管理不同維度的數(shù)據(jù)。通過合理設(shè)置分區(qū)鍵和分區(qū)策略,可以有效地將不同維度的數(shù)據(jù)分散到不同的分區(qū)中,從而實(shí)現(xiàn)高效的數(shù)據(jù)存儲(chǔ)和管理。同時(shí),我們還可以利用數(shù)據(jù)庫的分區(qū)功能進(jìn)行查詢優(yōu)化,提高查詢效率。
Q3:指標(biāo)平臺(tái)應(yīng)該是從明細(xì)事實(shí)表開始計(jì)算,還是從業(yè)務(wù)部門的中間表去計(jì)算?
A3:關(guān)于指標(biāo)的定義,我認(rèn)為應(yīng)該基于語義,即數(shù)據(jù)模型這一層面。中間表和明細(xì)表是不同的概念,對(duì)于明細(xì)表,也需要具體分析。有些明細(xì)表在規(guī)范上相對(duì)收斂,而有些則較為發(fā)散。為了確保一致性,我們應(yīng)從概念模型開始,這一層面具有一定的抽象性。通過這種方式,明細(xì)內(nèi)層不會(huì)過于分散,明細(xì)與概念能夠更好地結(jié)合,從而更易于達(dá)到一致性。
Q4:指標(biāo)的查詢對(duì)于 BI 看板來說,性能要求會(huì)比較高,性能應(yīng)該從哪幾方面保障呢?
A4:關(guān)于性能這一方面,我們?cè)谖浵伣鸱]有進(jìn)行過多的研究和涉獵。主要原因在于,我們將這一領(lǐng)域的工作主要交給了底層引擎來處理,例如邏輯表加速等,這些都是由引擎來負(fù)責(zé)的。在我們的工作中,我們更專注于構(gòu)建語義層這一塊,而不是過分關(guān)注技術(shù)層面的優(yōu)化。
對(duì)于性能優(yōu)化,我們采取了兩種策略。首先是把相關(guān)工作交給引擎處理,這樣可以利用它們的專業(yè)性能優(yōu)化技術(shù)。其次,對(duì)于邏輯表的加速,我們并不需要處理所有的數(shù)據(jù)存儲(chǔ)問題,而是選擇性地加速到業(yè)務(wù)的數(shù)據(jù)分析平臺(tái),例如 Power BI 等。這些平臺(tái)擁有專業(yè)的性能解決方案,能夠提供更加完備的性能優(yōu)化服務(wù)。
Q5:派生指標(biāo)是包含維度和原始指標(biāo)嗎?是由業(yè)務(wù)同學(xué)來編寫嗎?
A5:對(duì)于派生指標(biāo)的定義,存在不同的觀點(diǎn)和理解。
在實(shí)踐操作中,我們的派生指標(biāo)包含統(tǒng)計(jì)粒度和維度兩個(gè)方面。
至于派生指標(biāo)的確定,我認(rèn)為業(yè)務(wù)團(tuán)隊(duì)的參與是非常關(guān)鍵的。但是,這種參與是有前提條件的。首先,業(yè)務(wù)團(tuán)隊(duì)需要對(duì)建立的模型和相關(guān)概念有統(tǒng)一的認(rèn)識(shí)。如果業(yè)務(wù)團(tuán)隊(duì)和數(shù)據(jù)團(tuán)隊(duì)使用不同的語言,那么派生指標(biāo)的確定將非常困難。此外,對(duì)于數(shù)據(jù)建模抽象能力的要求也比較高。數(shù)據(jù)工程師需要扮演數(shù)據(jù)架構(gòu)師或數(shù)據(jù)建模師的角色,構(gòu)建出能夠適應(yīng)各種業(yè)務(wù)需求的優(yōu)質(zhì)模型。這樣的一種模式是比較理想的選擇,能夠確保派生指標(biāo)的有效性和實(shí)用性。
Q6:有出現(xiàn)下鉆的時(shí)候,就是出現(xiàn)算子不相同的問題嗎?比如說一開始下鉆的某一層級(jí)需要去重。
A6:具體來說,我們需要將這一層向下轉(zhuǎn)換,以揭示其核心口徑,也就是還原到明細(xì)模型這一層級(jí)。一旦還原到明細(xì)模型層,系統(tǒng)會(huì)默認(rèn)展示原子指標(biāo)的算式。然而,要進(jìn)行更高級(jí)的分析,你可能需要使用其他算式或添加額外條件。這就需要與我們的分析平臺(tái)相結(jié)合,輕松地替換這些算式、限定、周期或維度。
這樣的調(diào)整不僅擴(kuò)大了探討的空間,還突出了基于明細(xì)模型的靈活性。另外,我想補(bǔ)充一點(diǎn),我們的指標(biāo)通?;跀?shù)據(jù)模型來定義聚合算子,這可能涉及多層聚合。這時(shí),我們可以借助 BI 工具,進(jìn)行二次或三次上卷分析。我理解一些特別復(fù)雜的分析可能會(huì)更需要借助這些工具和語言來處理。
Q7:所有的指標(biāo)都是持久化之后的嗎?有沒有一些指標(biāo)是動(dòng)態(tài)的?比如我們實(shí)時(shí)查詢?nèi)路莸浆F(xiàn)在的成交額。
A7:根據(jù)您提供的原始內(nèi)容,以下是經(jīng)過改寫的嚴(yán)謹(jǐn)、穩(wěn)重、理性、官方風(fēng)格的語言:
在數(shù)據(jù)倉庫中,指標(biāo)通常都是持久化的。對(duì)于一些衍生指標(biāo),例如 a 加 b 或 a 除以 b,我們不會(huì)一概而論地進(jìn)行物化,而會(huì)根據(jù)實(shí)際需求和情況來決定是否將其物化。
Q8:指標(biāo)的計(jì)算口徑都是通過圖形化界面配置的嗎?還是可以基于 SQL 語句配置?
A8:關(guān)鍵是看結(jié)構(gòu),以原子指標(biāo)與基本算子級(jí)別的口徑綁定為例,涉及到圖形與 SQL 的結(jié)合的,有些是選擇定義 SQL。在定義好這些基礎(chǔ)要素后,系統(tǒng)將生成相應(yīng)的指標(biāo),這個(gè)過程可以通過圖形化界面進(jìn)行展示。
Q9:詞根的二義性怎么解決?
A9:關(guān)于詞根的二義性問題,其實(shí)我們之前已經(jīng)有所涉及。要實(shí)現(xiàn)業(yè)務(wù)詞條的統(tǒng)一語言,主要有三種模式選擇:基于領(lǐng)域、基于組織或基于消費(fèi)場(chǎng)景。在確定模式后,后續(xù)工作就會(huì)變得相對(duì)簡單。
如果是基于領(lǐng)域,就需要領(lǐng)域?qū)<夜餐献鳎捎妙I(lǐng)域驅(qū)動(dòng)的方法,根據(jù)業(yè)務(wù)用例進(jìn)行抽象,達(dá)成詞根的統(tǒng)一?;诮M織的模式可能相對(duì)簡單一些,而基于消費(fèi)場(chǎng)景的方式可能無法解決根本的安全性問題,因此建議采用基于領(lǐng)域的方式。
另外,關(guān)于機(jī)制流程的變動(dòng),需要非常謹(jǐn)慎地進(jìn)行。關(guān)于領(lǐng)域設(shè)計(jì)的展開,需要強(qiáng)調(diào)的是,這些詞并不是一次性錄入系統(tǒng)就結(jié)束了。要讓領(lǐng)域詞在各種日常交流、文檔和需求提案中得到廣泛應(yīng)用,以規(guī)范使用標(biāo)準(zhǔn)的詞匯。只有不斷加深對(duì)詞根的印象,才能真正達(dá)成共識(shí),解決二義性問題。
Q10:指標(biāo)主要是離線計(jì)算嗎?是存算分離的嗎?
A10:我們?cè)诖诉M(jìn)行計(jì)算時(shí),主要集中在最基礎(chǔ)的一層,采用離線計(jì)算方式,因?yàn)殡x線計(jì)算在效率上更具優(yōu)勢(shì)。在線計(jì)算則主要用于加速和執(zhí)行一些簡單的衍生操作,如組合或聚合。至于存算分離,我認(rèn)為它更多地取決于底層技術(shù)架構(gòu)中引擎的存算分離特性。如果底層引擎支持存算分離,我們也會(huì)采用這種架構(gòu)。
Q11:派生出來的指標(biāo)一般是單個(gè)類型的指標(biāo)落表。但是 BI 看板經(jīng)常會(huì)需要拿各種類型的派生指標(biāo),這個(gè)怎么處理?
A11:對(duì)于處理多個(gè)派生指標(biāo)的問題,確實(shí)需要謹(jǐn)慎處理。
首先,考慮到我們現(xiàn)有的指標(biāo)已經(jīng)聚合在匯總邏輯表中,如果在 BI 工具中引入這個(gè)表,可能會(huì)出現(xiàn)數(shù)據(jù)量過大的情況。特別是當(dāng)我們面對(duì)的是擁有數(shù)千個(gè)指標(biāo)的大型邏輯表時(shí),按需引入是必要的。
其次,為了提高效率和準(zhǔn)確性,我們也可以考慮與下游的平臺(tái)進(jìn)行整合。這樣,下游平臺(tái)可以直接引用指標(biāo)列表。之后,我們可以自動(dòng)將相關(guān)的數(shù)據(jù)集或底層邏輯表、物理表傳輸?shù)较掠纹脚_(tái),從而幫助它們構(gòu)建自己的數(shù)據(jù)模型。這種方式可以實(shí)現(xiàn)更為流暢和高效的數(shù)據(jù)傳輸和處理。
總結(jié)來說,處理多個(gè)派生指標(biāo)的問題需要我們綜合考慮數(shù)據(jù)量、效率和準(zhǔn)確性等多個(gè)方面。通過按需引入數(shù)據(jù)、與下游平臺(tái)深度整合等策略,我們可以更好地滿足業(yè)務(wù)需求并提升數(shù)據(jù)處理的整體效果。




































