企业界中,数据的重要性不言而喻,尤其是在保障ETL流程的高效和精准性上。对于数据工作的实施者而言,有效的ETL工具乃是关键所在。当前市场环境下,尽管众多ETL工具被广泛使用,但针对ETL测试的专用工具却相对稀缺。这究竟是为何呢?
在深入探讨此现象时,我们不得不提及日常ETL测试过程中所遭遇的诸多挑战:
(1)主要的问题在于许多ETL测试依然依赖手工执行,这缺乏必要的自动化工具支持。
(2)与数据质量相关的深入分析工具亦显得捉襟见肘。
(3)重复编写SQL语句的测试工作低效且易出错,耗时多。
(4)执行SQL语句耗时过长,极大地影响了测试进度。
(5)在Shell窗,查询结果的保存变得困难,而HUE的查询结果又容易过期且需要手动操作来保存。
(6)对于数据同步和ETL场景下,比较源表和目标表的一致性缺乏必要工具。
(7)实时数据处理场景要求极高的数据时效性,这使得测试时的场景模拟与问题复现变得极具挑战。
(8)某些常见的测试场景,如拉链表测试、MapReduce脚本测试等,普遍存在缺少通用测试用例覆盖的问题。
(9)特别是在Hive与HBase之间的数据一致性对比上,缺少必要的对比工具。
大数据测试面临着高门槛、低效率、不全面的覆盖、难以复现的场景、以及难以定位的问题等挑战。对此,今日向大家推荐一款出色的工具——easy_data_test,此工具可以有效解决上述问题。
关于easy_data_test
easy_data_test是一款用Python编写的工具,其核心功能包括:
(1)支持对单表的数据量、列空值数据量、列非空值数据量、列最大值、列最小值、列不同值、不同值数据量的查询。同时支持对表结构、任意select语句的查询,以及表基本信息查询、值域分析、异常值分析等。
(2)可以进行双表数据量对比、列空值数据量对比、列非空值数据量对比、表结构对比等操作。还支持Hive双表一致性对比以及Hive与HBase的一致性对比。
(3)可查看主备集群及库的切换信息、库表集群信息。
(5)提供了拉链表通用测试功能,包括判断拉链表是否断链、判断拉链表日期正确性,以及对比拉链表与临时表的数据量与数值等。
那么,这样一款功能强大的工具是如何实现的呢?接下来,我们将从其模块设计、技术选型到代码实现进行详细解读。
模块设计
模块设计图如下所展示:
当用户运行easy_data_test工具时,他们可以通过命令行界面查看所有非交互式命令。使用stdin.readline()来获取用户输入的语句。若未指定-f或-e选项,则会进入交互式命令行模式。在此模式下,程序通过raw_input函数获取用户输入的命令,并根据命令执行相应的函数。这些函数中封装了SQL语句,通过Presto读取Hive元数据或通过pyHive的Hive模块连接Hive。
技术选型
在技术选型方面,团队在面对众多Python连接Hive的工具时,选择了Presto作为主要的查询工具。这是因为Presto的执行模式与Hive有根本的不同,大部分场景下Presto比Hive快一个数量级。虽然Presto在部分HiveQL上存在不兼容问题,但设计团队通过pyHive作为功能弥补工具来解决这些问题。