数据测试实践:从一个bug开始的大数据引擎兼容性探索
💡
原文中文,约3400字,阅读约需9分钟。
📝
内容提要
通过对京东-我的京东-年度账单bug的排查发现,Hive和Spark引擎之间的语法兼容差异、计算脚本逻辑错误、Hive/Spark与Presto之间的行转列函数及隐式转换也存在差异,Hive的隐式转换更为广泛,而Presto尤其在字符类型的隐式转换中更为严格。
🎯
关键要点
- 数据测试在大数据时代是组织的重要资产,需关注执行引擎的影响。
- 京东年度账单帮助用户总结消费情况,挖掘数据价值。
- 年度账单中的小家电品类报表存在计算结果不一致的缺陷。
- 缺陷源于Hive和Spark引擎之间的语法兼容差异,导致集合乱序。
- 使用collect_set()函数导致集合无序,无法正确获取用户最后购买的品类。
- Hive引擎能保证集合有序,而Spark引擎无法得到正确结果。
- Hive和Spark的行转列函数存在差异,Hive使用lateral VIEW explode(),而Presto使用CROSS JOIN UNNEST。
- Hive支持多种隐式转换,而Presto在字符类型转换上更为严格,可能导致类型不一致错误。
➡️