我正在使用impalajdbc2.6.4.1005向kudu表写入数据。
我在将值为7896163500的bigdecimal插入到decimal(20,2)时遇到了这个错误。
[Cloudera][ImpalaJDBCDriver](500051) ERROR processing query/statement. Error Code: 0, SQL state: TStatus(statusCode:ERROR_STATUS, sqlState:HY000, errorMessage:AnalysisException: Possible loss of precision for target table 'ST.RFQ_SPOT'.
Expression '7896163500' (type: BIGINT) would need to be cast to DECIMAL(20,2) for column 'req_amount'
但是,我插入的值也适合十进制(12,2)。我不明白为什么我从司机那里得到这个错误。
如果我将列定义为decimal(30,2),它将正常工作。
此外,如果我尝试手动进行强制转换,我会得到预期的结果:
select cast (cast(7896163500 as BIGINT) as DECIMAL(12,2))
1 7896163500.00
1条答案
按热度按时间bqf10yzr1#
这是一个预期的事件。
在 Impala ,默认情况下- 如果指定值(如7896163500)进入 十进制的 列,impala检查该列是否有足够的精度来表示该整数类型的最大值,如果没有,则引发错误。
在这里 7896163500是一个bigint,bigint的最大存储空间是8字节。因为我们这里有两个小数位数,你可以看到下面的错误,
因此,使用如下表达式
(cast(7896163500 as BIGINT)
作为DECIMAL(12,2))
对于 十进制的 列中插入详细信息。希望这有帮助!更多信息: https://www.cloudera.com/documentation/enterprise/5-6-x/topics/impala_decimal.html