前言:规则引擎通过将业务规则和开发者的技术决策分离,实现了动态管理和修改业务规则而又不影响软件系统的需求。以下通过实例对基于SQL查询、自定义规则等一系列场景来说明规则引擎在数据分析中的应用。
在现代的企业级项目开发中,商业决策逻辑或业务规则往往是硬编码嵌入在系统各处代码中的。但是外部市场业务规则是随时可能发生变化的,这样开发人员必须时刻准备修改、更新系统,降低了效率。在这种背景下,规则引擎应运而生,它通过将业务规则和开发者的技术决策分离,实现了动态管理和修改业务规则而又不影响软件系统的需求。规则引擎具有广泛的应用领域,同样也适用于数据分析和清洗。
假设我们有以下所示的一个表结构
字段名 |
字段类型 |
说明 |
Name |
Varchar(50) |
姓名 |
Sex |
Int |
性别(1:男,0:女) |
Department |
Varchar(50) |
部门 |
Salary |
Int |
工资 |
我们可能需要判断工资(Salary)字段不超过5000,按照此规则对该表中的数据进行清洗分析。
在数据分析中,数据通常存储在如上所示的数据库表中,并且数据量也是比较大的。不可能一次性地导入到内存中供规则引擎使用。因此我们将通过规则引擎来分批读取并导入数据到内存中。
通过规则引擎进行数据分析将遵从以下所示的结构步骤:
1:需分析的数据
2:数据读取
3:将数据写入内存
4:规则库
5:规则引擎
6:分析结果
工作原理
首先从需要分析的数据库中按照批次读取数据,然后将读取的数据放入内存中,再按照规则对内存中的数据进行过滤分析,当内存中的数据分析完成后,清空内存中的数据,再读取下一批数据进来进行新一轮的分析,知道所有的数据处理完毕为止。
规则库
用于判断工资的业务内容我们用VisualRules提供的自然语言来进行表示,从而构成规则库,如下图所示:
通过规则引擎对象库中添加test.dbs数据库连接对象,然后通过该连接就可以直接访问数据库,编写查询,插入,删除,更新等语句
在SQL语句编写完成后,我们就可以在规则中执行该语句
在规则包中添加一条规则,然后将复制的执行SQL的方法粘贴到规则的那么中
这样,当规则运行的时候就会执行该查询,同时会把查询得到的数据放入到内存中,在这里我们定义了内存表这个规则对象,可以直观的看到内存中的数据
第二步:数据分析处理
数据加载到内存中以后,我们需要取出来用配置好的规则来进行分析过滤
因为path由3部分组成,每个部分都有对应的规则,所以我们先把这3部分按照特定的字符来分开,然后看第一部分是否与业务类型一致,第二部分是否与指标档案,第三部分的数字是否与页号一致,如果任何一个不一致,那么该条数据是错误的数据
从上面的规则配置来看,规则实际上是对业务知识的抽象,其表示形式与具体数据库无关,因此用户在数据质量分析过程中编写的规则能够在其他相似的业务环境下复用。假如以后需要对其他的表进行数据监控。这种情形下,用户无需重新编写规则只需利用先前在数据分析中定义好的VisualRules规则。
最后,我们可以看出基于VisualRules规则引擎的数据分析系统具有以下优点:
1:规则可以从所有应用程序具体化到一个集中式的规则库。在这个规则库中,可以使用专门的规则管理工具(如TemaServer)来管理这些规则
2:规则本身是动态的,允许在不重新构建系统组件的情况下在整个系统实现业务规则的变化
3:VisualRules的扩展性允许用户自定义新的运算函数和清洗方法
4:基于VisualRules规则的数据分析可以实现良好的交互性
5:以VisualRules表示的规则灵活的改变和很好的复用