做数仓最重要的是什么?一是模型易用性,二是数据质量。模型易用性我们可以通过建模规范、指标管理等方式去实现。而对于数据质量呢?本篇将以严选数仓为例,从建设目标、保障措施、效果评价等几方面探讨数仓质量建设。
1
保障等级确认
网易严选离线数仓目前主要基于有数大数据平台进行调度及管理(Azkban),FLOW数量4000+,首先我们要做的事情就是从中识别出每个任务的重要程度,以此确定保障的策略。
具体做法是:基于CMDB的服务分级确定终端场景的重要性,再通过数据血缘上推依赖的FLOW,如果一个FLOW被多个服务依赖则取较高的服务等级作为该FLOW的分级。
2
数据质量建设目标
这个就比较老生常谈了:完整性、准确性、一致性、及时性。
完整性
数据完整性包含两方面:记录完整性、字段信息完整性。即某张表数据记录是否缺失,某些非null字段是否为null。
准确性
准确性指数据是否存在异常或者错误的信息,如明细数据相对原始数据是否失真,汇总数据是否符合指标口径定义等。
一致性
对于企业数据仓库,一份数据在多个场景使用是很常见的,一致性即指对于同一个数据定义,可以是一个原始字段或一个加工后的指标,任意使用场景所使用的数据都是一样的。比如供应链和商品开发都关注缺货率指标,他们可能分属不同团队,对接不同的数据开发,但是用到的缺货率指标只能是同一份。
及时性
及时性指业务需要看数时,要有数可看,具体落实下来就是数仓的FLOW要能稳定按时产出。
3
数据质量实施策略
针对前面提到的建设目标,目前主要有以下策略。
3.1 数据源质量控制
要做好数据质量首先我们要保证数据源是“干净”的,且数据开发要能及时感知到上游系统的各种变更。这里主要有以下3点策略:
3.2 ETL质量控制
ETL质量控制这里指数据开发的在有数大数据平台开发FLOW构建数仓主题域模型的过程的质量控制措施和能力。
3.3 终端质量控制(出口控制)
终端质量控制目前主要针对数据产品,QA参与建设的“指标测试平台”提供了对指标产出及时性、指标波动、不合理数值、null值等的预警能力,且由QA直接跟进异常处理。
3.4 横向巡检预警及复盘
前文提到的数据源质量控制、ETL质量控制、终端质量控制更多是分散到各个数据开发及各个任务的by case处理,除此之外我们还建设了横向的巡检及复盘机制。
事前异常变更巡检。每天下班前抓取当天的数仓变更点,进行以下筛查并通知到部门群里。
(1)检查基线任务当天有修改的记录
(2)稽核质量巡检。因为弱稽核失败不阻塞任务,可能负责人没有及时处理,针对连续失败未处理的任务进行抓取并通知到部门群里。
(3)次日基线预警。如果当日的任务修改可能导致第二天的基线破线,则也定位到具体的可疑任务并通知到群里。
(4)质量惩罚措施。针对有明显违反质量规范的行为执行“罚一天值班”的惩罚,比如表稽核连续失败3天及以上未处理。
可以看到这部分涉及了很多需要通知到人/通知到群的场景,那以一个数据开发的角色,我们怎么低成本地实现这一机制呢?
巡检这块一开始建设的时候做的比较简单粗暴,直接用Python脚本获取需要的基础数据,进行处理后对接飞书open api,借助飞书机器人把需要的消息通知出来。Python脚本丢服务器上用crontab调度。
场景比较少时这么做没什么问题,但是场景一多显然会导致总开发成本比较高且脚本管理混乱。这里一开始考虑的方案是把分散的巡检脚本工程化整合重构一下,规范下开发及部署流程。但其实还是比较重,最终想到一种比较巧妙的方案,通过Hive/Spark的UDF对严选消息中心的接口做一层包装,这样简单写几行SQL就能发送消息通知,且调度可以直接在有数大数据平台上完成,大大降低了巡检消息的开发成本。
效果大概长这样:
4
质量衡量
前面提到这么多措施,具体实施得怎么样,效果又怎么样呢?这里是数仓的传统技能了,收集各类元数据,计算DQC配置率,基线破线率等指标,并通过有数报表进行呈现。一方面直观呈现数仓现在的质量情况;另一方面指标拆解到个人,配合消息通知工具发送待办作为推进改进的抓手。
5
未来展望
关于数仓质量这块可能继续建设的方向包括以下几块:
作者简介
冯楚,网易严选资深数据开发工程师,主要负责供应链数据建模及离线数仓质量治理相关工作。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://iteblog.blog.csdn.net/article/details/125512607
内容来源于网络,如有侵权,请联系作者删除!