为什么impala jdbc在从BigDecimal转换为DECIMAL时抛出异常?

为什么impala jdbc在从BigDecimal转换为DECIMAL时抛出异常?,jdbc,cloudera,impala,apache-kudu,Jdbc,Cloudera,Impala,Apache Kudu,我正在使用impala jdbc 2.6.4.1005向Kudu表写入数据 在将值为7896163500的BigDecimal插入到DECIMAL(20,2)时,我遇到了这个错误 但是,我插入的值也适合十进制(12,2)。 我不明白为什么我从司机那里得到这个错误 如果我将该列定义为十进制(30,2),它将正常工作 此外,如果我尝试手动进行强制转换,我会得到预期的结果: select cast (cast(7896163500 as BIGINT) as DECIMAL(12,2)) 1 78

我正在使用impala jdbc 2.6.4.1005向Kudu表写入数据

在将值为7896163500的BigDecimal插入到DECIMAL(20,2)时,我遇到了这个错误

但是,我插入的值也适合十进制(12,2)。 我不明白为什么我从司机那里得到这个错误

如果我将该列定义为十进制(30,2),它将正常工作

此外,如果我尝试手动进行强制转换,我会得到预期的结果:

select cast (cast(7896163500 as BIGINT) as DECIMAL(12,2))
1   7896163500.00

这是意料之中的事

在Impala中,默认情况下-如果指定一个值(如7896163500)进入十进制列,Impala将检查该列是否具有足够的精度来表示该整数类型的最大值,如果没有,则会引发错误

这里7896163500是一个BIGINT,BIGINT的最大存储量是8字节。因为这里有两个小数位数,你可以看到下面的错误

Expression '7896163500' (type: BIGINT) would need to be cast to DECIMAL(20,2) for column 'req_amount'
因此,对十进制列使用类似于
(cast(7896163500作为BIGINT)
作为
十进制(12,2))
的表达式,就像您插入详细信息所做的那样。希望这有帮助


更多信息:

这是一个预期事件

在Impala中,默认情况下-如果指定一个值(如7896163500)进入十进制列,Impala将检查该列是否具有足够的精度来表示该整数类型的最大值,如果没有,则会引发错误

这里7896163500是一个BIGINT,BIGINT的最大存储量是8字节。因为这里有两个小数位数,你可以看到下面的错误

Expression '7896163500' (type: BIGINT) would need to be cast to DECIMAL(20,2) for column 'req_amount'
因此,对十进制列使用类似于
(cast(7896163500作为BIGINT)
作为
十进制(12,2))
的表达式,就像您插入详细信息所做的那样。希望这有帮助

更多信息: