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 > 在 2019年2月26日,上午10:40,Timothy Victor <vict...@gmail.com> 写道: > > 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 徐涛 <happydexu...@gmail.com > <mailto:happydexu...@gmail.com>> wrote: > 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