本周为大家解析设置了数据质量校验,但是未处触发校验的情况
触发校验前提:
DQC必须要在调度触发任务,并且对表数据有修改之后才可以触发,例如:
1、insert overwrite table xxxxxxx
2、create table as select xxxxxxx
设置了校验,也有对表数据修改的操作,但未触发校验的日志表现情况:
触发了DQC Hook,但实际并没有进行数据质量校验的情况,是未触发实际的校验,一般有以下几种情况:
1、如果是SQL级别的校验,在触发时,日志中打印的业务日期set SKYNET_BIZDATE=20190826;必须和insert的分区相符,才可以触发。类似如下截图所示,业务日期和触发分区不符,必须改成任务级别才可以。
2、用户在分区表达式中设置了对当前时间前一天的校验,但在运行日志中,校验的又是当前时间的分区,会出现匹配不上分区的情况,不会触发规则校验,这时候,需要把分区表达式中改为对当前时间的校验,即:ds=${yyyymmdd}/xxxxxxxx/xxxx/xxx……
下图中的另一个情况是:用户设置了多级分区,但日志中请求DQC的参数数据显示的分区顺序,没有和设置的分区表达式中的分区顺序匹配上,这也是一种不会触发校验的情况。
3、odps表有二级分区,但在规则配置的分区表达式中,只设置了一级分区表达式,同样也会因为没有匹配上分区,而不触发校验。
分区表达式
分区表达式一定要写到最小粒度,而DQC支持的最小粒度为天。例如:我odps表有二级分区,ds=yyyymmdd hh=hh24,那么在写分区表达式时,一定要指定到二级分区hh,否则无法触发校验。
其中弹内需要使用正则表达式来编写,弹内、公有云多级分区表达式如下所示:
弹内多级分区写法:ds=${yyyymmdd-1}/hh=<[a-zA-Z0-9_-]*>
公有云多级分区写法:ds=$[yyyymmdd]/hh=$[hh24]
注意:弹内分区表达式符号使用“{}”,公有云符号使用“[]”。
总结:
触发数据质量规则校验,必须要对odps表数据有修改(insert、create)之后、表的分区也和规则设置的分区表达式匹配上方可触发哦。
DataWorks百问百答历史记录 请点击这里查看>>
更多DataWorks技术和产品信息,欢迎加入【DataWorks钉钉交流群】