大数据测试 - 数仓测试

news2024/11/23 9:09:49

前言

对于数据仓库的测试来说底层的系统会有很多有自建的集群使用 spark 或者 flink 测试,也有很多直接使用云厂商的产品比如 datworks 等等,再这里我想分享下抛开环境,只对数据仓库测试的一些小心得。

数仓分层设计

标准数仓分为 ODS,DWD,DIM,DWS,ADS 等,每一层都有自己的含义:

图片

ODS:存储原始业务数据,数据原封不动同步到到 ODS,不做任何修改,并且备份,备份时可以压缩;

DWD:数据清洗,脱敏,规范化,一般保持和 ODS 层一样的数据粒度,并且提供一定的数据质量保证。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联,代表业务最小粒度层。任何数据的记录都可以从这一层获取,为后续的 DWS 做准备。另外,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性;

DIM: DWD 同级别维度,比如时间维度、用户维度、权限维度、省份维度等;

DWS:又称数据集市或宽表。按照业务划分,比如订单,用户,商家,商品等,基于各个主题在加工和使用,进行轻度汇总,如统计各个主题 7 天,30 天,90 天的行为,用户购买行为,商品动销行为等,在 DWD 基础上关联 DIM 维度数据汇总,用于提供后续的业务查询,OLAP 分析等;

ADS:要是提供给数据产品和数据分析使用的数据,一般会存放在 ES、ClickHouse、Redis 等系统中供线上系统使用,也可能会存在 Hive 或者 Druid 中供数据分析和数据挖掘使用,一般在 DWS 基础上生成指标,主题宽表,主要用于具体的业务服务;

TEMP:每一层的计算都会有很多临时表,专设一个 temp 层来存储我们数据仓库的临时表。

数仓测试

数仓测试其实和其他域的测试一样都有需求评审,预发环境测试回归和上生产的步骤。

不同的是数仓测试的时候需要确定的口径。举个例子:淘宝商家半年内的销售情况,看到这个口径会认为只要值对了就可以了,其实不是,需要考虑这个商家的类别(统计企业的商家还是个人商家),商家的状态(注销,正常)等。

数据的类型测试

1.黑盒测试

所谓黑盒的数据测试就是已数据结果为准对数据进行校验需要测试的有:

  • 检查表结构是否与设计文档一致
  • 主键是否唯一
  • 字段非空非 null 判断
  • 非正常值判断
  • 枚举准确性
  • 如果是关于金额类型的是否有负数
  • 数据是否有效合理

关于以上校验的一些 sql 样例

唯一性

--sku唯一,无重复记录
SELECT  sku_id
        ,count(1)
FROM    xxx.ads_xxx_sku
WHERE   pt = '20221211'
GROUP BY sku_id
HAVING  count(1) > 1
;

判断为 null

--空值判断
SELECT  sku_id,sku_name 
FROM     xxx.ads_xxx_sku
WHERE   pt = '20221211'
and     (sku_id IS NULL OR  sku_name IS NULL)
;

判断是否为空

select sku_id,sku_name
from xxx.ads_xxx_sku
where pt='20221211'
and (sku_id="" or sku_name="")

负值判断

select price
from xxx.ads_xxx_sku
where pt='20221211'

枚举判断

SELECT  distinct(sku_name)
FROM    from xxx.ads_xxx_sku
WHERE   pt = '20221211' 
;

2.白盒测试

需要对开发的代码走读,check 指标处理逻辑。同时测试也需要准备验证脚本,或者查找到可以作为验证参考的数据,便于口径核对,这个环节,对测试人员的指标口径沉淀有一定的要求。在发现指标数据存在差异的情况,需要协助开发人员一起定位差异原因,时常需要在现有的口径基础上,在数仓空间往上翻多层,或者一个指标定义不够清晰,需要自行去数分空间查找口径定义。另外,在测试通过后,需要编写相应的 DQC 脚本,及时监控生产数据质量。这些对测试来说,需要有一定的 sql 功底;

  • 字段长度、最大最小值、异常值、边界等
  • 计算单位是否统一
  • 常见函数,比如 dateadd 等日期函数的时间偏差
  • 查看调度配置是否缺少依赖

关于以上情况举下一些实际案例

使用的是 DATEADD 函数,统计近 6 天数据,需往前推 5 天,对应的前置条件应调整为 ‘-5’

BETWEEN TO_CHAR(DATEADD(TO_DATE('${bizdate}','yyyyMMdd'), -6,'dd'),'yyyyMMdd')

字段未做默认处理,数值字段一般默认为 0,字符串默认为 ‘’;

nvl(t22.spu_bid_cnt_30d,0)             as  spu_bid_cnt_30d    -- 近30天_出价spu数
    ,nvl(t17.spu_cnt_td,0)                  as  spu_cnt_td         -- 当天动销商品数
    ,nvl(t22.spu_inv_num_7d,0)              as  spu_inv_num_7d     -- 近七天_在售商品数
    ,t22.spu_inv_num_30d                    as  spu_inv_num_30d    -- 近30天_在售商品数

常用的测试方法

DQC 校验

在日常测试时,常会遇到一种迁移任务和重构任务,此类任务对于原先的指标和口径几乎是没有任何差别,这个时候 DQC 校验可以方便快捷的来解决

通常使用的方法如下:

SELECT  t1.xxx_id AS xxid
        ,t1.xxx_month AS xx统计时间
        ,t1.xxx_rate AS xx率
        ,t2.xxx_rate AS 旧xx率
FROM    (
            SELECT  xxx_id
                    ,xxx_month
                    ,xxx_rate
            FROM    newtalbe
            WHERE   pt = '20221011'
        ) t1 inner JOIN    (
            SELECT  xxx_id
                    ,xxx_time
                    ,xxx_rate
            FROM    oldtable
            WHERE   pt = '20221011'
        ) t2
ON      t1.xxx_id = t2.xxx_id
AND     t1.xxx_month = t2.xxx_time
where     t1.xxxx_rate <> t2.xxxx_rate

血缘横向对比

测试过程中往往会发现数据对不上或者枚举不对的情况,为了进一步排查我们就需要通过血缘关系,来了解我们字段的来源是否错误。

图片

比如以上表如果商家订单表中的内容有错误,可以通过 sql 先查看字段的来源,然后通过血缘关系来看表中的字段是否有问题,对问题根因逐个进行排查

设置质量监控

在上线时,我们回对重要的表进行监控,为了就是保证数据质量的完整性、一致性、及时性和准确性

完整性是指数据的记录和信息是否完整,是否存在数据缺失情况。数据缺失主要包括记录的缺失和具体某个字段信息的缺失,两者都会造成统计结果不准确。完整性是数据质量最基础的保障。

准确性是指数据中记录的信息和数据是否准确、是否存在异常或者错误的信息。例如,订单中出现错误的买家信息等,这些数据都是问题数据。确保记录的准确性也是保证数据质量必不可少的一部分。

一致性通常体现在跨度很大的数据仓库中。例如,某公司有很多业务数仓分支,对于同一份数据,在不同的数仓分支中必须保证一致性。例如,从在线业务库加工到数据仓库,再到各个数据应用节点,用户 ID 必须保持同一种类型,且长度也要保持一致。

及时性保障数据的及时产出才能体现数据的价值。例如,决策分析师通常希望当天就可以看到前一天的数据。若等待时间过长,数据失去了及时性的价值,数据分析工作将失去意义。

总结

以上是我对数仓测试的一些小心得,也希望能够让大家了解数据测试,如果有什么不对或者建议请留言。


资源分享【这份资料必须领取~】

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

java计算机毕业设计基于安卓Android的微整形美容app

项目介绍 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设…

前缀和问题

前缀和 一维二维 ac795. 前缀和【一维】 输入一个长度为 nn 的整数序列。 接下来再输入 mm 个询问&#xff0c;每个询问输入一对 l,rl,r。 对于每个询问&#xff0c;输出原序列中从第 ll 个数到第 rr 个数的和。 输入格式 第一行包含两个整数 nn 和 mm。 第二行包含 nn…

基于android的资源文件管理器

软 件 学 院 毕业实训报告 课题名称&#xff1a; android资源管理器 专 业&#xff1a; 软件设计&#xff08;游戏开发方向&#xff09; 班 级&#xff1a; 学 号&#xff1a; 学生姓名&#xff1a; 指导教师&#xff1a; 年 月 日 摘 要 相信大家对Android的发展历史…

Nacos-配置中心,特性,启动,集成mysql,快速入门

Nacos - 配置管理 目录Nacos - 配置管理1. 什么是配置中心1.1 什么是配置1.2 什么是配置中心2 Nacos****简介2.1 主流配置中心对比2.2 Nacos****简介2.3 Nacos****特性3 Nacos 快速入3.1 安装 Nacos Server3.1.1 预备环境准备3.1.2 下载源码或者安装包3.1.3 启动服务器3.1.4 OP…

HTML班级网页设计 基于HTML+CSS+JS制作我们的班级网页(web前端学生网页设计作品)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

计算机毕业设计---java+springboot宠物商城系统

一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot Maven mybatis Vue 等等组成&#xff0c;B/…

光栅尺差分计数/频率5MHz/磁栅尺编码器差分脉冲计数采集模块

产品特点&#xff1a; ● 光栅尺磁栅尺解码转换成标准Modbus RTU协议 ● 光栅尺5V差分信号直接输入&#xff0c;4倍频计数 ● 模块可以输出5V的电源给光栅尺供电 ● 高速光栅尺磁栅尺计数&#xff0c;频率可达5MHz ● 支持4个光栅尺同时计数&#xff0c;可识别正反转 ● …

Oracle函数

目录 一、数值函数 1.ABS(value)&#xff1a;绝对值 2.CEIL(value)&#xff1a;向上取整 3.FLOOR(value)&#xff1a;向下取整 4.ROUND(value)&#xff1a;四舍五入 5.MOD(value(被除数),divisor(除数))&#xff1a;求模 6.SIGN(value)&#xff1a;判断正(0)负(-1)和零(…

隐私计算学习笔记

目录 安全保护技术和应用总结 基础隐私计算技术在联邦学习中的应用 参考书籍 图片来源&#xff1a; https://www.basebit.ai/en/Statics/Images/en/dbys.png 隐私计算技术的产生是互联网、大数据以及区块链等技术发展到一定阶段的必然成果&#xff0c;以下为大家分享读书笔…

01-32-spring5-bean-ioc-aop

01-spring5&#xff1a; spring 1、spring概念 1、什么是spring及优点 Spring框架使Java EE应用程序的开发更加简捷&#xff0c;通过使用POJO为基础的编程模型促进良好的编程风格。 轻量级&#xff1a;Spring在大小和透明性方面绝对属于轻量级的&#xff0c;基础版本的Spr…

【推荐系统学习笔记】-- 2、特征工程

1、可利用的特征 1.1 用户行为特征 显性反馈行为&#xff1a;点赞、评分、评价等隐形反馈行为&#xff1a;点击、浏览、播放、加入购物车等 1.2 用户关系数据 显性&#xff1a;关注、好友关系隐形&#xff1a;点赞、共同观影使用Graph Embedding生成用户和物品的Embedding …

[附源码]Python计算机毕业设计SSM基于web的托育园管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

蓝牙遥控小车基础篇

开发环境&#xff1a; STM32F103R8T6最小系统板&#xff08;IO顺序引出&#xff09; 3D建模蓝牙遥控小车STL 蓝牙遥控小车纯HAL库代码 TP-Bluetooth-Car.apk蓝牙apk 原理&#xff1a;&#xff08;写代码前必须要知道模块的参数&#xff09; 蓝牙模块HC-05使用指南 HC-05蓝…

C++入门——函数重载

C入门——函数重载与缺省 先说说什么是缺省 大家生活中都知道什么关于缺省这个词的例子吗&#xff1f; 肯定是一头雾水&#xff0c;没事我举一个例子&#xff0c;给大家解释一下。 假如小菜是一个舔狗&#xff0c;他天天跟女神买早餐、嘘寒问暖。可是女神还是天天不为所动&am…

基于LabVIEW单片机的抢答器的设计

实训题目&#xff1a;基于LabVIEW单片机的抢答器的设计 1 系统设计 1.1 设计要求 1.1.1 设计任务 设计一个基于LABVIEW的6人抢答器&#xff0c;实现抢答器的基本功能。 1.1.2 性能指标要求 需要自己设计电路并焊接电路板。基本要求&#xff1a;有一个主持人控制开关和…

【华为机试真题详解】投篮大赛【2022 Q4 | 100分】

文章目录 前言题目描述示例 1题目解析参考代码前言 《华为机试真题详解 Python实现》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优)…

WeOps上新啦 | WeOpsV3.13网络设备监控全新改造,支持拓展不同品牌型号

本次WeOpsV3.13版本更新主题总结为&#xff1a; 优化网络设备监控&#xff0c;支持拓展不同品牌和型号的设备监控新增3D立体应用全景大屏&#xff0c;全方位展示应用和监控情况新增事件订阅&#xff0c;支持资产的到期提醒监控告警/IT服务台等模块持续更新&#xff0c;简化操作…

基于Android的太原市景点推荐系统的设计与实现

毕业设计 基于Android的太原市景点 推荐系统的设计与实现 1&#xff0e;课题意义及目标 随着人们生活水平的提高&#xff0c;外出旅游已经成了人们放松休闲的主要活动之一。现在移动端设备已是人们必备&#xff0c;最重要的是携带方便&#xff0c;基于Android的太原市景点推…

数图互通公用房基础数据管理与维护

公用房情况信息化&#xff0c;包括公用房位置、面积参数等&#xff0c;可便捷维护&#xff0c;并提供查询统计&#xff1b;实现二级单位对分配公用房的管理&#xff0c;可便捷维护&#xff0c;并提供查询统计&#xff1b;实现公用房使用人&#xff0c;对使用公用房的管理&#…