Hive 会在转换后删除小数点吗?

问题描述

在 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 位。 你能解释一下为什么会给出这个结果吗?

预先感谢您的帮助。

解决方法

我认为这是由于详细的十进制除法规则here。该链接适用于 SQL 服务器,但显然此处显示的行为是相同的。

如果大于 6 且整数部分大于 32,则小数位数将设置为 6。在这种情况下,整数部分和小数位数都会减少,结果类型为小数 (38,6)。结果可能会四舍五入到小数点后 6 位,否则如果整数部分不能容纳 32 位,则会抛出溢出错误。

此 Hive document(第 3 页)中引用了 SQL 服务器实现。