You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flink.apache.org by "hehuiyuan (Jira)" <ji...@apache.org> on 2019/12/19 10:26:00 UTC

[jira] [Created] (FLINK-15326) Add document description for DECIMAL(38, 18) when the sink table uses json schema

hehuiyuan created FLINK-15326:
---------------------------------

             Summary: Add document description for DECIMAL(38, 18) when the sink table uses json schema 
                 Key: FLINK-15326
                 URL: https://issues.apache.org/jira/browse/FLINK-15326
             Project: Flink
          Issue Type: Wish
            Reporter: hehuiyuan


Env : 

        Flink 1.9.1 

        table-planner-blink

 

Question:

If i have a kafka sink table with json schema:

 
{code:java}
String jsonSchema = 
"{
    type:'object',
    properties:{
        name: { type: 'string' },
        age: { type: 'integer' },
        sex: { type: 'string' }
    }
}";
JsonRowDeserializationSchema deserializationSchema = new JsonRowDeserializationSchema(jsonSchema.toString());
TypeInformation fieldTypes = deserializationSchema.getProducedType();
Kafka kafka = new Kafka.......
Schema schema = new Schema......
tableEnvironment.connect(kafka)
 .withFormat( new Json().jsonSchema(jsonSchema))
 .withSchema( schema )
 .inAppendMode()
 .registerTableSink("sink_table")
;
String sinksql = "insert into sink_example2 select * from table2"
tableEnvironment.sqlUpdate(sinksql);
{code}
 

 

Error:
{code:java}

Query result schema: [name: String, age: BigDecimal, sex: String]
TableSink schema:    [name: String, age: BigDecimal, sex: String]

{code}
The table `table2` : table schema 

 
{code:java}
[2019-12-19 18:10:16,937] INFO t2: root
 |-- name: STRING
 |-- age: DECIMAL(10, 0)
 |-- sex: STRING
 
{code}
 

When i use kafka to read data for json schema , i understand the integer type in json is mapped  DECIMAL(38, 18) in flink table

 
{code:java}
|-- name: STRING
 |-- age: DECIMAL(38, 18)
 |-- sex: STRING
{code}
 

That's why i  know to set decimal precision
{code:java}

String sinksql = "insert into sink_example2 select name CAST(age as decimal(38,18) ) as age, sex from table2"
{code}
JSON format needs to pay attention to this problem.

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)