数仓数据质量保障方法

news2024/11/24 11:13:03

一、有赞数据链路

1、数据链路介绍

首先介绍有赞的数据总体架构图:

自顶向下可以大致划分为应用服务层、数据网关层、应用存储层、数据仓库,并且作业开发、元数据管理等平台为数据计算、任务调度以及数据查询提供了基础能力。

以上对整体架构做了初步的介绍,对于质量把控来说,最核心的两个部分是:数据仓库以及数据应用部分。因为这两部分属于数据链路中的核心环节,相对于其他层级而言,日常改动也更为频繁,出现问题的风险也比较大。

二、数据层测试

1、整体概览

首先,针对数据层的质量保障,可以分成三个方面:数据及时性、完整性、准确性。

2、 数据及时性

数据及时性,顾名思义就是测试数据需要按时产出。及时性重点关注的三个要素是:定时调度时间、优先级以及数据deadline。其中任务的优先级决定了它获取数据计算资源的多少,影响了任务执行时长。数据deadline则是数据最晚产出时间的统一标准,需要严格遵守。

这三要素中,属于“普世规则”且在质量保障阶段需要重点关注的是:数据deadline。那么我们基于数据deadline,针对及时性的保障策略就可分为两种:

  • 监控离线数据任务是否执行结束。这种方式依赖于有赞作业开发平台的监控告警,若数据任务在deadline时间点未执行完成,则会有邮件、企微、电话等告警形式,通知到相应人员。

  • 检查全表条数或者检查分区条数。这种方式依赖接口自动化平台,通过调用dubbo接口,判断接口返回的数据指标是否为0,监控数据是否产出。

其次我们可以关注失败、重试次数,当任务执行过程中出现多次失败、重试的异常情况,可以抛出告警让相关人员感知。这部分的告警是对deadline告警的补充,目前在有赞作业开发平台上也有功能集成。

3、数据完整性

数据完整性,顾名思义看数据是不是全,重点评估两点:数据不多、数据不少。

  • 数据不多:一般是检查全表数据、重要枚举值,看数据有没有多余、重复或者数据主键是否唯一。

  • 数据不少:一般是检查全表数据、重要字段(比如主键字段、枚举值、日期等),看字段的数值是否为空、为null等。

可见数据完整性和业务本身关联度没有那么密切,更多的是数仓表的通用内容校验。所以从一些基础维度,我们可以将测试重点拆成表级别、字段级别两个方向。

表级别完整性:

  • 全表维度,通过查看全表的总行数/表大小,若出现表总行数/总大小不变或下降,说明表数据可能出现了问题。

  • 分区维度,通过查看当日分区表的数据行数/大小,若和之前分区相比差异太大(偏大或偏小),说明表数据可能出现了问题。

目前有赞元数据管理平台已集成相关数据视图:

字段级别完整性:

  • 唯一性判断:保证主键或某些字段的唯一性,防止数据重复导致和其他表join之后数据翻倍,导致最终统计数据偏大。

比如判断ods层订单表中的订单号是否唯一,编写sql:

select 
count(order_no)
,count(distinct order_no) 
from ods.xx_order

若两者相等,则说明order_no值是表内唯一的;否则说明order_no表内不唯一,表数据存在问题。

  • 非空判断:保证重要字段非空,防止空数据造成和表join之后数据丢失,导致最终统计数据偏少。

比如判断ods层订单表中的订单号是否出现null,编写sql:

select 
count(*) 
from ods.xx_order 
where order_no is null

若结果等于0,则说明order_no不存在null;若结果大于0,则说明order_no存在null值,表数据存在问题。

  • 枚举类型判断:保证枚举字段值都在预期范围之内,防止业务脏数据,导致最终统计结果出现遗漏/多余的数据类型。

比如判断ods层订单表中的shop_type字段中所有枚举值是否符合预期,编写sql:

select shop_type from ods.xx_order group by shop_type

分析查询结果是否满足预期,确保不会出现遗漏/多余的枚举类型。

  • 数据有效性判断:判断数据格式是否满足预期,防止字段的数据格式不正确导致数据统计的错误以及缺失。常见的有日期格式yyyymmdd

一旦出现数据完整性问题,对数据质量的影响很大。所以完整性策略更适用于ods层,因为我们更期望从源头发现并解决数据不合理问题,及时止损,避免脏数据进入下游之后,数据污染扩大。

另外,我们看到完整性校验内容逻辑简单,且比较固定,稍微进行简单的抽象就能将其模板化。那么作为测试,我们更倾向于将数据完整性校验做成工具。目前有赞“数据形态工具”已经落地,下面给出我的一些思路:

  1. 针对所有表来说,普世性的规则,比如表主键的唯一性。

  2. 针对不同类型比如数值、String、枚举、日期格式类型,列举出常见的数据判断规则。

  3. 给每项规则进行等级划分,比如表的主键不唯一,记为critical。String类型字段的空值比例大于70%,记为warning。

  4. 根据表数据是否满足上述这些规则,最终落地一份可视化报告,测试人员可根据报告内容评估数据质量。

4、数据准确性

数据准确性,顾名思义数据要“准确”。“准确”这个概念比较抽象,因为我们很难通过一个强逻辑性的判断,来说明数据有多准,大部分都存在于感性的认知中。所以准确性测试也是在数据质量保障过程中思维相对发散的一个方向。

经过总结,我们可以从字段自身检查、数据横向对比、纵向对比、code review等方面,去把控数据的准确性,这些测试点和业务的关联也比较密切。

4.1 自身检查

数据自身检查,是指在不和其他数据比较的前提下,用自身数据来检查准确的情况,属于最基本的一种检查。常见的自身检查包括:检查数值类指标大于0、比值类指标介于0-1范围。这类基础规则,同数据完整性,也可以结合“数据形态工具”辅助测试。

举个例子,比如针对订单表,支付金额必然是大于等于0,不会出现负数的情况,编写sql:

select 
count(pay_price) 
from 
dw.dws_xx_order 
where par = 20211025 and pay_price<0

若结果为0,说明支付金额都是大于0,满足预期;否则若count结果大于0,说明数据存在问题。

4.2 表内横向数据对比

表内横向对比可以理解为同一张表内,业务上相关联的两个或多个字段,他们存在一定的逻辑性关系,那么就可以用来做数据对比。

比如针对订单表,根据实际业务分析易得:针对任何一家店铺的任意一款商品,都满足订单数 >=下单人数,编写sql:

select 
kdt_id
,goods_id
,count(order_no)
,count(distinct buyer_id) 
from dw.dws_xx_order
where par = '20211025'
group by kdt_id,goods_id
having count(order_no)<count(distinct buyer_id)

若查询结果不存在记录,则说明不存在 订单数<下单人数,反向说明订单数>=下单人数,则符合预期;否则若查询结果的记录大于0,则不符合预期。

4.3 表间横向数据对比

表间横向对比可以理解为两张表或多张表之间,其中具有业务关联或者业务含义一致的字段,可以用来做数据对比:

  • 同类型表之间对比:针对hive里的支付表A和支付表B,里面都有支付金额字段,那么同样维度下的 表A.支付金额 = 表B.支付金额。

  • 多套存储之间对比:比如有赞数据报表中心针对支付表,应用层存储分别用到了mysql和kylin,用作主备切换,那么相同维度下的kylin-表A.支付金额 = mysql-表B.支付金额。

  • 多个系统之间对比:跨系统之间,比如有赞的数据报表中心和crm系统,两个系统都有客户指标数据,那么相同维度下的数据报表中心-表A.客户指标 = crm-表B.客户指标。

我们深度剖析数据横向对比的底层逻辑,本质就是两张表的不同字段,进行逻辑运算符的比较,也比较容易抽象成工具。目前有赞“数据比对工具”已经落地,下面给出我的一些思路:

  • 输入两张表,分别设置两表的主键。

  • 输入两张表中需要对比的字段,且设置对比的运算符,比如>、=、<。

  • 根据设置的规则,最终数据对比通过、不通过的记录,落地一份可视化报告,测试人员可根据报告内容评估数据质量。

4.4 纵向数据对比

纵向对比就是上下游的数据比较,目的是确保重要字段在上下游的加工过程中没有出现问题。

比如数仓dw层存在订单的明细表,数据产品dm层存在订单数的聚合表,那么二者在相同维度下的数据统计结果,应该保持一致。

4.5 code review

首先,在进行code review之前的需求评审阶段,我们先要明确数据统计的详细口径是什么,下面举两个实际的需求例子。

  • 需求1:(错误示例)统计时间内店铺内所有用户的支付金额。问题所在:需求描述太过于简洁,没有阐述清楚数据统计的时间维度以及过滤条件,导致统计口径不清晰,要求产品明确口径。

  • 需求2:(正确示例)有赞全网商家域店铺维度的离线支付金额。支持自然日、自然周、自然月。统计时间内,所有付款订单金额之和(剔除抽奖拼团、剔除礼品卡、剔除分销供货订单)。

明确需求之后,下面详细介绍code review的一些常见关注点:

1)关联关系 & 过滤条件

  • 关联表使用 outer join 还是 join,要看数据是否需要做过滤。

  • 关联关系 on 字句中,左右值类型是否一致。

  • 关联关系如果是1:1,那么两张表的关联键是否唯一。如果不唯一,那么关联会产生笛卡尔导致数据膨胀。

  • where 条件是否正确过滤,以上述需求为例子,关注sql中是否正确剔除抽奖拼团、礼品卡和分销供货订单。

2)指标的统计口径处理

数据指标的统计涉及到两个基本概念:

  • 可累加指标:比如支付金额,浏览量等,可以通过简单数值相加来进行统计的指标,针对这类指标,sql中使用的函数一般是sum。

  • 不可累加指标:比如访客数,不能通过简单相加,而是需要先去重再求和的方式进行统计,针对这类指标,sql中一般使用count(distinct )。

3)insert插入数据

  • 是否支持重跑。等价于看插入时是否有overwrite关键字,如果没有该关键字,重跑数据(多次执行该工作流)时不会覆盖脏数据,而是增量往表插入数据,进而可能会导致最终数据统计翻倍。

  • 插入的数据顺序和被插入表结构顺序是否完全一致。我们要保证数据字段写入顺序没有出错,否则会导致插入值错乱。

三、应用层测试

1、整体概览

基本的前端页面 + 服务端接口测试,和一般业务测试关注点是一致的,不再赘述。本篇重点展开“数据应用“测试需要额外关注的地方。

2、 降级策略

  • 在页面新增数据表的时候,需求、技术评审阶段确认是否需要支持“蓝条”的功能,属于“测试左移”。

蓝条介绍:有赞告知商家离线数据尚未产出的页面顶部蓝条,其中的“产出时间” = 当前访问时间 +2小时,动态计算得到。

  • 测试比率类指标时,关注被除数 = 0 的特殊场景。在后端code review、测试页面功能阶段,关注该点。目前有赞针对这种情况,前端统一展示的是“-”。

3、 主备策略

遇到有主备切换策略时,测试过程中注意数据正常双写,且通过配置,取数时能在主备数据源之间切换。

4、 数据安全

关注数据查询的权限管控,重点测试横向越权、纵向越权的场景。

四、后续规划

目前在实际项目的数据准确性对比中,数据对比工具因为暂不支持sql函数,所以只能代替50%的手工测试,一些复杂的横向和纵向数据对比还是需要编写sql。后续计划支持sum、count、max、min等sql函数,把工具覆盖范围提升到75%以上,大大降低数据对比的成本。

目前“数据形态报告”、“数据对比工具”更多的运用项目测试当中,后续计划将形态检查和数据对比做成线上巡检,将自动化和数据工具相结合,持续保障数仓表的质量。

目前针对sql code review的方式主要靠人工,我们计划把一些基础的sql检查,比如insert into检查,join on条件的唯一性检查、字段插入顺序检查等作成sql静态扫描,整合到大数据测试服务中,并且赋能给其他业务线。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/644648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

射频电路layout总结

射频电路板设计由于在理论上还有很多不确定性&#xff0c;因此常被形容为一种“黑色艺术”&#xff0c;但这个观点只有部分正确&#xff0c;RF电路板设计也有许多可以遵循的准则和不应该被忽视的法则。在实际设计时&#xff0c;真正实用的技巧是当这些准则和法则因各种设计约束…

OpenCV(图像处理)-基于Oython-滤波器(低通、高通滤波器的使用方法)

1.概念介绍2. 图像卷积filter2D() 3. 低通滤波器3.1 方盒滤波和均值滤波boxFilter()blur() 3.2 高斯滤波&#xff08;高斯噪音&#xff09;3.3 中值滤波&#xff08;胡椒噪音&#xff09;3.4 双边滤波 4. 高通滤波器4.1Sobel&#xff08;索贝尔&#xff09;&#xff08;高斯&am…

软考A计划-系统架构师-知识点汇总-下篇

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

​Agile与Scrum的比较

作者| Deepali chadokar Agile和Scrum是软件开发中经常使用的两个相关概念。Agile是一个概括性的术语&#xff0c;包含了一组软件开发的价值观和原则&#xff0c;而Scrum是Agile方法中的一个特定框架。 Agile强调协作、灵活性和适应性&#xff0c;以及应对变化的能力。此外&…

Vue中 echarts响应式页面变化resize()

前言 Vue项目中开发数据大屏&#xff0c;使用echarts图表根据不同尺寸的屏幕进行适配 BUG&#xff1a;当页面进行缩放时图表大小没有变化 使用到的方法&#xff1a; resize() 调用echarts中内置的resize函数进行自适应缩放&#xff0c;然后添加监控&#xff0c;页面销毁时删掉…

Zabbix“专家坐诊”第195期问答汇总

问题一 Q&#xff1a;麻烦请教一下zabbix服务器总是上报这几个告警&#xff0c;需要处理嘛&#xff1f;怎么处理&#xff1f; A&#xff1a;同步历史数据进程负载过高的话会影响到server的性能&#xff0c;建议增加服务器硬件配置。 Q&#xff1a;是需要增加哪方面的配置&…

ISO21434 威胁分析和风险评估方法(十二)

目录 一、概述 二、目标 三、资产识别 3.1 输入 3.1.1 先决条件 3.1.2 进一步支持信息 3.2 要求和建议 3.3 输出 四、威胁场景识别 4.1 输入 4.1.1 先决条件 4.1.2 进一步支持信息 4.2 要求和建议 4.3 输出 五、影响等级 5.1 输入 5.1.1 先决条件 5.1.2 进一…

制造业如何进行数字化转型?这个解决方案能帮你!

制造业如何有效实现数字化&#xff1f;制造业企业数字化的趋势已成必然&#xff0c;那么&#xff0c;如何进行制造业企业的数字建设成为各传统制造业企业的探索方向。 于是&#xff0c;我们团队在调研了数百家企业之后&#xff0c;形成了这套制造业数字化从0到1&#xff0c;从…

一文让你用上Xxl-Job 顺带了解cron表达式

文章目录 1.定时任务框架-xxljob1.1 Xxljob介绍1&#xff09;xxljob概述2&#xff09;XXL-JOB特性3) 整体架构4&#xff09;入门资料准备 1.2 xxljob快速入门1&#xff09;导入xxljob工程2&#xff09;配置数据库1.初始化SQL脚本2.配置数据库环境3.业务处配置任务注册中心 3&am…

【色度学】光学基础

1. 光的本质 &#xff08;1&#xff09;波长不同的可见光&#xff0c;引起人眼的颜色感觉不同。 &#xff08;2&#xff09;人们观察到的颜色是物体和特有色光相结合的结果&#xff0c;而不是物体产生颜色的结果。 2. 光度量 【ISP】光的能量与颜色&#xff08;1&#xff0…

【学术探讨】万能密码原理剖析

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 【万能密码】&#xff0c;顾名思义&#xff0c;就是…

ArcGIS提取水系并进行生态敏感性分析

1、前言 &#xff0c;这篇是用ArcGIS进行水系提取&#xff0c;与前者的区别是上篇一般是对遥感影像进行处理&#xff0c;准确性较高&#xff1b;这篇是讲在没有遥感影像的情况下&#xff0c;用DEM进行水系的提取&#xff0c;一般与实际水系有差别&#xff0c;准确性较低。但是…

rm 命令的使用以及指定不删除某些文件

目录 1、删除单个文件 2、强制删除文件&#xff0c;无需确认 3、删除文件夹 4、删除目录下全部文件&#xff0c;包括文件夹 5、删除全部文件&#xff0c;但保留readme.txt 6、删除全部文件&#xff0c;保留1.txt和2.txt 7、使用find grep xargs命令来删除 8、删除全部…

把手伸向大数据平台的云原生,是如何将大数据平台迁移至K8s上的?

我们正身处数据大爆炸的时代&#xff0c;据IDC数据显示&#xff0c;仅在2022年&#xff0c;人类就将创造超过97ZB的数据&#xff1b;要知道截至2012年&#xff0c;人类生产的所有印刷材料的数据量为200PB&#xff0c;仅为2022年一年所创造数据量的50万分之一。据预测&#xff0…

目标检测数据集---工业铝片表面缺陷数据集

✨✨✨✨✨✨目标检测数据集✨✨✨✨✨✨ 本专栏提供各种场景的数据集,主要聚焦:工业缺陷检测数据集、小目标数据集、遥感数据集、红外小目标数据集,该专栏的数据集会在多个专栏进行验证,在多个数据集进行验证mAP涨点明显,尤其是小目标、遮挡物精度提升明显的数据集会在该…

Echarts—根据地理坐标被标注的中国地图(标记可以自定义为图片)

中国地图 实现效果图创建echartChina.vue组件使用echartChina.vue组件修改标记图标为图片 实现效果图 这是一个有阴影的,并且根据坐标点被标记的地图展示&#xff0c;下面我们就把实现的代码贴出来&#xff0c;老样子&#xff0c;还是开袋即食&#xff01; 创建echartChina.vu…

matlab求解方程和多元函数方程组

核心函数solve 一般形式 Ssolve(eqns,vars,Name,Value) &#xff0c;其中&#xff1a; eqns是需要求解的方程组&#xff1b; vars是需要求解的变量&#xff1b; Name-Value对用于指定求解的属性&#xff08;一般用不到&#xff09;&#xff1b; S是结果&#xff0c;对应于v…

【MySQL高级篇笔记-主从复制(下) 】

此笔记为尚硅谷MySQL高级篇部分内容 目录 一、主从复制概述 1、如何提升数据库并发能力 2、主从复制的作用 二、主从复制的原理 1、原理剖析 2、复制的基本原则 三、一主一从架构搭建 1、准备工作 2、主机配置文件 3、从机配置文件 4、主机&#xff1a;建立账户并…

如何通过CRM系统进行群发邮件?

CRM客户管理软件不仅可以记录客户的信息&#xff0c;还可以集成电子邮箱&#xff0c;实现在CRM中即可管理客户邮件的功能。那么&#xff0c;CRM系统可以群发邮件吗&#xff1f;当然可以&#xff01;使用Zoho CRM即可轻松实现邮件群发。 1、通过Zoho CRM群发邮件的好处 1&…

对话钉钉音视频专家冯津伟:大模型不是万能的

策划&#xff1a;LiveVideoStack 在音视频技术领域&#xff0c;ICASSP 大会是行业的风向标会议&#xff0c;也是语音学界从业者研究下一代技术发展的盛宴。近期&#xff0c;国内外各大企业陆陆续续放出论文入顶会的消息&#xff0c;钉钉蜂鸣鸟音频实验室 2 篇论文也登上了 ICAS…