[
https://issues.apache.org/jira/browse/FLINK-20170?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17234455#comment-17234455
]
CaoZhen edited comment on FLINK-20170 at 11/18/20, 10:16 AM:
-------------------------------------------------------------
hi all, I've had this problem too.
I think the problem comes from when "com.fasterxml.Jackson" deserializes JSON.
[1]
As mulan said, we can fix it by code in JsonRowDeserializationSchema and
JsonRowDataDeserializationSchema:
{code:java}
objectMapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
{code}
So whether to consider opening the Jackson configuration to users?
[1]
[https://github.com/FasterXML/jackson-databind/wiki/Deserialization-Features#type-conversions]
was (Author: caozhen1937):
hi all, I've had this problem too.
I think the problem comes from when "com.fasterxml.Jackson" deserializes JSON.
[1]
As mulan said, we can fix it by code in JsonRowDeserializationSchema and
JsonRowDataDeserializationSchema:
objectMapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
So whether to consider opening the Jackson configuration to users?
[1]
https://github.com/FasterXML/jackson-databind/wiki/Deserialization-Features#type-conversions
> json deserialize decimal loses precision
> ----------------------------------------
>
> Key: FLINK-20170
> URL: https://issues.apache.org/jira/browse/FLINK-20170
> Project: Flink
> Issue Type: Improvement
> Components: Formats (JSON, Avro, Parquet, ORC, SequenceFile), Table
> SQL / API
> Reporter: Mulan
> Priority: Major
> Attachments: image-2020-11-18-16-51-35-317.png
>
>
> {code:java}
> CREATE TABLE ods (
> id BIGINT,
> factor DECIMAL(38, 18)
> ) WITH (
> 'connector.type' = 'kafka',
> 'connector.version' = 'universal',
> 'connector.topic' = '_foo',
> 'connector.topic?' = '_foo',
> 'connector.properties.bootstrap.servers' = 'localhost:9092',
> 'connector.properties.group.id' = 'g',
> 'format.type' = 'json',
> 'update-mode' = 'append'
> );
> {code}
> this following is input data.
> {code:json}
> {"id": 1, "factor": 799.929496989092949698}
> {code}
> this following is output data and loses precision.
> {code:json}
> 1, 799.929496989093000000
> {code}
> This following code call readTree() method. This method make value loses
> precision.
> {code:java}
> public Row deserialize(byte[] message) throws IOException {
> try {
> final JsonNode root = objectMapper.readTree(message);
> return (Row) runtimeConverter.convert(objectMapper,
> root);
> } catch (Throwable t) {
> throw new IOException("Failed to deserialize JSON
> object.", t);
> }
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)