天天看點

基于統一語義層建構的智能化資料分析平台

作者:DataFunTalk

導讀 本次分享的主題是“基于統一語義層建構的智能化資料分析平台”,主要包括以下幾大部分:

主要内容包括:

1. 業務場景

2. 系統架構

3. 重要子產品

4. 産品介紹

分享嘉賓|張仲良 小米 研發工程師

編輯整理|蔣長強 長安銀行

出品社群|DataFun

01

業務場景

首先來介紹一下我們的業務場景:衆多的業務部門和複雜的業務需求。

基于統一語義層建構的智能化資料分析平台

小米公司的業務類型跨度非常大。首先介紹産品部門,最早有手機、電視、路由器等比較核心的業務,和衆多生态鍊産品;後來又有了冰箱、洗衣機、空調等大家電;明年汽車業務即将量産;智能制造等其它業務也越來越重要。銷售部門裡,中國區是我們的基本盤;海外有印度區、國際部,國際部又有很多細分部門。銷售和産品研發部門之外,還有支撐部門,其中包括兩個重要的部門:一個是資訊部,整個公司裡面大部分的業務平台建設都在資訊部;一個是網際網路部,負責手機上一些大型網際網路應用。

複雜的業務場景,使得我們的資料有很多特點。首先,資料種類非常多,比如網際網路資料,有很多日活超過千萬的大應用,還有一些複雜的廣告業務,資料量級非常大,具有明顯的網際網路應用特色。生産銷售部門的業務具有制造企業的特點,資料邏輯複雜。人力和财務部門對資料安全要求非常嚴格,要求在存儲層和計算層都要經過加密處理。目前公司的現狀,一些分析師會基于檔案、excel、飛書表格做一些簡單的分析;有些業務部門有足夠的人力,會定制開發一些系統,也就是我們所謂的煙囪式的建設;還有一些部門會采用比較成熟的商業産品。

基于這種現狀,我們研發了統一的資料服務和資料分析平台,在解決了上述痛點的同時,還有其他一些收益,比如可以內建整個公司的大資料平台,和内部其它各種資料源,與公司内部的IM系統(飛書)打通,還可以提供比較強大的嵌入能力嵌入到各個内部系統。

02

系統架構

1.資料服務平台定位:資料中台核心看數和用數平台

基于統一語義層建構的智能化資料分析平台

上圖中可以看到資料服務平台在整個資料中台中的定位,以及資料中台的一些大的産品子產品。其中最下層是資料開發平台,也就是存儲和計算層,這是一個核心的業務。基于資料開發平台之上我們搭建了統一數倉系統,這裡面包括了公司的各種資料,比如說研、産、供、銷、服、網際網路、IOT、手機等等,統一數倉提供統一的基礎資料。再往上有兩大産品群:資料服務平台、資料智能平台,以及上面的資料應用。

資料服務平台,是整個資料中台裡提供看數、用數服務的主要平台。裡面比較重要的是統一語義層,我們内部叫語義模型。

2.資料服務平台介紹:統一語義層、智能化、資料分析平台

基于統一語義層建構的智能化資料分析平台

再來展開看一下資料服務平台的内容。從下往上來看,最下面是資料資産,包括公司内部的各種資料資産、資料源;中間是統一語義層,提供模型搭建、行級權限、自動加速等等定義态的能力,以及運作态的語義查詢執行能力;統一語義層對外提供API接口,資料平台之外的業務系統也可以通過SDK直接在我們的系統裡取數;上面是應用層,這層的右邊是資料分析平台,支援各種産品形态,比如看闆、簡報、預警等等,使用者可以進行看闆搭建、配置各種消息推送,使用方可以在上面看數,也可以直接把我們的看闆嵌入到應用系統裡面,這樣就可以不用到資料分析平台,在他們自己的平台就可以看到我們的看闆的各種資料;中間是智能分析的能力,可以對内、對外提供服務;最左邊是中台的其它應用,使用我們的資料服務和智能分析能力。這就是資料服務平台的整體架構。

03

重要子產品

接下來介紹資料服務平台裡面的一些核心子產品。

1.資料資産:支援集團内各種常用資料源類型

基于統一語義層建構的智能化資料分析平台

首先是資料資産,也就是平台架構裡面最下層的資料源部分。我們有幾部分資料:第一部分是線上業務資料,包括一些獨立的檔案資料,MySQL和其他商用資料庫資料;第二部分是資料倉庫,也就是一個高性能查詢引擎;最後一部分是大資料平台,其中包括Hive表、Iceberg表等。

這張圖上顯示出有幾個資料流。

第一個是資料上報體系,包括手機事件上報、網際網路應用的上報、IOT裝置的上報、服務端埋點上報、工廠裡面生産裝置的上報等;上報的鍊路有兩個,如果有實時分析的訴求,我們就會上報到資料倉庫裡,如果做批量分析,就上報到大資料平台裡面,做離線T+1的處理。

第二個是資料內建,線上資料通過內建鍊路內建到我們的大資料平台,做更大資料量、更長周期的批量分析。

第三個是資料加速,如果有一些查詢請求,大資料平台不能滿足性能要求,可以做資料加速,把某些分區的資料同步到資料倉庫裡,支援更快速的查詢。

以上就是整個資料資産的架構,通過資料資産中心進行管理,包括資料地圖、品質治理、以及價值分析等相關功能。

2.統一語義層(語義模型):強大的語義模組化能力和資料處理能力

基于統一語義層建構的智能化資料分析平台

接下來介紹統一語義層,也就是語義模型這一層。

從下往上看,模型定義包括四大部分:首先是視圖定義,可以通過拖拽的方式定義幾張表互相join形成資料視圖,也可以自定義SQL視圖;其次是次元定義,包括次元配置、次元層級配置、次元關聯字典等;第三是名額定義,指定聚合方式、使用複雜函數等;最後是進階設定,包括行級權限、自動加速選項配置等等。

在執行态,我們從性能、功能綜合考慮,對于簡單的語義查詢,直接生成一個SQL送出給存儲引擎去查詢生成結果集,對于一些非常複雜的語義查詢,會生成MDX送出給多元查詢引擎去執行,多元查詢引擎也是把它翻譯成SQL,最終生成結果集。

整個系統對外有一個接口層,業務方可以通過中繼資料接口查詢中繼資料資訊,也可以通過資料接口查詢我們的語義資料。右邊是每日自動加速,根據使用者配置,做大資料平台到Doris庫的加速。

3.統一語義層:資料生産、資料查詢打通,消除查詢流量峰值

基于統一語義層建構的智能化資料分析平台

再來介紹語義模型的一些細節。

其中非常重要的一點是HBO的能力,HBO的意思是基于曆史的優化,就是基于整個公司一些曆史查詢的特點,比如最近一天、最近一周、最近一個月的查詢的一些情況進行分析,自動預估今天哪些查詢可能會發生。公司每日有幾個大的業務峰值,一個是早上9點到10點,另外一個是下午2點左右,但是下層的存儲引擎、計算層可能沒有那麼大的計算能力,是以我們需要通過HBO這種能力實作預計算和平滑計算,把資料事先計算好,放到我們緩存裡面。

HBO的鍊路為,首先大資料平台裡面有一個任務排程系統,每當一張表T+1分區資料生成的時候,會發出一個資料産出事件,我們通過資料畫像采集到這個事件,通知HBO子產品。HBO基于曆史查詢可以預估今天會發生哪些查詢、再基于資料表産出事件感覺資料已經準備好,就會生成預計算任務放入隊列,平滑發起計算,并把結果緩存起來。當早上9點到10點間使用者查詢的時候,會首先看緩存中是否有命中,沒有命中再執行實時查詢。這裡有一個比較重要的名額,就是緩存命中率,是我們持續優化和提升的目标。

4.統一語義層:行級權限,實作每個人看到不同的資料

基于統一語義層建構的智能化資料分析平台

接下來介紹行級權限,前面提到公司希望實作千人千面,同一個模型、同一個看闆,每個人看到的資料是不一樣的,比如中國區的老總要能夠看到整個中國區的情況,河南、河北省級的人員隻能看到本地區的資料。

表的行級權限配置在權限表,模型生成的SQL會把權限表和資料表進行join,同時把一些環境變量比如目前使用者、所屬部門嵌入到SQL裡面,生成一個目前使用者所應該看到的SQL視圖,再融入語義查詢定義的次元、名額和過濾條件,最終生成SQL或者MDX送出給DB查詢結果集。

還有一種行級權限是基于配置的行級權限,不是基于表的。基于配置的行級權限是在資料分析平台裡面指定某些使用者擁有哪些次元成員的權限,這個采用記憶體計算進行過濾并最終生成結果集。這也是經常被使用到的一個能力。

5.統一語義層:細節打磨,提升性能

基于統一語義層建構的智能化資料分析平台

統一語義層有很多功能點,持續打磨了很長時間,這裡介紹幾個重要的細節。

第一個是多存儲引擎的适配,由于資料源種類非常多,需要資料類型适配、函數适配、函數改寫來适配不同的存儲引擎。

第二個是SQL優化政策,我們發現有些存儲引擎的優化器有缺陷,是以需要在統一語義層做一些SQL優化政策,比如謂詞下推、Subquery的消除等等。

第三個是模組化自動輔助,使用者在做多元模組化的時候,根據表和資料的特點,自動抽取一些多表的關聯關系,對于日期字段會自動生成一些日期的層級、同時加上日期轉換的函數,對于次元層級我們做了自動識别,比如省、城市這種地理層級,也可以識别成次元層級。

最後一點是資料倉庫引擎的選擇,我們做了很多的測試,比如對比了Doris和ClickHouse,最終從存儲引擎的可運維性、性能、以及使用者使用習慣等方面綜合考慮,最終選擇了采用Doris向量化版來支撐公司的快速實時查詢能力。

6.智能分析:大大提高分析的效率和品質

基于統一語義層建構的智能化資料分析平台

智能分析也是一個強需求,比如網際網路部門經常關注日活的變動,銷售部門可能關注每天銷量的變化,這裡介紹兩個具體的場景。第一個是異常檢測能力,我們基于模型建立看闆,如果這個看闆橫軸是一個時間次元,縱軸是一個名額,那我們就會形成一個随着時間變化的名額資料序列,這樣就可以對這個序列自動通過算法的方式來發現異常點位,這個識别需要排除節假日、季節性的正常波動,最終會生成一個異常點位的清單。

第二個是根因分析,如果使用者想看異常點位的原因,可以基于資料點位把這個模型(這裡已經不是基于看闆了)裡面的所有次元進行展開分析,檢視影響這個點位資料的真正原因是什麼,比如對于單次元根因分析,我們會發現今天手機銷量增加是與小米11機型有關,第二個影響因素是湖北省的銷量增加。多元度根因分析是拿多個次元來進行聯合分析,比如說今天銷量增加原因是“機型=小米13”以及“省份=湖南”,也就是說湖南省的小米13銷量比較多,導緻了銷量的整體增加。多元度根因分析因為需要進行整個模型裡面每個次元的資料探查,是以計算量比較大,是以要進行次元和次元項的裁剪。以上就是資料智能分析的能力。

04

産品介紹

最後一部分,簡單介紹資料分析平台的一些産品形态,給大家帶來一些畫面感。

1.圖表:豐富的類型支援和定制開發、多樣化的展示樣式

基于統一語義層建構的智能化資料分析平台

上圖展示的圖表能力,圖表是作為BI平台最重要的一項功能,我們支援業界常用的所有圖表類型,同時也根據業務需求場景定制開發了一些特殊的圖表類型,比如直方圖、雷達圖、矩形數圖、詞雲圖、還有名額趨勢卡等等,圖表類型還在持續增加。值得一提的是透視表的能力,這個透視表在手機部和中國區有着非常高的使用頻率,使用者可以在透視表裡指定行次元和列次元,行次元支援次元層級的展開,同時也支援如上圖中所示的資料展示的樣式,比如紅色代表上升、綠色代表下降,以及前面的Icon展示,這些都是我們根據業務的需求進行定制開發的。

2.簡報、預警:實作資料找人,讓資料觸手可及

基于統一語義層建構的智能化資料分析平台

第二個産品類型是簡報和預警。如果說看闆是人找資料,那麼這兩個産品能力實作的就是資料找人。資料會主動推送到使用者手機上,使用者直接打開手機檢視,這就是簡報能力。簡報支援基于富文本的配置,包括名額、圖表等都可以嵌入。還有一種推送是預警能力,基于預警的配置條件,當發現資料有異常時會給使用者發送預警消息。預警功能根據業務場景也做了很多的适配,比如父子預警,多個預警共享一些基礎配置;再比如有業務方對手機品質非常關注,他們希望發生預警之後,不是隻發一個消息,還需要開一個Jira工單來進行跟蹤,這也可以在系統裡進行配置。

3.嵌入式:讓資料和業務融合在一個平台

基于統一語義層建構的智能化資料分析平台

接下來介紹的是嵌入式的能力。很多業務部門有自己的業務系統,希望早上看他們的業務系統時就能看到我們平台的資料,而不必跳轉到資料分析平台上來看。這裡面有幾個關鍵的技術點,第一個就是我們希望通過一種低代碼、或者無代碼的能力,在資料分析平台裡面把某個想嵌入到業務系統的看闆,自動生成一行前端代碼,業務方的開發隻需要把這一行代碼嵌入他們的前端代碼裡面,就可以把我們的看闆嵌入他們的系統。第二個就是公司内部登入系統的打通,通過公司内部統一網關登入系統,實作跨域名的統一登入能力。第三個就是嵌入的看闆跟業務系統需要實作UI的統一,我們做了一些特定的開發定制實作這種能力。嵌入式能力,不但可以嵌入到業務系統,也可以友善地嵌入線上文檔系統裡,使用者浏覽文檔時可以看到動态的實時資料。

4.資料洞察:展示資料,同時展示資料波動的原因

基于統一語義層建構的智能化資料分析平台

最後要介紹的是資料洞察的能力。前面介紹了資料智能的基礎能力,這裡再進行一個圖形化的展示。左邊這個圖是異常檢測,根據一個時間序列,識别出這個資料的異常波動點,這裡明顯有兩個點是異常的,有一些波動是正常的需要剔除掉。右邊這個圖是根因分析,當發現這個異常點位之後,可以對其進行多元度的展開,就可以看到是哪個次元下面的哪些次元成員的資料造成了這次波動。

智能預警的能力,可以自動來檢測資料異常,發現資料異常之後通過簡報的方式推送消息給使用者。還有趨勢預測,基于業務場景、曆史資料、波動趨勢來預測未來的資料的變化。

今天的分享就到這裡,謝謝大家。

基于統一語義層建構的智能化資料分析平台

繼續閱讀