数据质量任务是用于检查数据在集成、处理过程中的数据准确性。本版本的数据质量任务包括单表检查、单表自定义SQL检查、多表准确性以及两表值比对。数据质量任务的运行环境为Spark2.4.0,其他版本尚未进行过验证,用户可自行验证。
用户在界面定义任务,用户输入值保存在
TaskParam
中 运行任务时,Master
会解析TaskParam
,封装DataQualityTask
所需要的参数下发至Worker。 Worker
运行数据质量任务,数据质量任务在运行结束之后将统计结果写入到指定的存储引擎中,当前数据质量任务结果存储在dolphinscheduler
的t_ds_dq_execute_result
表中Worker
发送任务结果给Master
,Master
收到TaskResponse
之后会判断任务类型是否为DataQualityTask
,如果是的话会根据taskInstanceId
从t_ds_dq_execute_result
中读取相应的结果,然后根据用户配置好的检查方式,操作符和阈值进行结果判断,如果结果为失败的话,会根据用户配置好的的失败策略进行相应的操作,告警或者中断
添加配置信息:<server-name>/conf/common.properties
data-quality.jar.name=dolphinscheduler-data-quality-dev-SNAPSHOT.jar
这里的data-quality.jar.name
请根据实际打包的名称来填写,
如果单独打包data-quality
的话,记得修改包名和data-quality.jar.name
一致。
如果是老版本升级使用,运行之前需要先执行sql
更新脚本进行数据库初始化。
如果要用到MySQL
数据,需要将pom.xml
中MySQL
的scope
注释掉
当前只测试了MySQL
、PostgreSQL
和HIVE
数据源,其他数据源暂时未测试过
Spark
需要配置好读取Hive
元数据,Spark
不是采用jdbc
的方式读取Hive
校验公式:[校验方式][操作符][阈值],如果结果为真,则表明数据不符合期望,执行失败策略
校验方式:
操作符:=、>、>=、<、<=、!=
期望值类型
例子
假设实际值为10,操作符为 >, 期望值为9,那么结果 10 -9 > 0 为真,那就意味列为空的行数据已经超过阈值,任务被判定为失败
空值检查的目标是检查出指定列为空的行数,可将为空的行数与总行数或者指定阈值进行比较,如果大于某个阈值则判定为失败
计算指定列为空的SQL语句如下:
SELECT COUNT(*) AS miss FROM ${src_table} WHERE (${src_field} is null or ${src_field} = '') AND (${src_filter})
计算表总行数的SQL如下:
SELECT COUNT(*) AS total FROM ${src_table} WHERE (${src_filter})
及时性检查用于检查数据是否在预期时间内处理完成,可指定开始时间、结束时间来界定时间范围,如果在该时间范围内的数据量没有达到设定的阈值,那么会判断该检查任务为失败
字段长度校验的目标是检查所选字段的长度是否满足预期,如果有存在不满足要求的数据,并且行数超过阈值则会判断任务为失败
唯一性校验的目标是检查字段是否存在重复的情况,一般用于检验primary key是否有重复,如果存在重复且达到阈值,则会判断检查任务为失败
正则表达式校验的目标是检查某字段的值的格式是否符合要求,例如时间格式、邮箱格式、身份证格式等等,如果存在不符合格式的数据并超过阈值,则会判断任务为失败
枚举值校验的目标是检查某字段的值是否在枚举值的范围内,如果存在不在枚举值范围里的数据并超过阈值,则会判断任务为失败
表行数校验的目标是检查表的行数是否达到预期的值,如果行数未达标,则会判断任务为失败
准确性检查是通过比较两个表之间所选字段的数据记录的准确性差异,例子如下
c1 | c2 |
---|---|
a | 1 |
b | 2 |
c21 | c22 |
---|---|
a | 1 |
b | 3 |
如果对比c1和c21中的数据,则表test1和test2完全一致。 如果对比c2和c22则表test1和表test2中的数据则存在不一致了。
两表值比对允许用户对两张表自定义不同的SQL统计出相应的值进行比对,例如针对源表A统计出某一列的金额总值sum1,针对目标表统计出某一列的金额总值sum2,将sum1和sum2进行比较来判定检查结果