Hive 蜂巢,以避免转换为科学

Hive 蜂巢,以避免转换为科学,hive,Hive,我在配置单元中出现如下值转换错误。如何解决这个问题 select 28200*100000; select cast(28200*100000 as BIGINT); output: -1474967296 实际产出应为 2820000000 在您的第一个查询中,配置单元会自动将结果转换为整数,因为您的结果是整数的乘法,并且结果超过了整数精度(最终是纯Java)。在第二个查询中,转换是在数学运算之后进行的,这就是为什么会得到相同的结果。您可以通过以下方式执行此操作 数学运算前的铸造 sele

我在配置单元中出现如下值转换错误。如何解决这个问题

select 28200*100000;
select cast(28200*100000 as BIGINT);
output: -1474967296
实际产出应为

2820000000

在您的第一个查询中,配置单元会自动将结果转换为整数,因为您的结果是整数的乘法,并且结果超过了整数精度(最终是纯Java)。在第二个查询中,转换是在数学运算之后进行的,这就是为什么会得到相同的结果。您可以通过以下方式执行此操作

数学运算前的铸造

select cast(28200 as bigint) * cast(100000 as bigint);
或指示值为long(因此结果也将为long)


知道了!!。。因此,如果int x int输出为long,它将不会转换为long(因此闪烁)。但是int x long将转换为更高的精度,因此它将输出long。选择cast(28200作为bigint)*100000也工作。谢谢这不是科学的表示法,它只是溢出了最大整数值
select 28200L*100000L;