大数据测试初探-基于hive的数据测试

595 阅读5分钟

背景:怎么测试数据仓库相关的项目,需要了解哪些知识?以下是我整理的一些知识点

一、初步了解数仓

数据仓库用来干啥   

数据仓库是一个进行大量数据的离线分析的平台,同时兼任整合各种业务的数据源,降低获取数据消费成本的系统。

对于一些场景能有非常好的支持,如超大数据量的离线统计,每天生成几千万学生按学段分类的作业完成情况分析报表。获取用户在不同业务里面的身份信息。复杂的窗口统计以及大量指标的统计。总的来说,数仓适合做数据量规模大,指标规模大,指标逻辑复杂,跨多业务的离线分析需求。

数据处理流程架构

二、怎么测试数仓项目

  • 怎么测?

          数据质量:

数据质量可以从完整性、准确性、一致性和及时性共四个角度进行评估。

    • 完整性

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

      完整性是数据质量最基础的保障。例如,某个稳定业务的数据量每天约为100万条记录,某天突然下降了1万条,则可能是出现了记录缺失。例如,某科高考成绩表中,每个考卷分数都对应一个准考证号,当准考证号字段的空值数大于0时,则可能是出现了信息缺失。

    • 准确性

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

    • 一致性

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

    • 及时性

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

          测试前: 需要对取值逻辑有一定的了解,了解业务中涉及字段背后的逻辑以及相关数据库表及对应字段

测试准备:

1、用例:除了覆盖需求之外,也需要针对数据源设置边界场景、特殊条件;

关于数据的测试点:

正常场景数据准确性

异常场景、边界条件下数据验证

增量数据验证

跨周期数据验证

数据自洽性

数据查询耗时

更新模型后的数据抽检

预发环境测试(主要利用线上数据来进行验证,弥补可能有些场景的遗漏)

2、测试sql:根据需求编写对应的sql,后续在hue中查询比对

测试方法: 由于数据是经过同步、清洗、加工等一系列操作产生,一层一层的测试数据的准确性耗时巨大,我们一般选择直接根据需求、取值文档写sql统计原始数据,用来与汇总表的数据进行对比验证

3、根据测试需求造测试数据:

在T-1的模型里,所造的数据会次日才同步到hive当中,所以一般要等到第二天才可以进行验证;

也可以造完数据直接同步ods进行测试,但这个方案同步完整体的数据会耗时长,不建议频繁同步数据

  • 怎么定位问题

如果在DWS(汇总数据)发现问题点,最主要需要找出这个问题的数据来源在哪里

1、根据模型代码一层一层排查,根据sql看这个字段来源于哪个数据表,再查下游的表是否还有问题,再根据有问题的表定位具体的代码 排查问题最好用的方法就是二分法,我们可以大概看到正常数据的流向是这样的:

业务DB -》 ODS -》TX/DIM/PS -》CBD -》DWS

所以,首先入手排查的就是我们的底层明细数据,同时这一块也是最容易出错的地方,因为这里涉及到的最面目全非的协议转换,建模加工最复杂。如果确认了底层明细数据没问题,我们就往右边查,反之往左边查。

三、所了解的提效工具

可以用python+impala批量执行测试sql自动进行数据比对

为什么呢:

  1. 经过数仓模型统计后的数据存在hive中,测试通过hive/impala进行数据查询
  2. impyla是专门针对python连接impyla的数据库,可以连接后台hive以及kudu,查询速度比之前常用的hiveserver快很多,而且连接便捷。

怎么使用?

python如何连接impala

  • 环境配置,python版本建议3.6

1、pip install six

2、pip install bit_array

3、pip install thriftpy  

4、pip install thrift_sasl

5、pip install impyla

        中间可能有报错:
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": landinghub.visualstudio.com/visual-cpp-…

****方法1、安装Visual Studio,安装完之后需要打开visual Studio试运行一下,然后在cmd下继续安装

****方法2、在这里下载对应安装失败的包后本地安装 可以不用安装vc,www.lfd.uci.edu/~gohlke/pyt…

如果报错:'TSocket' object has no attribute 'isOpen'
则是thrift-sasl的版本太高了(0.3.0),故将thrift-sasl的版本降级到0.2.1
pip install thrift-sasl==0.2.1