Hi Experts,
There is a Flink table which has a column typed as java.math.BigDecimal, then in SQL I try to cast it to type long, cast(duration as bigint) however it throws the following exception: java.lang.ArithmeticException: Rounding necessary at java.math.BigDecimal.commonNeedIncrement(BigDecimal.java:4148) at java.math.BigDecimal.needIncrement(BigDecimal.java:4204) at java.math.BigDecimal.divideAndRound(BigDecimal.java:4112) at java.math.BigDecimal.setScale(BigDecimal.java:2452) at java.math.BigDecimal.longValueExact(BigDecimal.java:3090) at DataStreamCalcRule$45.processElement(Unknown Source) at org.apache.flink.table.runtime.CRowProcessRunner.processElement(CRowProcessRunner.scala:66) at org.apache.flink.table.runtime.CRowProcessRunner.processElement(CRowProcessRunner.scala:35) at org.apache.flink.streaming.api.operators.ProcessOperator.processElement(ProcessOperator.java:66) I wonder if it is not possible to cast java.math.BigDecimal to Long at runtime, is there anyway to achieve the cast? Thanks a lot ! Best Henry |
This is more a Java question than Flink per se. But I believe you need to specify the rounding mode because it is calling longValueExact. If it just called longValue it would have worked without throwing an exception....but you risk overflowing 64 bits and getting a totally erroneous answer. Are your values really greater than 64 bits? If it is then the only option other than BigDecimal in Java would be BigInt. Or you start splitting your values into 2 parts...an unscaled value and a factor such that your value is unscaledValue * 10^(-factor). Tim On Mon, Feb 25, 2019, 8:26 PM 徐涛 <[hidden email]> wrote: Hi Experts, |
Hi Victor,
Yeah, I think it is a Java question, but I just wonder how could set scale of BigDecimal type in Flink. For example, I use the Types.DECIMAL type in table connector, and set the column name to A, then I divide the column A by 1.1 in SQL. Then it will report exception then. But it seems that Flink does not apply APIs to modify the scale of the BigDecimal value. Best Henry
|
Free forum by Nabble | Edit this page |