在数据治理时,经常会遇到个性化统计分析的场景:基于数据的某些属性进行组合筛选,只有符合条件的数据才进行统计分析。
传统的实现方式是:业务人员提供筛选条件,数据开发人员在ETL任务直接开发。这种方式主要有两个痛点:
- 需求上线周期长
开发人员须对ETL任务进行开发调试、发布上线,按天、周、月排期都有可能。 - 统计口径不直观
筛选条件都在ETL任务中,业务人员无法直观判断数据是否符合预期,往往在数据量波动比较明显的时候才会发现异常。
为了解决这些问题,数据治理平台提供了给数据打标签的功能:业务人员在数据治理平台上快速批量对数据打上个性化标签,数据开发人员只须筛选打上特定标签的数据,而无须直接对数据进行过滤筛选。通过这种方式,可以解决需求上线周期长、统计口径不直观的问题。
- 数据开发人员只须一次性开发ETL任务,基于标签进行数据筛选即可,具体的数据筛选交由业务人员在数据治理平台上操作。
- 业务人员在数据治理平台上面可以直观查看须统计的数据,可视化管理数据统计口径。
随着数据量的不断增长,单靠业务人员人工管理标签的工作会变得越来越繁琐:给10条数据打标签业务人员还可以接受,但要给成千上万条数据打标签时,正常人都会抗拒这种操作了。
所以基于规则自动给数据打标签的需求,自然就会提上议程。当业务人员需要的筛选条件简单时,数据治理平台可以快速开发功能进行支持,但随着业务的发展,筛选条件会变得越来越复杂。
为了支持这些条件,平台功能会变得越来越臃肿,而且还需要投入开发人力排期开发,无法快速满足日新月异的业务需求。
因此,经过调研之后,决定引入规则引擎,平台基于规则引擎提供可视化配置功能,由业务人员进行自定义配置,平台根据业务配置自动匹配符合条件的数据,打上对应的标签。
本文不涉及规则引擎的调研过程,相关规则引擎的优劣对比不在本文讨论范围。本文主要介绍规则引擎的基础语法,以及在数据治理中的使用实践。
2.1 简介
Aviator是一个高性能、轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值。
官方地址:https://github.com/killme2008/aviatorscript
用户手册:https://www.yuque.com/boyan-avfmj/aviatorscript/cpow90
2.2 关键函数介绍
这里主要介绍关键函数:
字符串函数
Sequence 函数(集合处理)
示例:
3.1 数据匹配
目前业务侧暂只需要对数据进行匹配,不涉及数据计算。
因此基于常见的用户场景,数据治理平台抽象出两种运算符:比较运算符、范围运算符。
- 比较运算符
定义如何比较字段取值与预期值。平台目前提供了三种比较方式:,,。
- 范围运算符
由于字段取值与预期值都可能是多个,统一以数组形式存储数据,通过得到每个字段值与预期值的比较结果后,须通过定义多个比较结果如何进行组合运算,得到最终结果。平台目前提供了三个运算符:,,。
示例:
3.2 业务逻辑
数据匹配只能针对单个字段,业务往往需要针对多个字段进行组合排列,根据多个字段的匹配结果进行取舍。
因此数据治理平台提供了逻辑运算符,对多个字段的匹配结果进行与或运算。
- 逻辑运算符
定义如何将多个字段的匹配结果进行与或运算,得到最终匹配结果。平台提供了两个运算符:,。
3.3 规则参数
基于数据匹配与业务逻辑,数据治理平台抽象出以下数据结构,方便业务进行个性化配置:
示例:
假设有2条数据如下:
需要筛选状态为,并且分类为的数据,生成的数据结构如下:
3.4 表达式转换
基于3.3节的数据结构,参考2.2节的示例,生成表达式
3.5 数据转换
规则引擎需要将数据转换为类型,作为输入参数。
3.6 规则匹配
基于规则引擎开发的自定义规则功能,既能让业务直接进行个性化规则配置,快速对匹配的数据打标签,也极大解放了平台开发的人力,从重复乏味的定制化功能开发抽身出来,为业务实现更有价值的功能。