数据质量校验
DolphinScheduler-数据质量依赖于Spark2.4环境,需部署。
检查逻辑
检验方式
Expected指期望值,Actual指实际值
-
Expected-Actual
-
[期望值-实际值]
-
-
Actual-Expected
-
[实际值-期望值]
-
-
Actual/Expected
-
[实际值/期望值]x100%
-
-
(Expected-Actual)/Expected
-
[(期望值-实际值)/期望值]x100%
-
检验操作符
=、>、>=、<、<=、!=
阈值
当结果超出阈值,则告警。
失败策略
Alert指告警,Block指不告警。
期望值类型
-
FixValue:固定值
-
选择此选项,则需要填写固定期望值
-
-
DailyAvg:日均值
-
WeeklyAvg:周均值
-
MonthlyAvg:月均值
-
Last7DayAvg:最近7天均值
-
Last30DayAvg:最近30天均值
-
SrcTableTotalRows:源表总行数
-
TargetTableTotalRows:目标表总行数
例子
-
校验方式为:[Expected-Actual][期望值-实际值]
-
[操作符]:>
-
[阈值]:0
-
期望值类型:固定值=9。
-
假设实际值为10,操作符为 >, 期望值为9,那么结果 10 -9 > 0 为真,那就意味着为空的行数据已经超过阈值,任务被判定为失败
质量任务
单表检查:空值检查
空值检查的目标是检查出指定列为空的行数,可将为空的行数与总行数或者指定阈值进行比较,如果大于某个阈值则判定为失败。
-
计算指定列为空的SQL语句如下:
SELEC 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})
设置规则为空值检测,之后选择需要检测的数据源、数据表和字段(源表过滤条件为可选项)。检验方式为Expected-Actual(期望值-实际值),期望值类型为DailyAvg(日均值),也就是日均值-目标表字段为空数>=10为真,也就是该字段为空的行数需小于10才不会告警。
单表检查:及时性检查
及时性检查用于检查数据是否在预期时间内处理完成,可指定开始时间、结束时间来界定时间范围,如果在该时间范围内的数据量没有达到设定的阈值,那么会判断该检查任务为失败。
设置规则为及时性校验,之后选择需要检测的数据源、数据表和字段(源表过滤条件为可选项)。起始时间为$[yyyy-MM-dd HH:00:00]-3/24,即当前时间前3个小时,截止时间为$[yyyy-MM-dd HH:00:00],即当前小时,如果指定列有超出这个时间范围的,则告警。
单表检查:字段长度校验
字段长度校验的目标是检查所选字段的长度是否满足预期,如果有存在不满足要求的数据,并且行数超过阈值则会判断任务为失败。
设置规则为字段长度校验,之后选择需要检测的数据源、数据表和字段(源表过滤条件为可选项),设置字段长度限制为<=10。检验方式为Expected-Actual(期望值-实际值),期望值类型为DailyAvg(日均值),也就是日均值-目标表字段长度小于等于10的行数>=10为真,也就是目标表字段长度小于等于10的行数需小于10才不会告警。
单表检查:唯一性校验
唯一性校验的目标是检查字段是否存在重复的情况,一般用于检验primary key是否有重复,如果存在重复且达到阈值,则会判断检查任务为失败。
设置规则为唯一性校验,检验方式为 Actual/Expected(实际值/期望值),期望值类型为DailyAvg(日均值),也就是 字段重复值行数/日均值 !=0 为真则告警, 同理为不允许字段重复。
单表检查:正则表达式校验
正则表达式校验的目标是检查某字段的值的格式是否符合要求,例如时间格式、邮箱格式、身份证格式等等,如果存在不符合格式的数据并超过阈值,则会判断任务为失败。
单表检查:枚举值校验
枚举值校验的目标是检查某字段的值是否在枚举值的范围内,如果存在不在枚举值范围里的数据并超过阈值,则会判断任务为失败。
单表检查:表行数校验
表行数校验的目标是检查表的行数是否达到预期的值,如果行数未达标,则会判断任务为失败。
单表检查:自定义SQL检查
通过自定义SQL进行检查,该SQL必须为统计SQL,例如统计行数,计算最大值、最小值等。
注意事项:select max(a) as max_num from ${src_table},表名必须这么填。
双表检查:准确性检查
准确性检查是通过比较两个表之间所选字段的数据记录的准确性差异,例子如下
-
表test1
c1 | c2 |
a | 1 |
b | 2 |
-
表test2
c21 | c22 |
a | 1 |
b | 3 |
如果对比c1和c21中的数据,则表test1和test2完全一致。 如果对比c2和c22则表test1和表test2中的数据则存在不一致了。
双表检查:值比对
两表值比对允许用户对两张表自定义不同的SQL统计出相应的值进行比对,例如针对源表A统计出某一列的金额总值sum1,针对目标表统计出某一列的金额总值sum2,将sum1和sum2进行比较来判定检查结果。