与HIVE doc https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-string
一样HIVE可以隐含地将STRING转换为DOUBLE。我有一个HIVE脚本,在一些字段上连接两个表,其中有一个字段定义为STRING。不幸的是,有两个记录以' 0'而另一个则不是,但其余部分是相同的。这导致两个表的连接结果错误。
在&EXPLOHES SQL'我发现使用UDFToDouble(字段)将此记录转换为double。 HIVE进行这种隐式转换的可能情况是什么?提高散列/排序性能?
答案 0 :(得分:1)
如果你的脚本包含一个匹配两列的JOIN子句,一个是STRING而另一个是DOUBLE,那么Hive必须通过将一个列转换为另一个格式来解决不匹配问题。就像Oracle,MySQL一样。
由于非默认的STRING格式,结果通常是灾难性的。结论:只检测数据模型中的类型不匹配,并自行管理类型转换,所有这些都是您自己。
顺便说一句,DOUBLE本身就是灾难性的,因为细微的舍入误差,例如: 3.0 /3.0 *3.0
可能会返回0.9999999999...
,这不等于1.0
;幸运的是,Hive现在支持固定精度数字,例如DECIMAL(22,7)