数据质量是数据仓库建设中的重中之重,数据仓库的测试应成为确保数据质量、满足上层应用需求的关键环节,应该得到足够的重视。但目前数据仓库的业务逻辑比较复杂,也缺乏成熟的测试策略,因此记录下工作中对数仓的测试方法。

前言

数仓模型的构建主要包括 业务建模、领域概念建模、逻辑模型 和 物理建模 四个阶段。
物理建模主要包含以下几个部分:

  • 针对特定物理化平台,做出相应的技术调整
  • 针对模型的性能考虑,对特定平台作出相应的调整
  • 针对管理的需要,结合特定的平台,做出相应的调整
  • 生成最后的执行脚本,并完善之

    物理模型具体要求

    确定项目资源

  • 根据预算和项目需求,对该项目的成本周期和资源进行估算

  • ETL占据整个项目的 70%,同时确定生命周期

    确定软硬件配置

  • 估算数据容量

  • 对集群的性能心里要有数

    数据仓库的存储设计

  • ODS 层:从应用系统采集而来,只保存一定时间,同时支持部分近实时性报表展示

  • DWD 层:保存经过清洗、转换和重新组织的业务数据,数据将保存较久,满足系统最细颗粒度的查询需求
  • DWS 层:支持汇总层面的指标查询,提高汇总级数据展示的速度和数据保存时间,保存较久的历史数据
  • APP 层:基于一类特定分析主题需要,从企业级数据仓库单独获取的一个数据逻辑或物理子集

    ETL 工具选择

  • spark

  • hive
  • sqoop
  • kylin
  • kettle

    测试策略

    按照测试对象的不同,将数据仓库测试分为 数据集测试 脚本级测试
    图片1.jpg

    数据级测试

    测试对象:数据仓库中的表、字段、记录数等内容,内容包括:

  • 完整性验证

  • 准确性验证
  • 合理性验证

测试目标:保证处理后的入库数据能够达到业务人员的要求

数据完整性测试

数据完整性测试是指保证数据仓库中的所有表、表的所有字段没有遗漏。具体来讲,数据完整性测试又包含表的完整性检查、记录数完整性检查、字段完整性检查、主外键关系完整性检查四个方面:
1、表的完整性检查:

  • 定义:表的完整性是检查是否需要入库的目标表已经存在于数据仓库中,以防止有数据表的遗漏
  • 方法:对需要入库的表和已在库中的表进行比对,查看需要入库的表是否全部已入库

2、记录数完整性检查:

  • 定义:录数完整性检查是指检查所有在库目标表的记录数,查看记录数是否在合理范围内
  • 方法:用 SQL 语句中的 count 函数查询待检查表的实际记录数,并与预期的做比较

3、字段完整性检查:

  • 定义:是指检查所有在库目标表的实际字段和预期设计字段是否一致
  • 方法:检查数仓中表的数据结构,并与预期的字段列表、字段类型做比较

4、主外键关系完整性检查:

  • 定义:外键表中外键的取值必须在主键表中存在,否则在今后对外键表、主键表关联时,就可能会出现错误
  • 方法:将外键表中外键的取值与主键表中主键的取值进行比对,比对前可以进行 distinct 操作

    数据合理性测试

  1. 主键重复检查:在一个表里,主键是不能重复的,否则在今后取值应用时会出现错误
    1. 测试方法:执行 SQL:SELECT PK1,PK2 FROM TABLE GROUP BY PK1,PK2 HAVING COUNT(*)>1
    2. 通过准则:查询结果要为空
  2. 时间拉链检查:起始时间和结束时间容易混,结束时间要大于起始时间
  3. 字段取值范围检查:数据库表中每个字段的取值需要符合字典表的范围设置
  4. 取值分布检查:正常情况下,即使某个字段允许为空,但为空的字段也不能过多(如超过所有记录数的20%)。如果超过,则可能是数据在处理过程中出现了问题,需要检查
  5. 日期字段检查:如果日期型数据在源表中是字符类型的,转换到目标表后就要做日期格式的校验,验证一下是否还是有效的日期格式

    数据准确性测试

  6. 总体汇总校验:对于数值型字段,可以从整个表的层面,对其汇总数据进行整体校验,常见:

    1. 按时间汇总校验:全年销额 = 1月销额+2月销额…+12月的销额
    2. 按店铺汇总校验:全年销额 = 店铺A+店铺B的销额+…
    3. 按品类汇总校验:全年销额 = A品类 + B品类的销额+…
    4. 从交易明细汇总:全年销额 = 全年所有单笔订单交易销额总和
  7. 同比环比校验:可以计算出同环比的销额,然后再进行比较
  8. 采用双路比对进行校验:所谓双路比对,就是测试人员重新根据业务逻辑编写一遍ETL,生成结果表,将测试人员生成的结果表中的数据与开发人员的生成数据进行比对。此种测试工作量较大,对测试人员的编程能力要求较高,耗费时间长

    脚本级测试

    测试对象:数据仓库脚本(ETL 脚本、数据访问脚本等),内容包括:
  • 性能测试
  • 容错性测试
  • 脚本走查

    脚本走查

    测试人员查看开发人员的 ETL 脚本,并找出其实现关键逻辑的语句,看语句是否实现了业务逻辑的要求

    脚本容错性测试

    所谓脚本容错性测试,包含两层含义:
  1. 脚本执行过程中由于严重的数据问题或外部原因,导致脚本无法继续执行的时,是否能对数据仓库进行回滚,保证数据仓库的一致性
  2. 脚本处理一些低质量的数据(空值、格式不正确、数据缺失等),是否首先对这些低质量的数据采取清洗操作

    脚本性能测试

    一方面需要考查加载脚本的加载性能,另外一方面,对数据库的对外访问接口脚本进行性能测试,保证数据仓库的对外服务能力