一种对调度工具的数据质量增强方法
2020-02-29兰清南京星邺汇捷网络科技有限公司
兰清 南京星邺汇捷网络科技有限公司
前言
传统调度工具的做法:
1)负责把被调程序调起来;
2)传递一些参数给被调程序;
3)被调程序执行完成后返回成功或失败给调度程序;
4)调度程序根据返回的结果判断是否继续执行;
5)整个调度过程,调度工具都不负责数据质量工作,所有的数据质量工作都由被调程序或独立的数据质量模块负责。
本文尝试提供一种方法,把一部分相对通用的数据质量工作提到调度工具里做,被调程序或另外独立的数据质量模块只需要聚焦在更加重要的数据质量稽核即可。
1 方法描述
1)调度程序跟被调程序之间:在已有参数接口规范的基础上,增加一个基于XML的参数返回接口规范,通过XML承载数据质量相关的参数,要求被调程序按照规范返回参数值;
XML参数规范描述如下:
<DISPATCH_DQ>
<PARA PARA_ID= "1" TYPE= "COUNT">
<COUNT COUNT_ID="1" COUNT_NAME="表总记录数"
COUNT_VALUE="1673" COUNT_TIME="2019.7.1"
/>
</PARA>
<PARA PARA_ID= "2" TYPE= "SUM">
<SUM SUM_ID="1" SUM_NAME="通话分钟数累加和"
SUM_VALUE="8235" SUM_TIME="2019.7.1"
/>
<SUM SUM_ID="2" SUM_NAME="漫游通话分钟数累加和"
SUM_VALUE="1234" SUM_TIME="2019.7.1"
/>
<SUM SUM_ID="3" SUM_NAME="......"
SUM_VALUE="......" SUM_TIME="......"
/>
</PARA>
<PARA PARA_ID= "3" TYPE= "LSUM">
<LSUM LSUM_ID="1" LSUM_NAME="手机号末四位ASCII码之和"
LSUM_VALUE="2789" LSUM_TIME="2019.7.1"
/>
<LSUM LSUM_ID="2" LSUM_NAME="......"
LSUM_VALUE="......" LSUM_TIME="......"
/>
</PARA>
<PARA PARA_ID= "......" TYPE= "......">
</PARA>
</DISPATCH_DQ>
<PARA> </PARA>是某个类型参数的定义:
类型名称 返回参数名称 返回参数说明COUNT 总处理记录数 被调程序总共处理了多少条记录数,可以有不同维度的总处理记录数SUM 字段的累加和可以有不同字段的逻辑计算和,比如"手机号末四位ASCII码之和"等其他 其他可以用于验证的参数数值型字段的SUM值,可以有不同字段的累加和,比如"通话分钟数累加和"、"漫游通话分钟数累加和"等LSUM 字段的逻辑计算和
<COUNT COUNT_ID="1" COUNT_NAME="表总记录数"
COUNT_VALUE="1673" COUNT_TIME="2019.7.1"
/>
这个是COUNT类型的参数属性值,包括ID、名称、值、生成时间。
<SUM SUM_ID="1" SUM_NAME="通话分钟数累加和"
SUM_VALUE="8235" SUM_TIME="2019.7.1"
/>
这个是SUM类型的参数属性值,包括ID、名称、值、生成时间。
<LSUM LSUM_ID="1" LSUM_NAME="手机号末四位ASCII码之和"
LSUM_VALUE="2789" LSUM_TIME="2019.7.1"
/>
这个是LSUM类型的参数属性值,包括ID、名称、值、生成时间。
2)调度程序按照周期或条件进行调度,然后按周期沉淀数据质量相关的参数值;
被调程序返回的XML参数值经过解析存储在数据库,为了处理性能考虑,采用横表模型进行表模型设计,表结构如下:
序号 字段名 字段解释1 COUNT_1 XML里COUNT类型的字段:字段名 = COUNT + 参数ID 2 COUNT_1_VALUE 3 COUNT_1_TIME 4 COUNT_2 5......6 SUM_1 XML里SUM类型的字段:字段名 = SUM + 参数ID 7 SUM_1_VALUE 8 SUM_1_TIME 9 SUM_2 10 ......11 LSUM_1 12 LSUM_1_VALUE 13 LSUM_1_TIME 14 LSUM_2 15 ......XML里LSUM类型的字段:字段名 = LSUM + 参数ID
3)一般沉淀几个周期后,调度程序就可以根据沉淀的参数历史值进行异常判断:被调程序是否出现了异常(即便被调程序是返回成功),这种异常可能是业务原因引起的,也可能是技术原因引起的。
本文采用多组动态阈值的方式进行参数异常的判断,每一组动态阈值针对一种异常的严重程度,常见的可以分为三组动态阈值:
低动态阈值:表示一般性的异常。
中动态阈值:表示中等程度的异常。
高动态阈值:表示非常严重的异常。
根据第2步设计的表结构,就可以得到参数的历史值,然后应用统计学上的方法对参数历史值进行建模,得到三组动态阈值。比如利用均值+标准差的方式可以得到一段时间内历史数据的均值μ和标准差σ,然后我们就可以得到三组动态阈值,示例如下:
低动态阈值:[μ-2σ, μ+2σ]
中动态阈值:[μ-4σ, μ+4σ]
高动态阈值:[μ-7σ, μ+7σ]
然后我们就可以利用这三组动态阈值来判断被调程序的某个参数是否出现了异常,并且根据动态阈值的低、中、高采取不同的措施。
只要被调程序的某个参数出现问题,我们就可以判断被调程序出现异常了。
2 方法应用
当判断被调程序出现异常时,如何把异常结果应用在调度流程中呢,可以通过设置规则来实现:
1)直接阻断
当异常程度超过预设的高动态阈值时,可以直接阻断,终止调度流程。
2)派单整治
当异常程度超过预设的中动态阈值,但低于高动态阈值时,可以派单进行异常处理。
3)发预警信息
当异常程度超过预设的低动态阈值,但低于中动态阈值时,只需要发出预警信息即可,调度流程按正常进行调度。
3 结语
本文尝试提供一种方法,把一部分相对通用的数据质量工作提到调度工具里做,增强调度工具的能力,同时简化被调程序的数据质量稽核工作,提升调度效率,提高调度准确度。