运行多个sql查询并测试scala是否通过

bybem2ql  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(312)

我正在运行100个查询(测试用例)来检查sparkscala中的数据质量。我正在从配置单元表查询数据。
空数据框是这些示例查询的预期结果:

SELECT car_type FROM car_data WHERE car_version is null
SELECT car_color FROM car_data WHERE car_date is null
SELECT car_sale FROM car_data WHERE car_timestamp is null

我想根据预期结果将测试用例是否通过写入文本文件。我想知道实现这一目标的最佳方法。
到目前为止我所拥有的:

val test_1 = context.sql("SELECT car_type FROM car_data WHERE car_version is null")
val test_2 = context.sql("SELECT car_color FROM car_data WHERE car_date is null")
val test_3 = context.sql("SELECT car_sale FROM car_data WHERE car_timestamp is null")
test_1.head(1).isEmpty
eanckbw9

eanckbw91#

如果你想知道 NULL ,可以使用条件聚合。我倾向于用一个查询运行所有测试:

SELECT (CASE WHEN COUNT(*) = COUNT(car_type) THEN 'PASS' ELSE 'FAIL' END) as car_type_test,
       (CASE WHEN COUNT(*) = COUNT(car_color) THEN 'PASS' ELSE 'FAIL' END) as car_color_test,
       (CASE WHEN COUNT(*) = COUNT(car_sale) THEN 'PASS' ELSE 'FAIL' END) as car_sale_test       
FROM car_data;

注意:这会考虑一个空表通过测试,而您的代码不会。这些可以很容易地修改以处理这种情况,但这种行为对我来说是有意义的。

相关问题