开发者学堂课程【智能数据建模训课程 :客户案例:数仓规范化-菜鸟数据模型管理实践(二)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1223/detail/18312
客户案例:数仓规范化-菜鸟数据模型管理实践
三、 数据建模平台建设
1. 智能数据建模平台规划
数据建模平台是菜鸟和阿里云共同研发的基于大数据数仓建设的建模平台,在此过程中,菜鸟实际上是作为一个使用方去梳理数据建模平台所要包含的功能。梳理是从四个方面去研发此数据建模工具,首先是规范定义,实际上在企业的数据化规范建设中会定义很多规范,比如数据的研发规范、命名规范、META 的研发规范等,规范的篇幅较长,同时在菜鸟前期实际上是没有数仓建模平台的,是通过线下建模的方式,比如通过 EXCEL 的梳理数据后进行模型的设计和线下评审,此过程从始至终都是线下的过程,带来的问题是会有很多人在研发数据规范时因为疏忽没有去进行规范,没有进行规范会导致数仓规范不严谨,同时如果下游有了大量的引用后,实际上切换成本较高,会导致积累的过程,即已经发布的模型改成特别高,不去修改整个数仓的规范性会越来越差,因此操作中希望把规范的定义搬到线上,大体是数仓的分层、分层划域、业务过程、基础策略、表的生命周期、指标的生命周期以及维度,词根、码值的管理。
第二个功能是发布评审,上述提到之前操作是线下的过程,未搬到线上,当工程师、架构师较忙时,实际上评审过程可能会不太严谨,尤其是在研发较忙时可能未经过评审的过程直接就发布了,同时在发布到线上之前要强校表的模型,表的命名是否规范,比如字段是否规范,同时去支持多引擎的发布,比如一项数据可能是存在 ODPS 或 TAP 上,另一项数据可能在 MSQ 或 ER 库中等等,还有是评审和影响性检查,即模型发布以后对于下游的引用,此模型的 ETL 脚本是否有影响,比如有时候新增一个字段,但下游的人使用时是全新的方式,其表没有形成一个新的字段,就会导致下游报错。
另外核心重要的一点是便捷开发,操作希望把线下建模的方式搬到线上不影响开发效率,因此规划了一些帮助提高建模效率的一些功能,比如:可视化建模、逆向建模、EXCEL 交互,多表克隆,智能翻译,代码模式以及 ER,META 互通是和内部的 META 产品是类似于一个数据检索的功能打通,还有便捷 ETL ,数据质量。
最后是从使用的角度上考虑,第一研发人员可能希望要有业务分类视角,数据域视角,对于业务人员我们希望提供一个数仓大图和相关的数据字典,便于他们去理解数仓,还有一个是成本治理的角度,比如地址上的模型是否可以做归并,做下线等等。接下来阐述一些重点功能,分享菜鸟这一侧是如何思考的,中间是如何建设的,遇到哪些问题。
2. 智能数据建模平台落地
菜鸟在集团内与阿里云、DateWorks 产品团队共建智能数据建模产品,主要包括数仓规划、数据标准、数据建设、数据指标,将建模平台规划落地与产品建设紧密相连。
3. 核心功能-规范定义
上述四个指标之前已经提及,接下来阐述一下核心功能。菜鸟整个数仓规范很多,由于业务可能较复杂,整个分工划域分为5层,从 ODS 数据引用层到 DWD 明细数据层、DWS 汇总数据层、ADS 应用数据层、 DIM 维度层,同时还有很多业务分类,大概有12大级的业务分类,之前提到的末端是属于其中的一类。同时还有一些子集的业务分类,即业务分类下还有子业务分类,另外还有13大数据域,比如快递、客诉、财务等以及若干业务过程。从命名规范上来说,是基于上述分层划域才有业务过程,并增加了一个存储策略的要素,大概有六类命名规范。有六类命名规范的原因实际上是在业务发展的过程中,有的时候业务分类确定了一级,但是中间研发了一段时间后发现一级分类不能有效的在数仓规范过程中完成它的规范性,会有一个慢慢迭代的过程,还有一些词根等,也希望在规范定义中将他们初始化进来。
4. 核心功能-逆向建模
第二个核心重要的功能是逆向建模,上述也阐述过逆向建模,相比较于正向建模而言,实际上不论是做维度建模还是 Fast建模,要经历三个必要的阶段,第一是概念模型设计,第二是逻辑模型设计,第三是物理模型设计。
概念模型设计即在维度建模中梳理总线矩阵,这是概念模型设计中最核心的一个阶段,SETS 建模中,抽象实体以及实体之间的关系,实际上是概念建模最重要的事情;接下来是逻辑模型的设计,逻辑模型的设计比如说维度建模中的两类,一类是事实表的设计,另一类是维度表的设计;最后当逻辑模型介绍完之后需要物理化,即需要建设到数据模型仓库中,比如 TAP 重组需要去建表,同时去指定一些组件,执行一些非控,即物理模型设计。逆向是从物理模型到概念,逻辑模型的一个过程,即 TAP 数据库中已经有表,需要将它反向到逻辑模型当中,此过程即逆向过程。在逆向建模功能设计时,实际上数据核心平台要做的是将,维度表,事实表,还有汇总表挂载到对应的目录,即之前提到的分层划域,应该挂载到哪些业务分类下,哪些业务过程下,其中有一个在过程中面临的问题是历史不规范的表更改,历史不规范的表可能有多种原因,一是历史规范在变化,二可能是研发人员研发过程不够严谨,上述提及到成本在表部分较高,当一张表发布后,下游可能有十几或二十多个项目在引用,对于研发人员来说,改造成本较高。因此当前的策略是对于历史不规范的表未做改造要求,不需要特别按要求来改造。
同时第1个是批量逆向,即设计时考虑如何将大概几千张的表归到数据库中,通过表名匹配去完成批量逆向,此匹配针对当前遵守最新规范的表,对于之前提到的研发时不太规范的表是运用 FML 批量调整, FML 是 DateWorks 团队开源的,基于维度建模的 DSL 语言方程,比如原来的 tap,在建表时不能指定其业务分类,不能指定其数据域,也不能指定其业务过程。基于 FML 语言,就可以进行调整,可以进行简单的业务分类,数据域,以及业务过程,通过它可以对不规范的表进行批量调整。如图:
5. 核心功能-多表克隆
接下来是多表克隆,在模型设计过程中多表克隆是最常用的建模过程,实际上需要对原表进行数据探查,然后再自我进行模型表设计,创建是基于已有的表,比如原层,ODS 层已有的表,原系统数据库当中原有的表,进行一个适当的勾选。需要从 N 张表中选取所需要的字段,然后进行顺序的调整,最终形成需要的逻辑模型,此过程之前是线下在 EXCEL 上把两张表的字段全部拷贝出来,然后再选取自己所需要的字段做一个适当的排序等等,此时可通过多表克隆工具来选取已有的表。此表可能不仅仅是 ODS 层的表,可能会跨 project 引用,或者跨协议引用,因此这种时候都可以选择,选择自己的表以后,以勾选字段的方式进行建模,在此过程中熟悉建模过程的操作者,可能会认为已经选择了表,通过简单的 ETL 脚本就能生成,已经可以生成 fronta 表,grintd 表, grint 条件是不明确的,因为其依赖于研发人员进行数据探查之后得出的关联的的条件,因此希望通过这种建模方式生成一个简易的 ETL 脚本,就不需要把一大串字段批量的编辑到 ETL 脚本中,只需要借助此建模工具。
6. 核心功能-代码模式
第二个功能是代码模式,如果不是从0~1的过程建设数仓,只是大量的维护在里面,实际上很多时候,比如上游的产品或者上游的技术发布了一个新的功能,不知道数据从哪里取得,通过代码模式可获得简单的取出逻辑,此时就会评估在数仓中是否需要新增一个模型或模型表,数仓中已经有简单的脚本了,操作中不希望通过 Excel 的方式去规整,实际上更多是希望把脚本直接搬运到平台上,通过脚本基于选择的字段或者同时支持一个简单的函数,比如 SUM,比如取别名等等,把这些字段自动的给定到模型的字段中,此功能目前已经实现。在建模工具中,实际上,这种模式相当于知道脚本再去做表,因此,使用此功能时,需要把表定义好,才能使用这个功能,这个是在研发过程中比较需要的模式。
注意代码模式,必须定义好表命名并保存,才可使用。
7. 核心功能 -Excel 代码模式
另外一个是 Excel 的操作,对于很多比较老的数仓而言,他们对于E xcel 的操作是比较方便的,因此考虑清有两个功能,一个 EXCEL 的导入, 去定义表名,表的业务分类,数据分类等等,然后去定义字段,字段的类型,备注等等。通过此模板,可以批量导入到建模平台,还有一个功能是 EXCEL 交互,当导入以后想批量改变一些东西,可以把这些东西拷贝到本地的 Excel 中,在本地的 Excel 中编辑好以后,在反向粘贴到建模平台中。如下图:
8. 核心功能-发布评审
再一个核心功能是发布评审,之前菜鸟的数仓没有严格的执行此环节,在研发中,实际上希望把发布评审功能应用起来,评审实际上在规划时数仓架构的工程师、架构师可能会很少,因此希望增加一个审批组的概念,就是一人通过即通过,同时在模型评审时,从模型的相似度,描述丰富度,血缘关系等等,或者模型是否降了组件或者标记了非空等等衡量模型研发的是否规范,衡量模型好坏的指标辅助评审都在后续的规划中。此功能第一应用在模型评审时,第二应用在事后治理,即事后已经产出模型,存量模型也可以通过模型相似度,丰富度,血缘等等去辅助建模人员进行数仓优化。
9.核心功能-智能翻译
比较重量级的功能是智能翻译,企业数仓中有很多命名的词典,中国人常用的是中文及其词根作为数仓的规范,目的是保证数仓模型统一的辨识度,方便理解。当看到一个英文字段,就能知晓其意思。在此过程中可能只定义了一少部分的词根,在后续使用过程中也没有去追求词根,增量的词根也未及时维护进来,实际上此规范是遵守得不好的一项,因此希望有智能翻译的功能。
此功能在规划中包括几块,第一个是标准词根的定义,实际上不论之前的分层划域或者时间周期,修饰词根的指标和已经规范的字典,已经规范的字段的名称,都是使用其标准的词根。在应用后续输入一个中文时,需要使用 NLP 精准分词,精准分词遵守以最长化的原则,比如词根中有客户,有名称,有客户名称,此时会优先分类出客户名称,比如说菜鸟客户名称,会发现菜鸟不在词根库中,就希望通过机器翻译的功能把菜鸟应用翻译出来,把客户名称的英文从词根中捞出来,然后进行拼接,当遇到菜鸟名字没有时,建模人员可以添加到词根库中,如此会形成良性的循环过程,词根也会越来越丰富。同时引用了机器翻译,可以做批量性字段自动命名的工作,此功能在做汇总成设计时用处颇大,因为当做指标设计时突然按照客户需求或业务需求可能会梳理100多个指标层,此时可能采用原来的方式较难操作,对于英文较好的操作者来说,可直接翻译,对于英文不好的操作者来说可能需要百度和谷歌翻译等等,因此希望把机器翻译的功能增加进来。此功能目前仍在内测阶段,后续会尽快的发布出来。
10. 核心功能-数仓大图
接下来是基于用户使用视角希望提供的数据使用字典,实际上是把当前已有的数据模型导制出来,包括其表名,分层,业务层,字段的详细备注,还有表的描述等等信息批量提供给业务人员。另一个是数仓大图,数仓大图没有在建模平台中去实现,阿里云在研发一个数据资产管理的平台,实际上在此初步实现了3D资产全景的构建,在后续的规划过程中,实际上可能希望提供一些贴标签,用户评论等等功能,因为从使用者,研发人员来看,已经做了很多描述,不论是分层划域还是自己的描述,实际上都比较偏向于技术,很多时候业务人员希望对这张表熟悉之后用业务上的口吻对这张表进行打标签,即希望在资产数仓大图或者资产管理平台去构建此需求。