数据批处理
介绍
此功能更新于4.1.0版本,如果之前部署过4.0.x版本需要根据4.0.xto4.1升级说明操作。
数据批处理主要满足从数据源中直接拉取业务数据,调用知识包进行规则计算,最终将知识包输出的数据再输出到配置的数据表中。
数据批处理-基本配置
在【设计规则】页面的菜单中选择【批处理】,打开数据批处理管理页面。
在数据批处理管理页面,点击【添加批处理】打开新建数据批处理配置页面。
勾选显示其他设置,可修改默认配置
- 异常数限制: 默认值是0,处理数据时遇发生异常的数量达到设置的值时,整个数据批处理任务停止,并设置执行失败。
- 异步:默认是异步,可以设置回调URL,即数据批处理任务执行完时会调用回调URL,不设置不调用。如果将异步勾选去掉,数据批处理任务将以同步状态执行,即请求触发任务后,等处理完返回结果。
- 是否启用多线程处理: 默认启用,默认开启10线程,单个线程每次获取数据1000条。不启用将以单线程执行任务。
- 启用REST: 默认不启用,是否开放HTTP Restful接口方式触发数据批处理任务。
数据批处理-批处理参数配置
批处理参数是在触发批处理任务时,动态传入的参数。可用于加载数据拼接SQL时使用,或者作为知识包参数入参使用。
数据批处理-知识包配置
点击知识包ID的【...】或者双击文本框,选取知识包
选取好知识包后,知识包有参数需要绑定批处理参数可以通过【添加参数】手动添加,或者通过【批量添加参数】选取知识包中参数进行添加。
数据批处理-数据加载配置
基本配置读取数据信息
- 数据源: 选取数据源管理中配置的数据源,作为加载数据的数据库
- 分页SQL: 加载数据用的SQL语句,SQL语句可拼如动态参数,格式为
:parameter
。 - 总记录数:提供查询加载总记录数的SQL
数据加载参数
配置好SQL后,如果SQL中有动态参数,可以通过【添加参数】手动添加,或者通过【批量添加参数】解析SQL中参数进行添加。
添加参数后,需要设置与批处理参数的绑定关系,这样在触发数据批处理任务是传入的批处理参数,就可以动态拼入SQL
变量映射
加载的数据要与知识包当中的变量进行映射配置:
- 选择知识包中需要映射的变量,因为一条数据将作为调用知识包的入参进行知识包调用。
- 选择知识包中的变量后,可以通过【添加变量映射】手动添加变量属性和SQL字段的映射,或者通过【批量添加变量映射】批量选取变量属性,如果SQL字段的类型名称和类型与变量属性一致,会自动进行绑定,如不一致需要通过字段下拉框选择。
数据批处理-数据保存配置
- 数据源: 选取数据源管理中配置的数据源,作为输出保存数据的数据源
- 事务范围:保存数据时,使用的事务类型,默认是Page。
- Batch:是整个数据批处理任务作为一个事务提交保存,如果遇到错误,将整体回滚保存数据。
- Page:是以分页批次的数据作为一个事务提交保存,如果遇到错误,将此页批次数据回滚保存数据。
- Record:是以单条数据作为一个事务提交保存,如果遇到错误,不会对其他已提交数据产生影响。
数据量大的批处理任务,从持久化数据层面,效率 Page > Batch >Record
添加保存项
保存数据配置中,可以针对一次知识包计算的输出配置多个保存项,用于将输出数据保存到多个表中。
点击【添加保存项】按钮,新增保存项的目标表与保存类型信息。
配置保存项添加知识包输出数据与表字段映射,可以通过【添加变量映射】手动添加,或者通过【批量添加变量映射】选取知识包中变量或者参数。
如果保存项的更新类型是update、delete,变量映射的属性中需要设置主键key。
设置保存项的数据过滤
知识包输出数据不一定所有的数据都需要保存到数据库 ,可以设置数据过滤,符合条件的才执行保存数据的操作。
在保存项上右键菜单中选择【设置数据过滤】
知识包输出数据如不符合设置条件的记录将不会提交保存
数据批处理-触发调用
配置完成的批处理需要右键【启用】,才能外部触发执行。调用方式有两种:Java SDK调用和REST调用
Java SDK调用
通过 BatchServiceManager.execute(Long batchId, Map<String, Object> params)
调用。
REST调用
在当前批处理右键点击【Rest服务配置】
勾选【启用REST】将允许当前数据批处理允许触发调用。
Rest接口如果需要安全验证,可勾选【安全验证】,填写验证用的用户名和密码,调用方需在HTTP Head中添加username和password
启用REST后,可通过【查看Rest服务描述】查看Rest接口的输入、输出和调用接口Url等信息。
{
"output": {
"fields": [
{
"dataType": "Long",
"name": "batchId",
"label": "批处理ID"
},
{
"dataType": "String",
"name": "batchName",
"label": "批处理名称"
},
{
"dataType": "DateTime",
"name": "startTime",
"label": "开始时间"
},
{
"dataType": "DateTime",
"name": "endTime",
"label": "结束时间"
},
{
"dataType": "String",
"name": "ip",
"label": "IP"
},
{
"dataType": "Integer",
"name": "readCount",
"label": "读取的记录总数"
},
{
"dataType": "Integer",
"name": "filterCount",
"label": "过滤记录数"
},
{
"dataType": "String",
"name": "status",
"label": "状态"
},
{
"dataType": "String",
"name": "msg",
"label": "信息"
},
{
"dataType": "String",
"name": "itemResults",
"label": "保存项明细",
"fields": [
{
"dataType": "String",
"name": "name",
"label": "保存项名称"
},
{
"dataType": "Integer",
"name": "readCount",
"label": "读取的记录总数"
},
{
"dataType": "Integer",
"name": "filterCount",
"label": "过滤记录数"
},
{
"dataType": "Integer",
"name": "writeCount",
"label": "写入记录总数"
},
{
"dataType": "String",
"name": "tableName",
"label": "物理表"
},
{
"dataType": "String",
"name": "updateMode",
"label": "更新类型"
}
]
}
],
"clazz": "com.bstek.urule.console.batch.BatchResult"
},
"input": [
{
"name": "code",
"label": "编号",
"dataType": "String"
}
],
"url": "http://localhost:8181/urulepro4/urule/batch/1501",
"authentication": false
}
在上面的JSON格式调用描述数据当中,“input”和“output”属性值分别表示输入和输出数据,“url”表示的是调用的当前数据批处理URL;“authentication”属性值表示的是当前Restful服务调用是否需要用户名密码验证,如果值是false,表示不需要验证。
- input:代表当前数据批处理配置了批处理参数,调用接口时需要传入。
- output:是调用后返回的数据,其中包含读取数据源读取数据总数、保存数据总数、过滤提交保存数、执行时间等信息。
可通过【REST调用】功能,进行快速触发当前数据批处理,如果设置的是同步执行,提交触发后将处理结果返回,返回信息包含执行状态等信息。
如果设置的是异步执行,触发后直接返回已开始执行时间,无执行结果信息。
执行结果可在团队主页面-日志管理-批处理执行日志中查看
可右键查看明细。