开发者学堂课程【DataWorks 一站式大数据开发治理平台精品课程:7.DataWorks 数据质量介绍及实践】与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/81/detail/1233
7.DataWorks 数据质量介绍及实践(一)
内容介绍:
一、DataWorks 数据质量简介
二、数据质量使用说明
三、数据质量最佳实践
一、DataWorks 数据质量简介
1、为什么需要数据治理
(1)1970年入网的淘宝用户:马总6岁操作 ARPANET 网?
(2)彩票订单为负值:淘宝从用户手中买彩票?
(3)一条物流单不同字段分别记录了北京和上海:中国直辖市合并?
(4)一个人旺旺登录日时长超过24小时:地球停转之日?
(5)交易基础表的金额字段从“元”改成"分” ,数值扩大- -百倍,导致下游阿里金融的信贷授信模型给商家的授信金额同步扩大,风险资金敞口几个亿,风险贷款上百万;
(6)马总曾经收到6个不同的GMV口径
可以观察到有共同点,都是因为数据质量很小的问题所导致的非常大的业务上的误差,可能是在数据工程师看来很简单的问题,比如一张交易的基础表的金额,从元改造的分,这可能仅仅是数据表上非常简单的数据格式的变更,但是其实它带的业务上的后果是非常大的,导致整个下游的信贷的模型的口径就变大,带来业务上的风险。数据质量问题从数据工程师的角度可能很简单的问题,但是却会带来非常大的业务上的后果,所以一般会把数据质量作为数据开发和治理全生命过程非常重要的一环,因此在 DataWorks 整个产品的版图中,数据质量也是非常重要的模块。
数据质量问题产生的原因有很多种,有底层系统层面的问题,比如可能是来自业务系统的脏数据,也有可能是来自业务系统和数仓平台对对接过程中系统层面的不一致,导致数据传输和转换过程中引入的误差。但是更有可能是因为业务上的变化,这些变化可能是越发能被察觉到的,比如前后端系统可能是业务系统和数仓平台,对于某些数据字段它的定义上的不一致,比如业务的日期的格式,或者金额的格式,比如商业的case,就是金额的单位是元和分,就是对某特定字段前后端的定义可能会有一些不一致。这些业务上的不一致并不会造成系统层面的错误,所以从技术层面是很难观察到数据质量的问题,所以这些由于系统和业务双方所带的数据质量问题都是要解决的,这些数据质量问题它所带的后果也是非常的严重。对于比较轻量级的数据质量问题,它可能仅仅的是影响到数据加工链路的时间,影响最后数据产出的时效性。也会造成数据计算和存储成本中的浪费,都知道比如在maxcompute 还是在 hive 或者是 hologres,在这些引擎中计算的存储和计算都是要钱的,如果产出有数据质量问题的数据,其实本身是对成本的一种浪费,这些浪费可能还是处于低层级的问题。如果这些有问题的数据流入到上层的应用中,造成业务上的问题,影响到上层的决策,就是更加严重的问题。
2、数据质量在 DataWorks 中的位置
因此数据质量本身也是 DataWorks 业务版图中非常重要的一环,它在数据治理的板块,处于数据治理板块的核心。数据质量同时也是需要依赖底层的统一的源数据服务和统一的任务调度服务的支撑它的功能。
3、数据质量模块的主要功能
(1)与数据开发调度深度集成
和市面上其他的数据质量的产品不同全面的支持 dataworks 底层的离线的数据计算存储的引擎,支持 MaxCompute、EMR Hive、Hologres、ADB-PG 。这些都已经对接到数据质量的离线监控的模块上。
调度触发规则运行。
其次 dataworks 的数据质量的规则是由的调度系统触发的,
节省计算资源的同时及时发现问题。
核心就是能够在最佳的时间点调度数据质量监控的规则扫描对应的表,这样能够节省计算资源的同时及时的发现数据质量问题。
强规则自动阻塞下游任务运行
防止问题数据污染下游。
如果用的是内置的模板规则,还会有一种动态域池的模式,在这种模式下面不需要设置具体的监控指标的预值,解决了日常的小纠结,在配置规则时,不知道阈值是设置100好还是设置101好?问题交给的后台的算法,让它自动判断指标的异常点。如果使用的是自定义规则,也会有很方便的功能,能够把自定义规则沉淀成为模板,模板可以让其他人或者是自己下次在其他的表上再一次的用,方便组织内部的数据质量规则的标准化。
(2)便捷灵活的规则定义
37种内置模板规则+自定义规则
无需设定阈值,算法自动判断异常值
自定义规则可沉淀为模板,方便再次使用
(3)同时支持实时数据监控
基于 Datahub+ Blink
支持断流、延迟、自定义三种规则
支持维度表
除离线的数据质量监控之外,也支持实时的数据质量监控,基于阿里云大数据系列产品的实时数据的通道 Datahub 以及实时数据加工的引擎 blink,通过两款产品的组合,能够支持实时数据流的监控,目前是支持断流,延迟和自定义三种实时数据质量监控的规则。
4、数据质量模块的主要功能
(1)功能架构
分为离线和实时两部分,离线数据质量监控的这部分,支持 MaxCompute、EMR- Hive、Hologres、ADB-PG 4种不同的引擎,支持内置的模板规则,还支持自定义sql的规则,同时自定义sql规则还可以沉淀成为自定义规则模板,所有的规则都支持4种不同的监控的方式,有绝对值监控同比例环比监控,这样可以和上一周期的业务有非常好的比较。同时还支持波动率的监控,动态阈值的监控,实时的部分会支持断流的监控,延迟的监控和自定义的监控。所有的数据质量问题,是支持通过短信,邮件和钉钉群通知的方式发送出非常好的触达渠道。除了这三种不同的触达渠道之外,这些数据质量的问题和指标都会汇总到自定义质量报表中,可以通过邮件周期性的送达出来,可以通过网页端实时的查看,这样能够非常直观的观察到目前数据质量的整体情况,最后数据质量模块也是支持API的,有一整套的API,包括规则,分区,表达式,订阅人等等这些对象的增删改差,都是可以通过open API进行。
(2)离线数据质量
数据质量规则是绑定在调度的任务上,具体可以由这张图看到。如何绑定到调度的任务上?首先每一条规则它自然会有一张对应的表,规则是扫描这一张表的,是很自然的关系,除这一层的关系之外,每一条规则是需要绑定到具体的任务节点上的,任务节点的绑定一般推荐绑定到产出这一张表的任务上,比如这张任务是由某一段sql脚本写入的,可能每天或者每小时都会通过任务节点把数据写入到这张表,建议把监控这张表的规则绑定到任务上,每当任务执行完毕后,也就是任务把数据写入到这张表中会自动的触发规则扫描这张表,是扫描这张表数据质量问题最佳的时机,不早也不晚,因为数据刚刚写入到这张表中,如果有问题第一时间就会被发现,并且如果是很严重的问题还会进一步的措施。
(3)离线数据质量-报警与堵塞
强质量规则的红色报警阻塞下游任务节点,防止质量问题扩散/计算资源浪费。
报警通过短信/邮件/Webhook三种方式发送,Webhook 遵循钉钉群机器人协议。
如果任务节点扫描某一张表,它会同时产出橙色的阈值或者红色的阈值,无论触发哪一种的阈值,都会触发短信或者邮件或者钉钉群通知的报警。如果是强规则,并且它触发红色的阈值,它还会同时阻塞到任务节点的下级节点,防止质量问题的扩散,也防止计算资源的浪费。这是 dataworks 投资数据质量一线监控的特色功能,把规则和任务节点绑定在一起,决定合适的质量监控的时间点。
(3)离线数据质量-模版规则
这是所支持的37种不同的模板规则,可以看到有数值型和波动率型两部分,所谓的数所谓的数值型就是对某个特定的指标本身进行监控,比如表行数,表大小或者是字段级的最大值最小值,这是数值性的规则,波动率的规则它是和历史的趋势进行对比,在后台会维护历史指标的存储,方便根据特定指标的历史上的波动值,判断最新的指标是否存在异常。
表级、字段级自定义规则支持根据业务属性自定义where过滤条件
自定义SQL支持完全自定义SQL逻辑(单行单列输出)
同样的也是支持自定义sql的方式定义数据质量规则的,定义出的规则也是支持这种数值性和波动率型的校验使用起来的逻辑都是一样的。
5、实时数据质量
(1)在离线数据质量监控的同时也支持实时数据质量监控,为什么要关心实时数据的质量?因为现在业务对数据的时效性的要求越越高,实时数仓的理念也是越来越深入人心。实时的数据一旦出现数据质量的问题,本身它的排查和解决都相比离线的数据质量要困难得多首先它实时数据它的吞吐量非常的大,一旦有问题会淹没在海量的数据中,排查就很困难,根本不知道每秒几十条上百条的数据究竟是哪一秒的,哪一条的数据有问题,所以需要有自动化的系统监控它。其次实时的数据质量问题直接会影响到在线的业务,因为离线的数据可能会有一定的时间的阈度修复它。如果是实时的数据有问题,直接会体现到在线的业务上,所以对实时数据质量问题的敏感度其实是要比离线数据质量问题要高。其实实时的数据质量最终是会影响到离线的数据质量的,因为一般实时的数据都会归档到离线的数仓中,如果实时数据的源头就是有问题的,自然也会影响到离线的数据质量。
(2)在 dataworks 数据质量模块中,支持三种不同的方式监控实时数据的质量,有断流的监控,有延迟的监控,或者用自定义 blink sql 的方式定义业务层的数据质量的规则。
(3)所谓的断流和延迟,断流是指数据通道如果在一段时间内没有新的数据进来,就认为是有断流的现象。断流的阈值是可以设定的,可以是10秒钟,也可以是10分钟,灵活度都非常的高。
延迟它是指如果的数据流里面有时间戳的字段,如果时间戳和系统的时钟,它的差值过大就认为它最新的数据延迟就太大,已经丧失实时系统的时效性,这本身是会有数据延迟的问题的。自定义sql规则就灵活多了,可以引入一张维度表和实时数据做关联,也可以引入两条实时数据的链路对它进行做双流或者更多流,和实际的业务的场景有关系。