什么时候HIVE会将字符串转换为双重隐含?

时间:2016-01-28 08:01:55

标签: hadoop hive emr

与HIVE doc https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-string

一样

HIVE可以隐含地将STRING转换为DOUBLE。我有一个HIVE脚本,在一些字段上连接两个表,其中有一个字段定义为STRING。不幸的是,有两个记录以' 0'而另一个则不是,但其余部分是相同的。这导致两个表的连接结果错误。

在&EXPLOHES SQL'我发现使用UDFToDouble(字段)将此记录转换为double。 HIVE进行这种隐式转换的可能情况是什么?提高散列/排序性能?

1 个答案:

答案 0 :(得分:1)

如果你的脚本包含一个匹配两列的JOIN子句,一个是STRING而另一个是DOUBLE,那么Hive必须通过将一个列转换为另一个格式来解决不匹配问题。就像Oracle,MySQL一样。

由于非默认的STRING格式,结果通常是灾难性的。结论:只检测数据模型中的类型不匹配,并自行管理类型转换,所有这些都是您自己

顺便说一句,DOUBLE本身就是灾难性的,因为细微的舍入误差,例如: 3.0 /3.0 *3.0可能会返回0.9999999999...,这不等于1.0;幸运的是,Hive现在支持固定精度数字,例如DECIMAL(22,7)