快手指標(biāo)中臺(tái)建設(shè)實(shí)踐

一、背景介紹
1. 關(guān)于快手

快手是一個(gè)普惠的數(shù)字社區(qū),在這里每個(gè)人都可以記錄生活、分享生活??焓滞ㄟ^(guò)短視頻和直播的形式成功構(gòu)建了電商、商業(yè)化等多元化的業(yè)務(wù)生態(tài)系統(tǒng)。
截止到今年第一季度,根據(jù)公開(kāi)財(cái)報(bào)數(shù)據(jù),快手的平均日活躍用戶數(shù)(DAU)達(dá)到了 3.93 億,平均月活躍用戶數(shù)(MAU)達(dá)到了 6.97 億。在如此大的用戶規(guī)模背后,是快手強(qiáng)大的技術(shù)在支持,這其中也包括數(shù)據(jù)平臺(tái)部的技術(shù)。
2. 關(guān)于快手?jǐn)?shù)據(jù)平臺(tái)部

快手?jǐn)?shù)據(jù)平臺(tái)部的使命是打造高效且智能的自助式數(shù)據(jù)平臺(tái)工具,用于業(yè)務(wù)的分析決策提效。職責(zé)是提供從數(shù)據(jù)集成、加工,到分析全鏈路的智能數(shù)據(jù)開(kāi)發(fā)、管理和分析的泛大數(shù)據(jù)平臺(tái)化能力,加速數(shù)據(jù)分析決策效率。
數(shù)據(jù)平臺(tái)部主要圍繞著基礎(chǔ)建設(shè)和數(shù)據(jù)能力這兩方面展開(kāi):
- 基礎(chǔ)建設(shè):技術(shù)架構(gòu)的底層是大數(shù)據(jù)的引擎層,在引擎層之上有一站式的數(shù)據(jù)采集以及數(shù)據(jù)開(kāi)發(fā)的工具。通過(guò)這些工具,可以將數(shù)據(jù)匯總到大數(shù)據(jù)平臺(tái)上,再經(jīng)過(guò)數(shù)據(jù)加工和融合打通,就形成了數(shù)據(jù)中臺(tái)一體化的數(shù)倉(cāng)。在數(shù)倉(cāng)之上,我們會(huì)去沉淀各種資產(chǎn)。這就是我們?cè)诨A(chǔ)建設(shè)方面的工作。
 - 數(shù)據(jù)能力:在基礎(chǔ)建設(shè)之上,我們構(gòu)建了各種數(shù)據(jù)能力,以滿足各種場(chǎng)景下的數(shù)據(jù)分析需求,比如面向通用分析場(chǎng)景的數(shù)據(jù)分析能力等。
 
目前快手有著萬(wàn)級(jí)別的集群規(guī)模,以及 EB 級(jí)別的數(shù)據(jù)規(guī)模。如此海量的數(shù)據(jù),給我們大數(shù)據(jù)技術(shù)帶來(lái)了巨大的挑戰(zhàn)。
今天我們分享的指標(biāo)中臺(tái)就是數(shù)據(jù)平臺(tái)部的核心平臺(tái)之一。
3. 指標(biāo)相關(guān)介紹

在介紹我們的指標(biāo)中臺(tái)之前,先來(lái)回顧一下指標(biāo)相關(guān)的概念。在數(shù)據(jù)分析中,指標(biāo)是衡量業(yè)務(wù)表現(xiàn)的重要工具。
以活躍用戶數(shù)為例,它是一個(gè)原子指標(biāo),代表用戶活躍度的基礎(chǔ)度量。這個(gè)指標(biāo)可以進(jìn)一步拆分為業(yè)務(wù)過(guò)程(用戶行為事件),對(duì)象實(shí)體(用戶),以及度量(用戶數(shù))。
通過(guò)添加修飾詞,如“新增”,我們可以將指標(biāo)限定在特定范疇,例如新增用戶。
此外,通過(guò)指定時(shí)間范圍(如“近 7 日”)和維度(如按城市),我們還可以構(gòu)建派生指標(biāo),從而更細(xì)致地觀察數(shù)據(jù)的分布。
基于這些原子指標(biāo)和派生指標(biāo)就可以構(gòu)建指標(biāo)體系,它可以幫助業(yè)務(wù)進(jìn)行更有效的管理和決策。然而,指標(biāo)體系也是一把雙刃劍,如果使用得當(dāng),可以顯著提升業(yè)務(wù)效率;如果使用不當(dāng),則可能帶來(lái)額外的負(fù)擔(dān)。因此,正確理解和應(yīng)用指標(biāo)對(duì)于業(yè)務(wù)成功至關(guān)重要。
4. 快手指標(biāo)中臺(tái)背景

在快手指標(biāo)中臺(tái)建立之前,公司的數(shù)據(jù)倉(cāng)庫(kù)擁有 10 萬(wàn)量級(jí)的數(shù)據(jù)表,當(dāng)時(shí)采用的是數(shù)倉(cāng)直接對(duì)接應(yīng)用系統(tǒng)的方式,這種煙囪式建設(shè)模式導(dǎo)致了數(shù)據(jù)管理和應(yīng)用效率的問(wèn)題。這種模式下,指標(biāo)分散在 BI 系統(tǒng)、AB 系統(tǒng)和運(yùn)營(yíng)系統(tǒng)等不同應(yīng)用平臺(tái),缺乏統(tǒng)一管理,造成了資源浪費(fèi)。主要帶來(lái)以下問(wèn)題:
- 數(shù)據(jù)質(zhì)量:由于指標(biāo)管理不統(tǒng)一、指標(biāo)口徑不統(tǒng)一,導(dǎo)致業(yè)務(wù)分析時(shí)難以對(duì)賬,需要大量時(shí)間排查原因。
 - 研發(fā)效率:每個(gè)應(yīng)用平臺(tái)的指標(biāo)能力重復(fù)建設(shè),嚴(yán)重浪費(fèi)了研發(fā)資源,降低了研發(fā)效率。
 
為了解決以上問(wèn)題,快手經(jīng)過(guò)慎重考慮,決定建設(shè)一套企業(yè)級(jí)的指標(biāo)中臺(tái)系統(tǒng),通過(guò)將數(shù)據(jù)層和應(yīng)用層進(jìn)行解耦,來(lái)解決指標(biāo)質(zhì)量和研發(fā)效率的問(wèn)題。
5. 如何構(gòu)建企業(yè)級(jí)指標(biāo)中臺(tái)

那么如何去構(gòu)建企業(yè)級(jí)指標(biāo)中臺(tái)呢?
我們首先對(duì)行業(yè)趨勢(shì)和業(yè)界常用方案進(jìn)行了調(diào)研。
(1)行業(yè)趨勢(shì)
- Headless BI:Headless BI 采用“一處定義,多處使用”的理念,實(shí)現(xiàn)指標(biāo)一經(jīng)定義,即可在 BI 平臺(tái)、運(yùn)營(yíng)平臺(tái)等多處使用;其優(yōu)勢(shì)在于將數(shù)據(jù)層與應(yīng)用層解耦,通過(guò)統(tǒng)一的服務(wù)接口保證指標(biāo)的服務(wù)質(zhì)量;當(dāng)然,其整體實(shí)現(xiàn)的技術(shù)成本和挑戰(zhàn)也比較高。
 - 智能建模:基于表元信息抽取,利用算法和規(guī)則等技術(shù)手段自動(dòng)構(gòu)建表與表之間的關(guān)系,以減少人工建模的復(fù)雜性和成本。
 
(2)業(yè)界方案
- 指標(biāo)驅(qū)動(dòng)生產(chǎn):基于已經(jīng)定義好的指標(biāo)元數(shù)據(jù)信息(派生指標(biāo)、復(fù)合指標(biāo)、加工口徑等),來(lái)設(shè)計(jì)指標(biāo)的生產(chǎn)鏈路,也就是業(yè)界 NoETL 的思路;主要優(yōu)點(diǎn)是通過(guò)控制生產(chǎn)過(guò)程來(lái)保證指標(biāo)質(zhì)量,落地比較徹底,適用于一般場(chǎng)景的指標(biāo)數(shù)據(jù)加工和聚合,其缺點(diǎn)是應(yīng)用場(chǎng)景比較單一,無(wú)法應(yīng)對(duì)復(fù)雜業(yè)務(wù)場(chǎng)景;
 - 指標(biāo)驅(qū)動(dòng)分析:主要面向數(shù)據(jù)消費(fèi)場(chǎng)景,提供更靈活多樣的數(shù)據(jù)分析能力;而在數(shù)倉(cāng)建設(shè)不做過(guò)多的限制,所以可能存在指標(biāo)質(zhì)量風(fēng)險(xiǎn)(當(dāng)然該問(wèn)題可以通過(guò)其他方法來(lái)解決),整體的實(shí)現(xiàn)復(fù)雜程度比較高。
 
指標(biāo)驅(qū)動(dòng)生產(chǎn)和指標(biāo)驅(qū)動(dòng)分析并非互斥,業(yè)界已有公司同時(shí)做生產(chǎn)方向和分析方向,并且取得不錯(cuò)的效果?;诳焓忠延休^為成熟的數(shù)倉(cāng)體系,我們認(rèn)為現(xiàn)階段基于指標(biāo)來(lái)驅(qū)動(dòng)分析的方案能更好地發(fā)揮數(shù)據(jù)價(jià)值。
6. 快手指標(biāo)中臺(tái)解決方案

基于以上的考慮,我們采用了 Headless BI 的理念建設(shè)了快手指標(biāo)中臺(tái),通過(guò)實(shí)現(xiàn)指標(biāo)的統(tǒng)一指標(biāo)管理和統(tǒng)一指標(biāo)服務(wù),來(lái)解決指標(biāo)質(zhì)量和研發(fā)效率問(wèn)題。
指標(biāo)中臺(tái)在整個(gè)數(shù)據(jù)鏈路中起到了承上啟下的作用。
- 向下,通過(guò)對(duì)各種數(shù)據(jù)源進(jìn)行統(tǒng)一接入,來(lái)保障指標(biāo)口徑和數(shù)據(jù)質(zhì)量,并且屏蔽了底層物理技術(shù)的實(shí)現(xiàn)細(xì)節(jié),讓用戶只需感知指標(biāo)維度層面的使用;
 - 向上,通過(guò)統(tǒng)一的指標(biāo)查詢服務(wù),為上層應(yīng)用提供穩(wěn)定可靠的指標(biāo)服務(wù),從而保障指標(biāo)質(zhì)量。
 
在與應(yīng)用方的合作過(guò)程中,主要采用兩種模式:
- 合作共建:一種是指標(biāo)中臺(tái)與 BI 工具的深度合作,通過(guò)這種方式構(gòu)建快手的 BI 體系,實(shí)現(xiàn)數(shù)據(jù)的深入分析和可視化;
 - 開(kāi)放生態(tài):另一種是指標(biāo)中臺(tái)結(jié)合開(kāi)放 API,構(gòu)建一個(gè)開(kāi)放的生態(tài),允許更廣泛的數(shù)據(jù)訪問(wèn)和應(yīng)用集成,從而促進(jìn)數(shù)據(jù)的共享和創(chuàng)新。
 
通過(guò)這種綜合性的解決方案,能夠?yàn)槠髽I(yè)提供強(qiáng)大的數(shù)據(jù)支持和靈活的分析能力,推動(dòng)企業(yè)數(shù)據(jù)驅(qū)動(dòng)的決策和業(yè)務(wù)增長(zhǎng)。
整個(gè)指標(biāo)中臺(tái)是圍繞著指標(biāo)管理和指標(biāo)服務(wù)兩部分來(lái)建設(shè)的,接下來(lái)將分別進(jìn)行詳細(xì)介紹。
二、指標(biāo)管理
1. 指標(biāo)管理相關(guān)背景

首先來(lái)介紹指標(biāo)管理。
在指標(biāo)管理方面,主要問(wèn)題是指標(biāo)管理不統(tǒng)一和指標(biāo)口徑不一致;指標(biāo)管理不統(tǒng)一導(dǎo)致了指標(biāo)多處管理、嚴(yán)重浪費(fèi)成本等問(wèn)題,指標(biāo)口徑不一致導(dǎo)致了指標(biāo)同義不同名、同名不同義等問(wèn)題,比如同樣是支付訂單金額指標(biāo),有的業(yè)務(wù)方叫 GMV,有的業(yè)務(wù)方叫支付金額,這種同義不同名的現(xiàn)象給我們?nèi)粘V笜?biāo)溝通和使用都帶來(lái)問(wèn)題和困難。我們希望通過(guò)標(biāo)準(zhǔn)化流程對(duì)指標(biāo)進(jìn)行有效管理,協(xié)助業(yè)務(wù)提高指標(biāo)管理效率,降低業(yè)務(wù)成本,從而提高業(yè)務(wù)決策效率。
2. 指標(biāo)管理解決方案

那么如何才能有效管理指標(biāo)呢?
我們的具體做法是采用流程+規(guī)范+管理工具的方式來(lái)構(gòu)建指標(biāo)管理模塊,主要分為以下部分:
- 指標(biāo)標(biāo)準(zhǔn)化流程與規(guī)范:采用標(biāo)準(zhǔn)化的流程和規(guī)范來(lái)統(tǒng)一指標(biāo)和維度信息的接入。
 - 元數(shù)據(jù)管理:對(duì)接入的指標(biāo)維度元數(shù)據(jù)進(jìn)行統(tǒng)一管理。
 - 模型管理:對(duì)指標(biāo)維度等元數(shù)據(jù)進(jìn)行數(shù)據(jù)建模,形成數(shù)據(jù)模型,將數(shù)據(jù)模型進(jìn)行有效管理。
 - 數(shù)據(jù)集管理:在元數(shù)據(jù)管理和模型管理的基礎(chǔ)上形成數(shù)據(jù)集管理,對(duì)外提供統(tǒng)一的服務(wù)。
 
下面來(lái)分別介紹以上步驟。
3. 指標(biāo)標(biāo)準(zhǔn)化規(guī)范和流程

指標(biāo)標(biāo)準(zhǔn)化規(guī)范和流程主要解決兩個(gè)問(wèn)題:統(tǒng)一指標(biāo)口徑、提高指標(biāo)質(zhì)量。在整個(gè)流程中的各個(gè)環(huán)節(jié)都需要制定并落實(shí)相關(guān)規(guī)范,具體如下:
- 業(yè)務(wù)口徑制定:在明確需求后,將制定業(yè)務(wù)口徑,確保指標(biāo)的定義與業(yè)務(wù)目標(biāo)一致,要落實(shí)數(shù)據(jù)規(guī)范和指標(biāo)命名規(guī)范。
 - 數(shù)據(jù)開(kāi)發(fā):根據(jù)業(yè)務(wù)口徑進(jìn)入指標(biāo)開(kāi)發(fā)階段,要落實(shí)數(shù)據(jù)開(kāi)發(fā)規(guī)范和數(shù)據(jù)模型規(guī)范,并且在平臺(tái)保證一致性規(guī)范。
 - 指標(biāo)服務(wù)提供:落實(shí)指標(biāo)服務(wù)規(guī)范。
 - 審批授權(quán):為保證指標(biāo)口徑的統(tǒng)一,我們會(huì)對(duì)各業(yè)務(wù)線進(jìn)行梳理,每個(gè)業(yè)務(wù)線會(huì)有對(duì)應(yīng)的數(shù)據(jù)域,數(shù)據(jù)域有數(shù)據(jù)管家對(duì)指標(biāo)口徑進(jìn)行審批和授權(quán)。
 
整體來(lái)講,我們是在關(guān)鍵流程中落實(shí)相關(guān)規(guī)范來(lái)保障數(shù)據(jù)開(kāi)發(fā)質(zhì)量,進(jìn)而保障指標(biāo)的質(zhì)量。在整個(gè)流程中,需要多個(gè)團(tuán)隊(duì)通力合作,才能確保指標(biāo)的統(tǒng)一性和高質(zhì)量。
4. 元數(shù)據(jù)/模型/數(shù)據(jù)集管理

在元數(shù)據(jù)管理方面,整體采取分層管理的方法來(lái)確保數(shù)據(jù)的有效組織和使用:
- 概念層(元數(shù)據(jù)管理):主要負(fù)責(zé)指標(biāo)、維度、數(shù)據(jù)表以及綁定等元數(shù)據(jù)的統(tǒng)一管理。
 - 邏輯層(模型管理):在元數(shù)據(jù)管理之上,我們面臨的第一個(gè)問(wèn)題是原始錄入指標(biāo)的元數(shù)據(jù)通常不能直接用于業(yè)務(wù)。例如,一個(gè)維度可能綁定多張維表,在指標(biāo)服務(wù)時(shí)基于原始元數(shù)據(jù)計(jì)算維度應(yīng)該從哪張維表取數(shù)是非常浪費(fèi)資源的,所以需要進(jìn)行數(shù)據(jù)建模,基于元數(shù)據(jù)重新梳理和構(gòu)建數(shù)據(jù)關(guān)系,形成數(shù)據(jù)模型,進(jìn)而提高指標(biāo)使用時(shí)的查詢性能。
 - 應(yīng)用層(數(shù)據(jù)集管理):第二個(gè)問(wèn)題是業(yè)務(wù)線可能有成千上萬(wàn)的指標(biāo),用戶的一些使用場(chǎng)景只關(guān)注少量指標(biāo),但在使用時(shí)卻需要從大量指標(biāo)中檢索特定指標(biāo),這無(wú)疑增加了用戶的理解成本和使用成本。為了解決這個(gè)問(wèn)題,我們?cè)O(shè)計(jì)了數(shù)據(jù)集,即特定指標(biāo)、維度和數(shù)據(jù)表的一個(gè)集合,從而縮小指標(biāo)數(shù)據(jù)的范圍。用戶可以將關(guān)注的指標(biāo)和維度圈選到一個(gè)數(shù)據(jù)集中,這樣在使用看板或報(bào)表時(shí),可以直接使用數(shù)據(jù)集提供服務(wù),而不需要從大量指標(biāo)中逐一檢索。數(shù)據(jù)集也是我們對(duì)外提供服務(wù)的載體。
 
5. 數(shù)據(jù)建模

在元數(shù)據(jù)管理中,有一步非常關(guān)鍵,就是數(shù)據(jù)建模,這里單獨(dú)介紹一下數(shù)據(jù)建模。
數(shù)據(jù)建模是數(shù)據(jù)管理過(guò)程中非常關(guān)鍵的一步,它直接影響到后續(xù)數(shù)據(jù)的使用和分析。數(shù)據(jù)建模,即基于指標(biāo)維度和數(shù)據(jù)表的關(guān)聯(lián)關(guān)系,實(shí)現(xiàn)從指標(biāo)維度元數(shù)據(jù)到數(shù)據(jù)模型的轉(zhuǎn)換。具體做法是采用三步建模的方式:
(1)概念建模:在指標(biāo)定義階段,定義指標(biāo)、維度、數(shù)據(jù)表之間的關(guān)系。
(2)邏輯建模:邏輯建模是一個(gè)自動(dòng)化的建模服務(wù),包括模型發(fā)現(xiàn)、關(guān)聯(lián)字段、最佳路徑計(jì)算和模型索引的構(gòu)建。
(3)物理建模:生成最終的數(shù)據(jù)模型,包括星型模型和雪花模型。
其中關(guān)鍵的建模步驟是邏輯建模過(guò)程。為了讓大家更好的理解邏輯建模過(guò)程,這里以一個(gè)例子來(lái)介紹:
- 模型發(fā)現(xiàn):如上圖中的例子,在平臺(tái)上定義了一個(gè)指標(biāo)(活躍設(shè)備數(shù))和一個(gè)維度(省份 ID),指標(biāo)綁定在事實(shí)表上,維度綁定在事實(shí)表和兩張維表上;首先會(huì)通過(guò)模型發(fā)現(xiàn)檢測(cè)到指標(biāo)口徑以及指標(biāo)和表的綁定關(guān)系的變化,一旦發(fā)現(xiàn)變化,就會(huì)自動(dòng)觸發(fā)建模流程。
 - 關(guān)聯(lián)字段:模型發(fā)現(xiàn)后,首先通過(guò)關(guān)聯(lián)字段(省份 ID 綁定的維表字段)進(jìn)行模型的初步構(gòu)建,在該例子中事實(shí)表和維表通過(guò)province_id 相關(guān)聯(lián),而 province_id 會(huì)關(guān)聯(lián)兩個(gè)維表,即城市維表和省份維表。
 - 最佳路徑計(jì)算:初步建模后,接下來(lái)對(duì)模型進(jìn)行優(yōu)化,即最佳路徑優(yōu)化,主要遵循選粗表不選細(xì)表、選快表不選慢表的原則;在上述例子中,雖然省份維表和城市維表均滿足綁定要求,但省份維表比城市維度粒度更粗,在后續(xù)指標(biāo)服務(wù)過(guò)程有更好的查詢性能,所以這一步會(huì)將城市維表裁剪掉,只留下省份維表。
 - 數(shù)據(jù)模型:最終得到數(shù)據(jù)模型,記錄表與表之間的關(guān)系,以及一些附加信息(可累加性等信息)。
 
有了數(shù)據(jù)模型之后,就可以對(duì)外提供指標(biāo)服務(wù)了。接下來(lái)將介紹指標(biāo)服務(wù)部分。
三、指標(biāo)服務(wù)
1. 指標(biāo)服務(wù)相關(guān)背景

指標(biāo)服務(wù)是數(shù)據(jù)架構(gòu)中的重要組成部分,其核心功能是提供指標(biāo)取數(shù)的能力。隨著業(yè)務(wù)的不斷發(fā)展,對(duì)指標(biāo)服務(wù)的要求也在不斷提高,主要問(wèn)題與挑戰(zhàn)如下:
- 需求多樣性:除普通計(jì)算能力外,業(yè)務(wù)需要高級(jí)計(jì)算和分析能力,如窗口函數(shù)計(jì)算、同比/環(huán)比分析等;
 - 聯(lián)邦查詢:數(shù)據(jù)可能分布在不同的存儲(chǔ)系統(tǒng)中,如 ClickHouse、Hive 或 MySQL 等,傳統(tǒng)的解決方案是將數(shù)據(jù)同步到單一引擎,但這會(huì)給業(yè)務(wù)增加開(kāi)發(fā)和存儲(chǔ)成本。所以業(yè)務(wù)對(duì)聯(lián)邦查詢的需求也愈發(fā)強(qiáng)烈;
 - 查詢效率:不同存儲(chǔ)系統(tǒng)中的查詢效率存在差異,比如像 Hive 離線引擎查詢慢、ClickHouse Join 查詢性能慢,從而會(huì)影響業(yè)務(wù)的分析效率。
 
2. 指標(biāo)服務(wù)解決方案

為了解決上述問(wèn)題,我們將指標(biāo)服務(wù)設(shè)計(jì)成以下三層:
- 統(tǒng)一分析語(yǔ)言層:提供豐富的語(yǔ)義表達(dá)能力,使用戶能夠定義復(fù)雜的計(jì)算和分析需求。
 - 統(tǒng)一查詢引擎層:提供聯(lián)邦查詢能力,允許用戶跨引擎進(jìn)行查詢,而無(wú)需關(guān)心底層物理存儲(chǔ)的復(fù)雜性。
 - 指標(biāo)加速層:提供指標(biāo)查詢加速能力,優(yōu)化查詢性能,解決查詢效率低下的問(wèn)題。
 
3. 統(tǒng)一分析語(yǔ)言 OAX

統(tǒng)一分析語(yǔ)言(OAX)是一種以數(shù)據(jù)集為載體,面向分析場(chǎng)景的分析語(yǔ)言,包括五個(gè)要素:數(shù)據(jù)范圍、指標(biāo)、維度、時(shí)間范圍和過(guò)濾條件。
為了大家更好地理解 OAX 語(yǔ)言,我們以一個(gè)例子來(lái)說(shuō)明:比如要獲取 2022-2023 年廣東省各市的 GDP 總值及其在全省 GDP 中的占比。
- 不使用 OAX 語(yǔ)言:首先我們需要分別求出廣東省各市的 GDP 總值,然后計(jì)算廣東省的 GDP 總值,再把兩者計(jì)算求出占比,整個(gè)過(guò)程一般需要三個(gè) SQL 來(lái)完成。
 - 使用 OAX 語(yǔ)言:我們可以這樣操作,數(shù)據(jù)范圍是國(guó)民經(jīng)濟(jì)數(shù)據(jù)集,指標(biāo)為各市的 GDP 總值及其占比,維度是年份、省份和城市,時(shí)間條件是 2022 年至 2023 年,過(guò)濾條件是省份為廣東。如圖中 SQL 的第 5 行,通過(guò) EXCLUDE[城市]去掉了城市維度,也就是省 GDP,再用各市的 GDP 除以省 GDP,就是我們需要的占比這一指標(biāo)??梢钥吹?,使用 OAX 語(yǔ)言可以極大地簡(jiǎn)化計(jì)算的定義,提高業(yè)務(wù)分析效率。
 
以上例子是 OAX 語(yǔ)言的動(dòng)態(tài)粒度計(jì)算的能力,OAX 語(yǔ)言的能力主要包括三部分:
- 基本計(jì)算:OAX 提供了一系列基本的計(jì)算函數(shù),如 SUM、COUNT DISTINCT、CONCAT 等等。
 - 動(dòng)態(tài)粒度計(jì)算:允許用戶在計(jì)算過(guò)程中根據(jù)需要調(diào)整數(shù)據(jù)的粒度,進(jìn)行更靈活的分析。如 EXCLUDE、INCLUDE、FIXCLUDE 等。
 - 表計(jì)算:表計(jì)算是 OAX 的一個(gè)高級(jí)特性,它允許用戶在數(shù)據(jù)表中進(jìn)行跨行的計(jì)算。例如 RUNNING SUM(累計(jì)求和),用于計(jì)算從表的開(kāi)始到當(dāng)前行的連續(xù)值的總和。這種方法不僅簡(jiǎn)化了計(jì)算過(guò)程,而且提高了計(jì)算的準(zhǔn)確性和效率。
 
OAX 屬于語(yǔ)言層面,要真正落地還需要一個(gè)載體去實(shí)現(xiàn),即統(tǒng)一查詢引擎 OCTO。
4. 統(tǒng)一查詢引擎 OCTO

統(tǒng)一查詢引擎 OCTO 是一個(gè)支持聯(lián)邦查詢的通用查詢平臺(tái),它能夠?qū)⒔y(tǒng)一分析語(yǔ)言(OAX)轉(zhuǎn)化為實(shí)際的查詢操作。
OCTO 的架構(gòu)主要包括:
(1)接口層:主要聯(lián)邦查詢語(yǔ)言,基于 Substrait 協(xié)議擴(kuò)展而來(lái)。
(2)查詢層:首先是解析接口層的聯(lián)邦查詢語(yǔ)言,構(gòu)建邏輯查詢計(jì)劃;然后對(duì)查詢計(jì)劃進(jìn)行編排,這里是實(shí)現(xiàn)二次計(jì)算的關(guān)鍵,像同環(huán)比、動(dòng)態(tài)粒度計(jì)算等能力均為二次計(jì)算能力;最后將編排后的計(jì)劃交由引擎執(zhí)行。
(3)適配層:適配異構(gòu)引擎的查詢能力。
我們還是以一個(gè)例子來(lái)看一下整體處理流程:
(1)定義 OAX 查詢語(yǔ)言:以前面求各市 GDP 占比的樣例為例,首先定義好 OAX 語(yǔ)言的五要素;這時(shí)還是指標(biāo)維度范圍;
(2)翻譯成聯(lián)邦查詢語(yǔ)言:然后將 OAX 語(yǔ)言翻譯成聯(lián)邦查詢語(yǔ)言;這一步主要結(jié)合指標(biāo)維度元數(shù)據(jù)和數(shù)據(jù)模型信息,將 OAX 語(yǔ)言的五要素轉(zhuǎn)換成物理引擎的表和字段信息,組織成聯(lián)邦查詢語(yǔ)言;這時(shí)就是物理底表范圍;
(3)查詢計(jì)劃:將聯(lián)邦查詢語(yǔ)言翻譯成查詢計(jì)劃,在該例中,廣東省各市 GDP 總值和廣東省 GDP 總值分別是兩個(gè)計(jì)算算子,然后將這兩算子 Join 計(jì)算得出 GDP 占比;
(4)得出結(jié)果:最后將計(jì)算結(jié)果返回。
總結(jié)一下,OCTO 具有三大特點(diǎn):
(1)聯(lián)邦查詢能力:OCTO 是支持異構(gòu)數(shù)據(jù)源的通用聯(lián)邦查詢平臺(tái),可以通過(guò)查詢計(jì)劃編排實(shí)現(xiàn)各種高級(jí)數(shù)據(jù)分析能力;
(2)開(kāi)放能力:作為通用平臺(tái),可支持運(yùn)營(yíng)平臺(tái)、質(zhì)檢平臺(tái)等多種應(yīng)用系統(tǒng)的指標(biāo)需求。
(3)查詢性能優(yōu)化:
- RBO:基于規(guī)則的優(yōu)化,如謂詞下推、列裁剪、join 消除等。
 - CBO:基于成本的優(yōu)化,遵循選擇快表、小表的原則,提高查詢性能。
 
5. 指標(biāo)加速

OCTO 的查詢優(yōu)化主要是在查詢計(jì)劃層面,而有些場(chǎng)景下查詢計(jì)劃層面的優(yōu)化無(wú)法滿足要求,比如無(wú)法優(yōu)化 Hive 引擎查詢慢的問(wèn)題。為了解決此類(lèi)查詢性能問(wèn)題,我們?cè)O(shè)計(jì)了指標(biāo)加速層,其主要采用的是用空間換時(shí)間的思想。
指標(biāo)加速層的配置方式有兩種:
- 用戶手動(dòng)配置:用戶可以基于特定的指標(biāo)和維度手動(dòng)配置加速規(guī)則,系統(tǒng)根據(jù)這些規(guī)則生成 ETL 任務(wù),自動(dòng)提交給任務(wù)調(diào)度平臺(tái),定期執(zhí)行以加載數(shù)據(jù)到高速引擎。
 - 自動(dòng)化分析配置:平臺(tái)根據(jù)用戶在指標(biāo)和維度上的查詢歷史記錄,自動(dòng)分析提效場(chǎng)景,然后創(chuàng)建自動(dòng)化的 ETL 任務(wù)進(jìn)行數(shù)據(jù)加速。
 
指標(biāo)加速層的應(yīng)用場(chǎng)景包括:
- 冷引擎到熱引擎:將存儲(chǔ)在性能較低的存儲(chǔ)引擎(如 Hive 表)中的指標(biāo)數(shù)據(jù)加速到性能更高的存儲(chǔ)引擎(如 ClickHouse);
 - 關(guān)聯(lián)查詢到單表查詢:將涉及多表關(guān)聯(lián)查詢的場(chǎng)景優(yōu)化為單表查詢場(chǎng)景,通過(guò)加速任務(wù),提前將數(shù)據(jù)聚合到單張表再加速到熱引擎中,以提高查詢性能;
 - 大表到小表:在某些大寬表場(chǎng)景下,每次查詢少量常用指標(biāo)維度都需要進(jìn)行全表掃描,導(dǎo)致查詢性能不佳;指標(biāo)加速可以將頻繁查詢的指標(biāo)和維度單獨(dú)形成小表,減少查詢時(shí)的數(shù)據(jù)掃描量,提升查詢效率。
 
指標(biāo)加速層上線以來(lái),加速任務(wù)已達(dá)到百級(jí),加速指標(biāo)占比約為 10%,整體查詢性能提高了 10 倍。
6. 指標(biāo)中臺(tái)落地情況

指標(biāo)中臺(tái)自上線以來(lái),全面覆蓋了公司的分析領(lǐng)域,主要表現(xiàn)如下:
- 質(zhì)量:沒(méi)有重大質(zhì)量故障。
 - 效率:10 倍以上的效率提升。
 - 成本:極大地提高了數(shù)據(jù)復(fù)用度。
 - 指標(biāo)管理:快手核心業(yè)務(wù)線指標(biāo)全部接入指標(biāo)中臺(tái),上萬(wàn)指標(biāo)數(shù)量。
 - 指標(biāo)服務(wù):接入幾十個(gè)應(yīng)用方,單日查詢次數(shù)達(dá)到上百萬(wàn)次。
 - 運(yùn)營(yíng)情況:日活躍用戶達(dá)到千級(jí)別,月活躍用戶達(dá)到萬(wàn)級(jí)別,為數(shù)據(jù)分析師、運(yùn)營(yíng)人員、DE 和業(yè)務(wù)人員的提效提供支撐。
 
四、未來(lái)展望

指標(biāo)中臺(tái)在未來(lái)發(fā)展中將重點(diǎn)聚焦于兩個(gè)關(guān)鍵領(lǐng)域,即智能化和高性能。
- 智能化方面:平臺(tái)計(jì)劃利用大型模型的能力來(lái)探索智能取數(shù)功能,以實(shí)現(xiàn)更高級(jí)的業(yè)務(wù)分析自動(dòng)化。通過(guò)標(biāo)準(zhǔn)化的指標(biāo)信息構(gòu)建交互式的自助 BI 產(chǎn)品,從而提升用戶體驗(yàn),提供高質(zhì)量的對(duì)話式智能分析服務(wù)。這種智能化的趨勢(shì)將極大地提高數(shù)據(jù)分析的效率,使用戶能夠更快速地獲取所需信息,同時(shí)降低技術(shù)門(mén)檻,實(shí)現(xiàn)數(shù)據(jù)的普惠。
 - 高性能:平臺(tái)將繼續(xù)優(yōu)化和提高查詢性能,不斷提升用戶的查詢體驗(yàn)。此外,隨著技術(shù)的發(fā)展,也會(huì)探索如向量化、native sql 等新技術(shù),以進(jìn)一步提升數(shù)據(jù)處理能力,滿足日益復(fù)雜的業(yè)務(wù)需求。
 















 
 
 

















 
 
 
 