开发者学堂课程【DataWorks 一站式大数据开发治理平台精品课程:7.DataWorks 数据质量介绍及实践】与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/81/detail/1233
7.DataWorks 数据质量介绍及实践(二)
二、数据质量使用说明
1、离线质量校验
(1)选择一张 MaxCompute 表
(2)新建分区表达式
离线质量校验的使用很简单,整个都是在图形化的界面中,以 MaxCompute 的实时数据质量监控为例,同时还支持 EMR- Hive、Hologres、ADB-PG 一共4种离线的计算存储引擎,以 MaxCompute 表为例,首先要选择一张表,比如选择ods_user. info _d这张表,选择这张表后,要定义一个特殊的对象值,叫做分区表达式,因为在离线的系统中数据都是会分次写到不同的分区中的,分区大部分的情况下是和时间或者业务日期有关联,最新的数据一般只会写到最新的分区中所以定义分区表达式的目的就是为限定质量问题扫描的范围,因为实际每天只要扫描最新的分区就够了。
作用:定位最新数据,避免全表扫描
非分区表:NOTAPARTITIONTABLE
分区表:分区名=分区值
多级分区表:必须配置到最后一级分区
1级分区名=分区值/2级分区名=分区值/N级分区名=分区值
(3)创建规则
强弱规则
强规则阻塞下游,弱规则仅报警。
动态阈值
是否由系统判断异常指标。
比较方式1
数值型模板:固定值,波动型模板:绝对值/上升/下降。
比较方式2
数值型模板: =、>、<等,波动型模板:橙色阈值、红色阈值。
规则字段
表级or字段级 ,如果是字段级规则还可以针对是哪一个字段的规则,系统会自动判断,是字符串类型还是数值型的字段,给出可用的模版。
模板类型
包含采样方式、校验方式,根据字段类型不同而不同。
另外一方面如果模板规则不符合要求,可以设置自定义的规则,自定义的规则使用起来也很简单,在刚才创建规则的窗口中,选择自定义规则,就可以在窗口中写入自己的sql,sql本身是会有一定的要求的,符合要求的sql都可以被纳入到自定义规则的监控中。
(4)关于动态阈值
这里着重强调两个功能,动态阈值的功能,如果在配置规则的界面中,把动态阈值的选项选成是,就意味着要配置动态阈值方式的规则,一旦在选项中选是,会发现下面的配置就变得简单多了,就不需要有复杂的阈值的设定。取而代之的是算法参考样本量的配置,只需要指定让系统关注多少天之内的样本量,基于样本量,通过平滑的算法判断最新的指标点是否在预期的区域,是否在预期的区间范围内,如果在区间范围内就认为是正常的指标项,如果是在突破了预测的上界和下界,就认为质量问题是存在的。
右下角的这张图,基于历史上的数据,系统会自动判定上界和下界,如果最新的数据落在上下界内,系统就会认为是可以被接受的。如果突破上下界,系统就认为是存在数据质量的问题,可以看到这张图上历史上的值,红色的小圆圈标示出的都是系统认为有异常的点,使用起来会比单独的配置阈值要方便的多。
(5)自定义规则进阶:规则模版
另外强调的功能是自定义的模板,它本身是自定义规则的进阶用法,通过定义一段sql进行复杂业务场景的校验,如果这张表如果碰巧这种需要通过用自定义规则校验的表比较多,配置起来工作量就会比较大,而且也容易出现sql代码管理起来很复杂的问题,或者由于业务上的变化,sql脚本本身需要有修改,如果它应用的表特别多,改动的工作量也会非常的大,这时候就可以用到自定义规则模板库的功能,它本质上是可以把自定义规则固化成为模板,这样在使用规则时,就可以像使用内置模板规则一样的用,可以在数据质量的界面中看到有一个规则模板库,进入到规则模板库中后,会有模板库的目录数,进入到具体的目录数中后,可以像配置自定义sql规则一样的配置模板,唯一不一样的是可以用${table_ name}指代表名,同理$[yyyymmdd- 1]]可以用指代分区表达式,和自定义sql规则的用法一样,在创建好自定义模板规则后,在使用模板规则时,可以在规则来源中选择的规则模板库,选择到对应的目录,再选择所配置的模板可以看到,配置的模板显示在这里,并且它是不能改的,方便规则代码统一的管理。
(6)配置订阅
无论是内置的模板规则,还是自定义的模板规则,或者是自定义的sql规则,配置完成后,要把扫描的结果通知出来,所以需要配置订阅人,在dataworks的界面上有订阅管理的按钮,点击按钮后可以配置不同的订阅方式,可以看到有短信的方式,有邮件的方式或者钉钉群的方式。其次会有试跑的功能,点击以后就会立刻运行配置的规则,用来校验规则配置的正确性,同时也是一种规则校验的一种手段,就不用等到调度任务运行,才能触发规则,可以通过手动试跑的方式运行规则。
(7)关联任务节点
方式一:数据质量界面关联
方式二:运维中心界面关联
(8)任务查询和结果查看
无论是手动运行的还是调度触发的质量规则,它的任务结果,教研的结果都可以在任务查询菜单中看到。
2、实施质量校验
(1)数据集成页面配置 DataHub Topic
(2)关联Flink项目
(3)配置规则
3、自定义质量报告
- 查看方式:在线预览、邮件发送
- 监控对象总数
- 规则总数
- 覆盖率
- 报警趋势
- 阻塞趋势
也可以选择有些指标不显示在报表上,只显示所关注的内容。
三、数据质量最佳实践
1、根据数据仓库/集市的层次及功能定位配置
(1)入口层/数据引入层/基础层
- 业务主外键是否唯一缺失
- 周期性数据波动是否过大/特殊类(如日志等)
- 无周期性则判断数据是否大于固定值
(2)数据清洗层/整合加工层
- 增加一些对清洗逻辑的监控
- 对于整合的数据判断其数据唯一性、重复性
(3)轻度/高度汇总层
根据汇总逻辑做平衡值监控
(4)维表层/事实表层
- 主外键一致
- 维度值增加/减少监控
(5)出口层/应用层/报表层
- 逻辑主键
- 多表之间的平衡关联
- 特定业务逻辑监控
2、常用规则
表级规则:
(1)MaxCompute表大小, 1天波动检测
(2)MaxCompute表大小, 30天波动检测
(3)MaxCompute表大小, 7天波动检测
(4)SQL任务表行数,1,7,30天波动检测
使用较多,周期性检测
(5)SQL任务表行数,1天波动检测
C类使用较多,根据业务波动特性
(6)SQL任务表行数,30天平均值波动检测
(7)SQL任务表行数,30天波动检测(8)SQL任务表行数,7天平均值波动检测
(9)SQL任务表行数,7天波动检测
B类使用较多,根据业务波动特性
(10)SQL任务表行数,上1周期比较,B类使用较多,根据业务波动特性
(11)相比上一周期表大小不变
经过统计,表值的规则中表行数和表大小这两种规则用的是比较多的,主要是用监控某些分区是否为空,或者会不会有突变的数据猛增的这种情况。
(12)字段唯一值个数期望值校验,如站点、渠道、类目等可以使用
(13)字段唯一值, 1,7,30天波动检测
(14)字段平均值, 1,7,30天波动检测
(15)字段最大值, 1,7,30天波动检测
(16)字段最大值,上1周期比较,根据业务特性,如状态值,部署在最外层
(17)字段最小值, 1,7,30天波动检测,根据业务特性,如状态值,部署在最外层
(18)字段最小值,上1周期比较,根据业务特性,部署在最外层
(19)字段汇总值, 1,7,30天波动检测,B、C类使用较多,如交易总量, flag标签等
(20)字段汇总值,上1周期比较,B、C类使用较多,如交易总量, flag标签等
(21)字段空值个数,使用较多,常与重复值个数联合使用作为主键监控
(22)字段空值数/行数(空值率)
(23)字段重复值个数,使用较多, 常与空值个数联合使用作为主键监控
(24)字段重复值个数/总行数
(25)离散值监控(分组个数),使用较多,如男女等维度值监控
(26)离散值监控(分组个数波动),使用较多,如男女分别的数量值监控
(27)离散值监控(状态值)
(28)离散值监控(状态值及状态值个数波动)
字段型的规则中,像以上所罗列的规则是比较多的。跟之前面不同的数仓分层中所用到的常用规则是一致的,比如字段唯一值的个数,可以在维度表或者是事实表中可以用到,可以监控维度的数量是否有异常的变化,或者字段空值和重复值的个数,可以做主外键是否有缺失的监控。
3、关于规则类型和比较方式
(1)强弱规则:脏数据不能流入下游则强,其他则弱,弱规则不会阻塞任务。
(2)趋势:上升、下降、绝对值、不变,按业务需要设置。
(3)橙色阈值:强弱规则的橙色报警均不会阻塞下游,必须小于红色阀值,精确到百分比小数点后两位。
(4)红色阈值:强规则的红色报警会触发阻塞,必须大于橙色阀值,精确到百分比小数点后两位。
规则的强弱需要合理的选择它的强弱性。如果认为脏数据是比较关键的脏数据,不希望投入到下游的表中,这种规则是需要把它设置成强规则,其他尽可能把它设置成弱,为什么尽可能设置成弱?因为关系到系统资源的成本,以及强规则会用到maxcompute 或者 hologres 的资源是比较多的,并且它会阻塞最终任务的产出,它会影响最终数据的时效性。所以尽可能的使用弱,但在不得已的情况下,可以使用强规则,波动率的检测的趋势有上升下降和绝对值,可以根据业务的需要设置。另外橙色阈值和红色阈值,是监控阈值的两档,橙色阈值是不会阻塞到下游任务,如果是红色阈值,才会触发阻塞下游链路的动作,无论是橙色阈值还是红色阈值,都要精确到百分比小数点的后两位。
4、问题
(1)问:数据质量模块是否收费?
答:对公共云用户,按照质量规则实例运行数量计费,其中部分功能仅在DataWorks企业版中开启。详见https://help.aliyun.com/document detail/118793.html。弱规则优先级较低,且与下游任务并发执行,基本不影响基线产出。数据质量本身模块是可以在基础版和标准版的dataworks中可以用,但是质量规则按实例的运行数量会收费,其中还有一些功能,比如动态阈值的功能,还有质量报表的功能,这些是指在dataworks的企业版中才可以用到的。详细的实力运营数量计费的标准和功能点的版本的划分,可以在dataworks的在线帮助文档中看到。
(2)问:自定义规则使用怎样的SQL语法?
答:离线自定义规则使用MaxCompute SQL ,实时自定义规则使用Blink SQL。目前只接受查询语句,也就是dql并限制为单行单列输出。只有单行单列的输出,校验才会正确的判断是否有数据质量的问题。
(3)问:收到了数据质量报警,怎样才能快速定位触发的业务流程节点?
答:在数据质量-任务查询界面,找到报警对应的节点ID ,至运维中心中查询即可。
(4)问:数据质量与智能监控一起使用,需要特别注意什么?
答:对离线数据来说,强弱规则运行的时机不同:
- 强规则优先级高,会在下游任务运行前执行,计入基线运行时间。
- 强规则还可能阻塞下游任务,如果下游有基线,请为后面的同学负责。
运维中心的智能监控是通过业务基线的方式监控最后数据产出的时效性,能是数据质量的强规则是会影响数据产出的时效性,所以当使用到离线数据的强规则时,就要尤其关注对智能监控规则的影响。如果弱规则它的优先级是低的,与下游任务是并发执行是不会影响智能监控基线的产出时间。但是如果是强规则,并且会阻塞下游任务时,就有可能会影响到下游的任务。