转载链接
在hive中,两个表进行join,on条件两表的字段含义一致(都是整数),但数据类型不一致:string和bigint。join后发现如果数值过大则匹配的记录会出现问题:一条记录会匹配出多条记录(explain可以发现都转换为double)
如:190000000002778025,就会错误的匹配上*8023 ,*8025
a)原因:Java中精度只有15至16位,当数据超过精度就会不准——也就会出现超过精度的记录join上许多不一致的记录。
bigint和string比较时会隐式地都转换成double,java中double的精度只有15-16位(double可以精确的表示小于2^52=4503599627370496的数字)。当数字超过精度的时候就会比较不准确,出现上面描述的现象。
b)解决方法:建议将string转换为bigint~ cast(c as bigint) 后再进行比较。文章来源:https://www.toymoban.com/news/detail-854367.html
float 和 double 的区别:double更占内容,在满足需求的基础上,使用float更合理。文章来源地址https://www.toymoban.com/news/detail-854367.html
到了这里,关于Hive:bigint和string进行join出现匹配错误问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!