hive在强制转换后删除小数?

inn6fuwd  于 2021-07-15  发布在  Hadoop
关注(0)|答案(1)|浏览(872)

在Hive里,我进行了一些操作测试,得到了一种我无法理解的行为。在执行该操作时,hive将返回逗号后带有17位小数的以下结果:

select 500/3260;
> 0.15337423312883436

但当我要用十进制格式转换它时,结果是:

select cast(500 as decimal(38,18)) / cast(3260 as decimal(38,18));
> 0.153374

我想有18位小数,但只有6位显示。你能解释一下为什么会有这个结果吗?
事先谢谢你的帮助。

ego6inou

ego6inou1#

我认为这是由于这里详细介绍的十进制除法规则。这个链接是针对sql server的,但是这里显示的行为显然是相同的。
如果大于6,并且整数部分大于32,则刻度将设置为6。在这种情况下,整数部分和小数位数都会减少,结果类型是decimal(38,6)。结果可能会四舍五入到小数点后6位,如果整数部分不能放入32位,则会引发溢出错误。
此配置单元文档(第3页)中引用了sql server实现。

相关问题