Fork me on GitHub

基于统一语义层构建的智能化数据分析平台

以下文章来源于 https://zhuanlan.zhihu.com/p/635413937

导读 本次分享的主题是"基于统一语义层构建的智能化数据分析平台",主要包括以下几大部分:

主要内容包括:

  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.数据洞察:展示数据,同时展示数据波动的原因

最后要介绍的是数据洞察的能力。前面介绍了数据智能的基础能力,这里再进行一个图形化的展示。左边这个图是异常检测,根据一个时间序列,识别出这个数据的异常波动点,这里明显有两个点是异常的,有一些波动是正常的需要剔除掉。右边这个图是根因分析,当发现这个异常点位之后,可以对其进行多维度的展开,就可以看到是哪个维度下面的哪些维度成员的数据造成了这次波动。

智能预警的能力,可以自动来检测数据异常,发现数据异常之后通过简报的方式推送消息给用户。还有趋势预测,基于业务场景、历史数据、波动趋势来预测未来的数据的变化。

今天的分享就到这里,谢谢大家。



本文地址:https://www.6aiq.com/article/1686134039158
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出