关系经济人类预测化学自然
投稿投诉
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

数据测试实践从一个bug开始的大数据引擎兼容性探索

6月6日 托天庙投稿
  作者:京东零售李晓洁
  我们常常忘记,天才也取决于其所能掌握的数据,即使阿基米德也无法设计出爱迪生的发明。ErnestDimnet
  在大数据时代,精准而有效的数据对于每个致力于长期发展的组织来说都是重要资产之一,而数据测试更是不可或缺的一部分。数据测试不仅关注数据加工的代码逻辑,还要考虑大数据执行引擎带来的影响,因为各种引擎框架将对同一份数据产生不同的计算或检索结果。本文将从一个年度账单bug引入,讲解在数据测试实践中对大数据执行引擎兼容性差异的探索。一、需求内容
  京东我的京东年度账单是一年一次,以用户视角对在平台一年的消费情况进行总结。账单从购物,权益,服务等方面切入,帮助用户挖掘在自我难以认知的数据角度,通过这种方式让用户从账单中发掘打动内心的立意,并主动进行分享和传播。本次,我京年度账单以2022购物印象为主题,通过不同的数据维度组成村落故事线,用户以虚拟人物形象贯穿始终,用户浏览完故事线后,可生成购物印象。
  年度账单其中一个报表为用户年度购买的小家电品类。该报表使用年度账单汇总表中的小家电品类集合字段,计算了2022年度某用户全年最后购买的两款小家电所在的品类。本文bug分享将围绕这个字段展开。
  表名
  appmyjduserbillyearsum(用户年度账单汇总表)
  字段名
  smallelectricalappliancelist小家电品类集合
  数据类型
  String
  数据描述
  2022年中,用户全年最后购买的两款小家电所在的品类清单
  取数方式
  按照下单时间倒序拍组,输出全年最后购买的2个小家电品类;输出的2个品类间用分隔。
  数据源
  admmyjduserbillmonth(用户月度账单明细表)
  二、缺陷描述
  缺陷描述:在APP层用户年度账单汇总模型appmyjduserbillyearsum中,对于小家电品类集合字段,APP表结果与手动计算结果不一致。
  以用户Mercury、乐乐1024、活力少年的购买数据为例,上游ADM层以array类型存储用户每月购买的小家电相关品类,如下图所示:
  根据小家电品类集合字段定义,APP层应取这三个用户全年最后购买的2个品类,即Mercury在2022年11月购买的VR头戴显示器、电炒锅,乐乐1024在2022年10月购买的冲牙器、空气净化器,活力少年在2022年10月购买的VR头戴显示器、电炒锅。因此,经手动计算,APP层正确计算结果应为:
  而APP层年度账单汇总表中的小家电集合品类如下,结果错误,不符合预期结果。
  三、缺陷排查过程1。执行引擎兼容差异
  测试排查中,首先发现了Hive和Spark引擎之间的语法兼容差异。
  当使用APP层脚本中小家电品类集合口径构建SQL,手动对上游表执行查询时发现,Hive引擎得到的集合有序,执行结果正确:
  使用Spark引擎执行查询时,集合乱序,执行结果错误:
  2。脚本梳理
  缺陷原因为集合乱序导致的取数错误。每个用户在上游ADM存在12个数组对应12个月购买小家电品类的集合,需要集合函数(collect)将12个月分组数据倒序排序,汇合成1个列表,然后取列表前两个元素。
  HQL提供两种分组聚合函数:collectlist()和collectset(),区别在于collectset()会对列表元素去重。由于用户不同月购买的品类集合可能重复,因此脚本使用了collectset()。
  然而collectset()将导致集合乱序,集合中元素不再按月份倒序排列,取出List〔0〕和List〔1〕不是用户全年最后购买的两个小家电品类。SELECTuserpin,smallelectricalappliancelist,concatws(,smallelectricalappliancelist〔0〕,smallelectricalappliancelist〔1〕)ASsmallelectricalapplianceFROM(SELECTuserpin,collectset(concatws(,,smallelectricalappliancelistsplit))ASsmallelectricalappliancelistFROM(SELECTdt,userpin,smallelectricalappliancelist,concatws(,,smallelectricalappliancelist)ASsmallelectricalapplianceFROMadmmyjduserbillmonthWHEREdt202201ANDdt202212ORDERBYdtDESC)tmplateralVIEWexplode(SPLIT(smallelectricalappliance,,))tmpASsmallelectricalappliancelistsplitGROUPBYuserlogacct)3。结论
  计算脚本逻辑错误,不应使用collectset()聚合分组。
  在原生HiveSpark中,collectset()函数均无法保证集合有序,而大数据平台Hive对集合计算有序。因此,该脚本在Hive引擎下可以达到生成全年最后购买两个小家电品类的预期目标,但spark引擎则无法得到正确结果。
  Hive执行效率较低,研发通常通过Spark引擎执行,最终导致结果错误。四、大数据计算引擎兼容差异1。collectlist()collectset()在hivespark和presto之间的区别
  collectset()与collectlist()在Presto中无法兼容。
  替代函数:arrayagg()(https:prestodb。iodocscurrentfunctionsaggregate。html?highlightarrayaggarrayagg)
  HiveSpark
  Presto
  collectlist()
  arrayagg()
  collectset()
  arraydistinct(arrayagg())2。行转列函数在hive和presto之间的区别
  Hive使用lateralVIEWexplode()执行行转列的操作,而Presto不支持该函数。这种单列的值转换成和student列一对多的行的值映射。
  HiveSparkquery:lateralVIEWexplode(SPLIT(smallelectricalappliance,,))tmpASsmallelectricalappliancelistsplit
  Presto支持UNNEST来扩展array和map。文档:(https:prestodb。iodocscurrentmigrationfromhive。html)
  Prestoquery:CROSSJOINUNNEST(SPLIT(smallelectricalappliance,,))AS3。隐式转换在引擎之间的区别
  HiveSpark支持包括字符串类型到数字类型在内的多种隐式转换,如将字符串07转化为数字7,然后进行比较操作。
  Hive隐式转换规则:详见链接AllowedImplicitConversions
  虽然Presto也有自己的一套隐式类型转换规则包含在publicOptionalcoerceTypeBase(TypesourceType,StringresultTypeBase)方法中,但对数据类型的要求更为严格。一些在Hive中常见的数字与字符串进行比较的查询语句,Presto会直接抛类型不一致的错误。
  下图为Hive和Presto的隐式转换规则,蓝色区域是Presto和Hive都支持的类型转换,绿色区域是Presto不支持但是Hive支持的类型转换,红色区域是两者都不支持的类型转换。可以看到,hive的隐式转换更为广泛,而presto尤其在字符类型的隐式转换中更为严格。
  隐式转换示例:HiveSpark隐式转换076true(CAST(07ASDOUBLE)CAST(6ASDOUBLE))test1NULL11。0truePresto隐式转换076false(CAST(07ASVarchar)CAST(6ASVarchar))test1true11。0ERROR:io。prestosql。spi。PrestoException:Unexpectedparameters(varchar(1),decimal(2,1))forfunctionoperatorequal。Expected:operatorequal(T,T)T:comparable
投诉 评论 转载

潜意识是你身体的主宰潜意识从不休息,它是生命力和智慧的源泉,与宇宙能量是一体的。改造世界的力量在你的潜意识中,它蕴藏着无穷的智慧和力量,它由内在的泉水浇灌,这种内在的动力叫做生命的法则。一旦……数据测试实践从一个bug开始的大数据引擎兼容性探索作者:京东零售李晓洁我们常常忘记,天才也取决于其所能掌握的数据,即使阿基米德也无法设计出爱迪生的发明。ErnestDimnet在大数据时代,精准而有效的数据对于每个……田亮一家共用一张脸头条创作挑战赛在超级女声爆火的叶一茜和跳水冠军田亮之间擦出了爱情火花,显然有点不可思议,可是仔细观察两人很有夫妻相。一家人共用一张脸,真的是不是一家人不进一家门了。田亮和……利德曼2000万增资联合医学新京报讯(记者张秀兰)11月9日,利德曼发布公告,以自有资金2000万元认购联合医学新增注册资本30。83万元,并将部分资金计入联合医学资本公积金。根据公告,利德曼于11……Readandretell系列13册,教材练习册音频,轻松提Readandretell系列13册,含丰富的配套资源,教材练习册闪卡音频答案,画面精美,通过一个个主题故事,增强孩子的读写基础能力。提高孩子的阅读理解能力和口语表述流利度。。……云南4座低调的县城,却是养老胜地,吸引很多东北人到此定居说起云南,大家肯定都不会感到陌生,它是我国旅游业最为发达的一个省份,境内的大理、丽江、昆明等城市,都是享誉全国的旅游城市。然而随着云南旅游业的逐步提升,很多小众旅游城市也被大家……浙江有个大型公园在建,共耗资3。5亿,或将在今年开园时针在不停的转动,而祖国的发展也是无休无止,随着中国速度的到来,给我们的生活带来了很多的新变化,这是一代又一代中国人民劳动的成果,也是我们需要传承的中国精神。近几年来,在……广汽集团,逃不开合资魔咒图片来源:度哥身处复杂多变新汽车时代环境下,没有谁能稳坐高台,就连正值青壮年的广汽集团也显得有些体力不支了。根据广汽集团(601238。SH)最新发布的产销快报,今……科学向日葵天文课堂地球的节日前几期我们说到了地球基本概念、属性以及它的运动,今天我们来说一说地球的形成和演化,并聊一聊属于地球自己的节日。大家有没有想过,我们的地球是怎么来的?地球上的水、高山和生命……如何寻找伦纳德今年最亮的彗星由于这颗超快的彗星在太阳系内部做了一次短暂的旅行,因此,天文学家们认为,我们用肉眼观察到伦纳德的可能性很大。天文爱好者们仰望天空一睹伦纳德(Leonard)彗星的时刻已经……秋游去!八大赏秋胜地,总有一处适合你秋金秋十月丹桂飘香秋天的到来让一切事物都步入新的阶段焕发新的生机无论是落霞与孤鹜齐飞的自然景象还是秋水共长天一色的壮美画卷都值得我们走……散文想念今天飘雪花了,突然很想念冰天雪地的那个冬天。世界白茫茫一片,带着懵懂与青涩对未来充满了期待。那是在内蒙上学的第一年,那年的雪很大,到处都是白色,连树上都是白的,而且一直是……
LOL手游双排快乐,AD锤石加布里茨,斗鱼灵药柚子又整活了宏远新赛季离队首人确定!20岁杜锋爱将正式走人,做网红更适合华尔街人士不进入crypto领域,实际上是一种职业风险混双决赛名单出炉!伊藤美诚惨遭淘汰,张本智和早田希娜争冠军自驾游之自驾出游前的检查与出行物品欧文406仍无缘今日最佳!抱歉,金州出了个真神仙普神雪中不识裴南苇,世间爱上郝冬梅!靳东大学初恋,家庭事业双丰收广西人口大量外流的4大主要原因大衣哥实惨!被好友告上法庭,又被儿媳陈萌发文暗讽不择手段解急难愁盼促活力迸发为个体工商户发展增添底气迪士尼最受欢迎的美食是什么?盘点8种迪士尼乐园的热门食物联盟又要变天了,公牛3换1交易出炉,这是冲击总冠军的节奏啊
看完乘风破浪的姐姐收官之夜,我又开始怕老了40年代,给毛主席送老虎肉的耿飚,后来怎么样了?诺基亚,已经悄悄地东山再起孕妇可以去探望产妇吗?房屋购买合同一分钟看懂坚果Pro2S配置详情古代真有娘子军吗娘子军真的上战场吗《钱塘江》影评摘抄拔牙补牙多久(拔牙痛吗)精华描写四季的小学作文400字3篇微信聊天容易犯的条错误人脉就是这样聊坏的关于错误的作文孙小圣的惭愧

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州