数据质量主要体现在数据的完整性、唯一性、及时性、有效一致性和稳定性等。数据接入到数仓的过程当中,为了避免大量的脏数据产生,一套完善的数据质量监控系统是必不可少的。
相关概念
• 校验字段
我们要应用质量规则的字段。
• 数据质量规则
数据进行质量校验时的规则,我们可以针对具体的字段设置质量规则。例如,如果需要关注某个表中的行数变化及主键是否重复,则可以将行数变化和主键是否重复抽象为一种数据质量规则模板。
• 规则校验条件
当我们对某张表的某个字段应用了一个数据质量规则模板,接下来我们就要为这个规则设置触发条件,这就被称为规则校验条件。比如,我们应用的规则为:name字段空值校验,我们设置的规则校验条件为:异常行数 > 10。表达的意思是:当数据中name字段的空值行数超过10行,我们就认为规则匹配成功。
数据质量可视化
数据表选取
由于我们的数据质量是基于数据表的,在配置质量规则之前,我们需要选取一张表。
质量规则列表
数据表选定之后,我们就可以基于选择的数据表来配置质量规则了。
对于一个表的某个字段,可以配置多个质量规则。如下图,我们除了配置基本的质量规则外,还可以配置一些调度信息和告警信息。配置的调度信息可以使得配置的质量规则定时执行,当触发某个质量规则时,配置的告警信息会将匹配成功的信息推送给相关人员。这样可以及时知晓数仓中表及字段的预警信息。
调度配置
接下来,我们看下调度配置:
这里,我们可以设置质量规则运行的周期,即cronTab表达式。并且能够实时计算出最近5次的运行时间。也可以设置分区字段的时间格式,我们在规则执行的过程中会以选择的时间格式计算出基本时间。
告警配置
我们再来看下告警配置。当我们为质量规则绑定了告警配置,触发规则条件时,会将匹配信息推送给相关人员,通知方式支持钉钉、短信、企业微信、邮件等等,当然也可以根据具体情况设置合适的告警方式。
新建质量规则
这也是数据质量的核心部分。不同的质量规则模板可选的校验条件也不尽相同,接下来会详细介绍每个规则模板。
完整性
-
• 字段空值校验
用于对单字段是否是空值进行校验
对应的校验条件:
-
• 字段空字符串校验
用于对单字段是否是空字符串进行校验
对应的校验条件:
唯一性
• 字段唯一性校验
1、用于对单字段唯一值/非唯一值进行校验;2、唯一值的定义:原数据group by后count=1的数
对应的校验条件:
-
• 字段分组个数校验
1、用于对单字段数据去重值校验 ;2、去重值的定义:原数据的distinct后的数据
对应的校验条件:
-
• 字段重复值个数校验
1、用于对单字段重复且多余的数据进行校验;2、如数据1,2,2,2;则重复数据为多出的2,2
对应的校验条件:
及时性
-
• 单表时间字段比较
1、用于对同一表的两列的时间差进行比较;2、如当日发货的快递场景,用于对比同一张表里的下单时间和发货时间,不能超过24小时
对应的校验条件:
-
• 两表时间字段比较
1、用于对不同表的两列的时间差进行比较;2、如当日达的快递场景,用于对比表A的下单时间和表B的签收时间,不能超过24小时
对应的校验条件:
有效性
-
• 字段格式校验
1、使用识别表达式或者正则表达式对单字段的格式进行校验;2、如对身份证格式、手机格式的验证
对应的校验条件:
-
• 字段长度校验
对单字段的长度进行校验
对应的校验条件:
一致性
-
• 单表字段值一致性比较
1、用于对同一表两个字段原值进行数据的对比;2、如当日达的下单日期和发货日期需要是同一天
对应的校验条件:
稳定性
-
• 字段稳定性校验
用于对字段的平均值、最大值等稳定性进行校验,统计结果和固定值进行比较
对应的校验条件:
-
• 字段波动性校验
1、用于字段的平均值、最大值等波动性进行校验,统计结果和历史进行比较 2、同时支持唯一值、空值的波动性校验
对应的校验条件:
规则运行
当我们对某个表配置了对应的质量规则,并且绑定了调度配置和告警配置。当定时时间触发时,会通过后端的执行引擎对质量规则sql进行执行,并且使用规则引擎对配置的规则校验条件进行匹配,如果匹配成功会推送告警信息给相关人员。这样,当某些数据不符合数据质量规范时,我们就能及时知晓具体的告警原因并去处理它。
写在最后
数据质量系统在数仓的建设当中占据着举足轻重的作用,有了数据质量,我们才能保证数仓中数据的规范性,避免大量的脏数据导致后续报表中统计的不准确性。本文通过一个通用的数据质量系统设计来展示了一个符合数仓规范的数据质量系统该如何设计。
往期推荐