做数仓最重要的是什么?一是模型易用性,二是数据质量。模型易用性我们可以通过建模规范、指标管理等方式去实现。而对于数据质量呢?本篇将以严选数仓为例,从建设目标、保障措施、效果评价等几方面探讨数仓质量建设。

1

‍保障等级确认‍

网易严选离线数仓目前主要基于有数大数据平台进行调度及管理(Azkban),FLOW数量4000+,首先我们要做的事情就是从中识别出每个任务的重要程度,以此确定保障的策略。

具体做法是:基于CMDB的服务分级确定终端场景的重要性,再通过数据血缘上推依赖的FLOW,如果一个FLOW被多个服务依赖则取较高的服务等级作为该FLOW的分级。

2

数据质量建设目标

这个就比较老生常谈了:完整性、准确性、一致性、及时性。

完整性

数据完整性包含两方面:记录完整性、字段信息完整性。即某张表数据记录是否缺失,某些非null字段是否为null。

准确性

准确性指数据是否存在异常或者错误的信息,如明细数据相对原始数据是否失真,汇总数据是否符合指标口径定义等。

一致性

对于企业数据仓库,一份数据在多个场景使用是很常见的,一致性即指对于同一个数据定义,可以是一个原始字段或一个加工后的指标,任意使用场景所使用的数据都是一样的。比如供应链和商品开发都关注缺货率指标,他们可能分属不同团队,对接不同的数据开发,但是用到的缺货率指标只能是同一份。

及时性

及时性指业务需要看数时,要有数可看,具体落实下来就是数仓的FLOW要能稳定按时产出。

3

数据质量实施策略

针对前面提到的建设目标,目前主要有以下策略。

3.1 数据源质量控制

要做好数据质量首先我们要保证数据源是“干净”的,且数据开发要能及时感知到上游系统的各种变更。这里主要有以下3点策略:

  1. ODS层入仓监控。严选数据入仓使用自研Datahub平台,在数据入仓阶段对binlog收集、日志收集、T+1快照生成等任务做了时效监控,保障源数据的及时性。

  2. 上游变更感知。数仓的数据来自于上游业务系统,上游系统的逻辑变更必然对数仓造成影响。考虑到如果直接做发布审批卡点,流程会比较重,目前我们的做法是由数据开发自行跟对接的上游开发强调,有变更时需要把变更点告知数据开发,由数据开发评估影响。

  3. 上游DB运维感知。这层更接近于是兜底逻辑,理论上变更及运维操作都应该在发生前同步到数据开发。严选CMDB支持对服务配置“数据负责人”角色,当业务后端对服务相应的DB发起DDL或者DML工单时,变更详情会通过邮件及POPO同步到数据开发。

3.2 ETL质量控制

ETL质量控制这里指数据开发的在有数大数据平台开发FLOW构建数仓主题域模型的过程的质量控制措施和能力。

  1. 任务测试卡点。这里主要指有数大数据平台FLOW未在开发环境运行通过的,无法提交上线。同时开发环境提供测试集群,依模型重要性可以选择在测试集群进行调试,从而不影响线上数据。

  2. 任务发布卡点。有数大数据平台支持按规则圈选任务,对于选定的任务要求先审批后上线。借助这个能力可以实现对日常重点任务或者全局封板的发布卡点,要求CR和测试报告才能审批上线。(该机制目前暂未运行)

  3. 表质量监控卡点。主要基于有数大数据平台的数据稽核能力,以任务分级为基础,围绕完整性、准确性、一致性对可能的数据质量问题做出监控卡点。目前已提“支持DQC结果订阅”的需求给到有数。

  4. SQLSCAN静态分析。代码静态分析这块调研了SonarQube的方案,在开源方案的基础上需要解决3个问题。(1)代码集成,可借助严选自己的“血缘插件”收集的执行记录实现。(2)代码检查规则,这块需要自行开发插件,SQL相关的检查插件目前开源的方案都是针对OLTP场景的。因暂时没开发资源能投入这块,所以暂无实施计划。

  5. 产出基线控制。以任务分级为基础,将重点数仓任务划分到2:30、4:30、5:30、7:30、9:30五条基线上,基线DDL30分钟前未产出即开始预警,由值班介入处理,保障及时性。

3.3 终端质量控制(出口控制)

终端质量控制目前主要针对数据产品,QA参与建设的“指标测试平台”提供了对指标产出及时性、指标波动、不合理数值、null值等的预警能力,且由QA直接跟进异常处理。

3.4 横向巡检预警及复盘

前文提到的数据源质量控制、ETL质量控制、终端质量控制更多是分散到各个数据开发及各个任务的by case处理,除此之外我们还建设了横向的巡检及复盘机制。

事前异常变更巡检。每天下班前抓取当天的数仓变更点,进行以下筛查并通知到部门群里。

(1)检查基线任务当天有修改的记录

  • 检查有DDL变更却没有关联任务变更记录;

  • 事后打标分析。每天早上抓取近期基线破线记录,通知值班填报标记破线原因,用于事后复盘及破线责任归因。

(2)稽核质量巡检。因为弱稽核失败不阻塞任务,可能负责人没有及时处理,针对连续失败未处理的任务进行抓取并通知到部门群里。

(3)次日基线预警。如果当日的任务修改可能导致第二天的基线破线,则也定位到具体的可疑任务并通知到群里。

(4)质量惩罚措施。针对有明显违反质量规范的行为执行“罚一天值班”的惩罚,比如表稽核连续失败3天及以上未处理。

可以看到这部分涉及了很多需要通知到人/通知到群的场景,那以一个数据开发的角色,我们怎么低成本地实现这一机制呢?

巡检这块一开始建设的时候做的比较简单粗暴,直接用Python脚本获取需要的基础数据,进行处理后对接飞书open api,借助飞书机器人把需要的消息通知出来。Python脚本丢服务器上用crontab调度。

场景比较少时这么做没什么问题,但是场景一多显然会导致总开发成本比较高且脚本管理混乱。这里一开始考虑的方案是把分散的巡检脚本工程化整合重构一下,规范下开发及部署流程。但其实还是比较重,最终想到一种比较巧妙的方案,通过Hive/Spark的UDF对严选消息中心的接口做一层包装,这样简单写几行SQL就能发送消息通知,且调度可以直接在有数大数据平台上完成,大大降低了巡检消息的开发成本。

效果大概长这样:

4

质量衡量

前面提到这么多措施,具体实施得怎么样,效果又怎么样呢?这里是数仓的传统技能了,收集各类元数据,计算DQC配置率,基线破线率等指标,并通过有数报表进行呈现。一方面直观呈现数仓现在的质量情况;另一方面指标拆解到个人,配合消息通知工具发送待办作为推进改进的抓手。

5

未来展望

关于数仓质量这块可能继续建设的方向包括以下几块:

  • DQC结果订阅机制,这个需求已经提给了有数;

  • SQLSCAN静态分析,当前主要由于开发资源问题搁置,合适的时机可以重启;

  • 基线治理深化,通过优化单任务性能,任务拓扑,风险提早发现等方式继续降低基线破线率和起夜率;

  • 红蓝攻防演练,针对重点链路、重点场景开展质量攻防演练,检验风险发现能力、事故恢复能力、数据吞吐能力等。

作者简介

冯楚,网易严选资深数据开发工程师,主要负责供应链数据建模及离线数仓质量治理相关工作。

网易严选离线数仓质量建设实践相关推荐

  1. 网易严选打造数仓规范和评价体系实践

    数据仓库,是数据工程师的无形产品,不同于可视化.交互型产品的评价体系,数据仓库的评价自有它的独特性. 本次邀请了有多年数据领域工作经验,专注数据架构.模型设计和规范执行落地的专家,从概念-平台-规范的 ...

  2. 滴滴打车 -- 数仓指标体系建设实践

    桔妹导读:指标体系是什么?如何使用OSM模型和AARRR模型搭建指标体系?如何统一流程.规范化.工具化管理指标体系?本文会对建设的方法论结合滴滴数据指标体系建设实践进行解答分析. 1.  什么是指标体 ...

  3. 数仓:爱奇艺数仓平台建设实践

    文章目录 简介 一.数据仓库 1.0 二.数据仓库 2.0 三.数仓建设 3.1 一致性维度 3.2 指标体系 3.3 建模流程 3.4 数据图谱 3.5 数据血缘 总结 简介 先介绍一下爱奇艺公司整 ...

  4. 离线数仓建设,企业大数据的业务驱动与技术实现丨03期直播回顾

    原文链接:离线数仓建设,企业大数据的业务驱动与技术实现丨03期直播回顾 视频回顾:点击这里 课件获取:点击这里 一.离线数仓建设背景 离线数据是相对实时数据而言的数据产出,不同于实时数据,离线数据一般 ...

  5. 离线数仓建设及技术选型

    离线数仓架构设计 1.建设数仓的目的 主要是增加数据计算的复用性.每次新增加统计需求时,不至于从原始数据进行计算,而是从半成品继续加工而成. 2. 数据仓库作用 整合企业业务数据,建立统一的数据中心: ...

  6. 离线数仓和bi开发的实践和思考

    离线数仓和bi开发的实践和思考 背景 什么是数据仓库 分层设计 维度建模 低代码平台做什么? 理想vs现实,数仓实践中踩坑以及思考 背景 笔者在来唯品会之前主要的工作内容主要是依托于公司自研的bi低代 ...

  7. Kafka、Flink 数据中台实践:事件模型、调度、实时/离线数仓架构之道

    去年年底,网传阿里董事局主席张勇,在阿里内网发帖称"现在阿里的业务发展太慢,要把中台变薄,变得敏捷和快速."此言一出激起千层浪,难道中台概念真成也阿里败也阿里? 有人戏称阿里&qu ...

  8. 离线数仓和实时数仓的区别

    作者介绍 @车云祥 大宇无限  数据产品负责人 主要负责全公司底层数据治理,构建统一指标体系: 主导 BI 系统.用户画像系统.广告投放平台.广告流量优化等设计工作: 推动 Snaptube.Lark ...

  9. ChunJun Meetup演讲分享 | 基于袋鼠云开源框架的数仓一体化建设探索

    8月27日,ChunJun社区联合OceanBase社区举办开源线下Meetup,围绕「构建新型的企业级数仓解决方案」主题,多位技术大牛和现场爱好者汇聚一堂,畅所欲言. 会上,袋鼠云大数据引擎开发专家 ...

最新文章

  1. linux xampp eclipse xdebug 无法进入断点
  2. [Ubuntu]更改所有子文件和子目录所有者权限
  3. python工程师-我是如何转行成为了一名Python工程师
  4. Oracle Lsnrctl - 关于oracle监听器的命令和解释
  5. SQLServer之创建数据库架构
  6. iOS-NSThread编程详解
  7. SVN下载谷歌上的代码
  8. PTA-习题11-2 查找星期 (15 分)-enum
  9. 理解Session实现原理及安全运用
  10. Java并行任务框架Fork/Join
  11. 793. 阶乘函数后K个零 golang
  12. input css年月日,input标签的type为date,显示的日期格式样式更改
  13. java中的equals拿什么鞋的_java.中equals的使用
  14. ASP.NET应用程序性能测试
  15. Ethos北京公司(来自北欧的IT咨询公司)求贤若渴:.NET架构师
  16. 利用递归遍历文件夹和文件存入TreeView
  17. Web前端程序员该如何准备面试?这些面试知识应该掌握
  18. 防火墙服务器-iptables
  19. 移动宽带连不上微软服务器,移动宽带有些网站打不开怎么解决?
  20. JavaBean的前世晋升程序员如何提升领导力

热门文章

  1. Git提交时的emoji表情使用指南
  2. HTML中通过js 自定义一个鼠标悬停后立刻显示的Title(附效果图)
  3. matlab带延迟环节的单位阶跃响应,典型环节的单位阶跃响应.doc
  4. Informix IDS 11零碎治理(918检讨)认证指南,第 5 部门: 数据库效劳器使用(3)
  5. word标题为第一章,将图题由图一.1设置题注为图1.1的取巧方法
  6. 第一个计算出地球周长的人——埃拉托色尼
  7. Delphi中BPL包的使用,个人经验
  8. [网络工程师]-防火墙-防火墙体系
  9. flutter gridview item 有空隙
  10. 吴恩达机器学习课程笔记一