今天在使用array_contains对collect_set的结果集和xxx字段的内容进行判断,但是判断结果不符合预期。
排查发现xxx字段是String类型的,在进行算数运算后,结果被转为Double类型,和collect_set的int类型不一致,从而导致结果与预期不符。
验证如下:
总结:1、Hive在需要的时候将会对numeric类型的数据进行隐式转换
2、Hive也包括 隐式转换(implicit conversions)和显式转换(explicitly conversions)
3、使用cast(字段 as 类型) 实现显示转换
4、任何整数类型都可以隐式地转换成一个范围更大的类型,BOOLEAN类型不能转换为其他任何数据类型
5、在使用String类型进行算数运算时,一定要注意,必要时使用显示转换。