[attach]144330[/attach]
字段级别完整性:
唯一性判断:保证主键或某些字段的唯一性,防止数据重复导致和其他表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层,因为我们更期望从源头发现并解决数据不合理问题,及时止损,避免脏数据进入下游之后,数据污染扩大。
另外,我们看到完整性校验内容逻辑简单,且比较固定,稍微进行简单的抽象就能将其模板化。那么作为测试,我们更倾向于将数据完整性校验做成工具。目前有赞“数据形态工具”已经落地,下面给出我的一些思路:
针对所有表来说,普世性的规则,比如表主键的唯一性。
针对不同类型比如数值、String、枚举、日期格式类型,列举出常见的数据判断规则。
给每项规则进行等级划分,比如表的主键不唯一,记为critical。String类型字段的空值比例大于70%,记为warning。
根据表数据是否满足上述这些规则,最终落地一份可视化报告,测试人员可根据报告内容评估数据质量。