[ https://issues.apache.org/jira/browse/FLINK-15309?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
xiaojin.wy updated FLINK-15309: ------------------------------- Description: *The sql is:* CREATE TABLE `src` ( key bigint, v varchar ) WITH ( 'format.field-delimiter'='|', 'connector.type'='filesystem', 'format.derive-schema'='true', 'connector.path'='/defender_test_data/daily_regression_batch_hive_1.10/test_cast/sources/src.csv', 'format.type'='csv' ); select cast(key as decimal(10,2)) as c1, cast(key as char(10)) as c2, cast(key as varchar(10)) as c3 from src order by c1, c2, c3 limit 1; *The result schema get in the code is:* sinkSchema:root |-- c1: DECIMAL(10, 2) |-- c2: CHAR(10) |-- c3: VARCHAR(10) *The detail:* If you user the sql above to execute in a sqlclinet environment, you can get the result like this: !image-2019-12-18-15-53-24-501.png! But if you put the result directly into a cvs sink in the code, there will be a exception: Caused by: java.lang.NumberFormatException: Zero length BigInteger at java.math.BigInteger.<init>(BigInteger.java:302) at org.apache.flink.table.dataformat.Decimal.fromUnscaledBytes(Decimal.java:214) at org.apache.flink.table.dataformat.Decimal.readDecimalFieldFromSegments(Decimal.java:487) at org.apache.flink.table.dataformat.BinaryRow.getDecimal(BinaryRow.java:334) at org.apache.flink.table.dataformat.DataFormatConverters$BigDecimalConverter.toExternalImpl(DataFormatConverters.java:642) at org.apache.flink.table.dataformat.DataFormatConverters$BigDecimalConverter.toExternalImpl(DataFormatConverters.java:618) at org.apache.flink.table.dataformat.DataFormatConverters$DataFormatConverter.toExternal(DataFormatConverters.java:358) at org.apache.flink.table.dataformat.DataFormatConverters$RowConverter.toExternalImpl(DataFormatConverters.java:1370) at org.apache.flink.table.dataformat.DataFormatConverters$RowConverter.toExternalImpl(DataFormatConverters.java:1349) at org.apache.flink.table.dataformat.DataFormatConverters$DataFormatConverter.toExternal(DataFormatConverters.java:340) at SinkConversion$43.processElement(Unknown Source) at org.apache.flink.streaming.runtime.tasks.OperatorChain$ChainingOutput.pushToOperator(OperatorChain.java:550) at org.apache.flink.streaming.runtime.tasks.OperatorChain$ChainingOutput.collect(OperatorChain.java:527) at org.apache.flink.streaming.runtime.tasks.OperatorChain$ChainingOutput.collect(OperatorChain.java:487) at org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect(AbstractStreamOperator.java:730) at org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect(AbstractStreamOperator.java:708) at org.apache.flink.table.runtime.util.StreamRecordCollector.collect(StreamRecordCollector.java:44) at org.apache.flink.table.runtime.operators.sort.SortLimitOperator.endInput(SortLimitOperator.java:98) at org.apache.flink.streaming.runtime.tasks.OperatorChain.endOperatorInput(OperatorChain.java:265) at org.apache.flink.streaming.runtime.tasks.OperatorChain.endHeadOperatorInput(OperatorChain.java:249) at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:73) at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:311) at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:187) at org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:488) at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:470) at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:702) at org.apache.flink.runtime.taskmanager.Task.run(Task.java:527) at java.lang.Thread.run(Thread.java:834) *The input data is:* 193|val_193 338|val_338 446|val_446 459|val_459 394|val_394 237|val_237 482|val_482 174|val_174 413|val_413 494|val_494 207|val_207 199|val_199 466|val_466 208|val_208 174|val_174 399|val_399 396|val_396 247|val_247 417|val_417 489|val_489 162|val_162 377|val_377 397|val_397 309|val_309 365|val_365 266|val_266 439|val_439 342|val_342 367|val_367 325|val_325 167|val_167 195|val_195 475|val_475 17|val_17 113|val_113 155|val_155 203|val_203 339|val_339 0|val_0 455|val_455 128|val_128 311|val_311 316|val_316 57|val_57 302|val_302 was: *The sql is:* CREATE TABLE `src` ( key bigint, v varchar ) WITH ( 'format.field-delimiter'='|', 'connector.type'='filesystem', 'format.derive-schema'='true', 'connector.path'='/defender_test_data/daily_regression_batch_hive_1.10/test_cast/sources/src.csv', 'format.type'='csv' ); select cast(key as decimal(10,2)) as c1, cast(key as char(10)) as c2, cast(key as varchar(10)) as c3 from src order by c1, c2, c3 limit 1; *The result schema get in the code is:* sinkSchema:root |-- c1: DECIMAL(10, 2) |-- c2: CHAR(10) |-- c3: VARCHAR(10) *The detail:* If you user the sql above to execute in a sqlclinet environment, you can get the result like this: !image-2019-12-18-15-53-24-501.png! But if you change the result directly to a cvs sink in the code, there will be a exception: Caused by: java.lang.NumberFormatException: Zero length BigInteger at java.math.BigInteger.<init>(BigInteger.java:302) at org.apache.flink.table.dataformat.Decimal.fromUnscaledBytes(Decimal.java:214) at org.apache.flink.table.dataformat.Decimal.readDecimalFieldFromSegments(Decimal.java:487) at org.apache.flink.table.dataformat.BinaryRow.getDecimal(BinaryRow.java:334) at org.apache.flink.table.dataformat.DataFormatConverters$BigDecimalConverter.toExternalImpl(DataFormatConverters.java:642) at org.apache.flink.table.dataformat.DataFormatConverters$BigDecimalConverter.toExternalImpl(DataFormatConverters.java:618) at org.apache.flink.table.dataformat.DataFormatConverters$DataFormatConverter.toExternal(DataFormatConverters.java:358) at org.apache.flink.table.dataformat.DataFormatConverters$RowConverter.toExternalImpl(DataFormatConverters.java:1370) at org.apache.flink.table.dataformat.DataFormatConverters$RowConverter.toExternalImpl(DataFormatConverters.java:1349) at org.apache.flink.table.dataformat.DataFormatConverters$DataFormatConverter.toExternal(DataFormatConverters.java:340) at SinkConversion$43.processElement(Unknown Source) at org.apache.flink.streaming.runtime.tasks.OperatorChain$ChainingOutput.pushToOperator(OperatorChain.java:550) at org.apache.flink.streaming.runtime.tasks.OperatorChain$ChainingOutput.collect(OperatorChain.java:527) at org.apache.flink.streaming.runtime.tasks.OperatorChain$ChainingOutput.collect(OperatorChain.java:487) at org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect(AbstractStreamOperator.java:730) at org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect(AbstractStreamOperator.java:708) at org.apache.flink.table.runtime.util.StreamRecordCollector.collect(StreamRecordCollector.java:44) at org.apache.flink.table.runtime.operators.sort.SortLimitOperator.endInput(SortLimitOperator.java:98) at org.apache.flink.streaming.runtime.tasks.OperatorChain.endOperatorInput(OperatorChain.java:265) at org.apache.flink.streaming.runtime.tasks.OperatorChain.endHeadOperatorInput(OperatorChain.java:249) at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:73) at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:311) at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:187) at org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:488) at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:470) at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:702) at org.apache.flink.runtime.taskmanager.Task.run(Task.java:527) at java.lang.Thread.run(Thread.java:834) *The input data is:* 193|val_193 338|val_338 446|val_446 459|val_459 394|val_394 237|val_237 482|val_482 174|val_174 413|val_413 494|val_494 207|val_207 199|val_199 466|val_466 208|val_208 174|val_174 399|val_399 396|val_396 247|val_247 417|val_417 489|val_489 162|val_162 377|val_377 397|val_397 309|val_309 365|val_365 266|val_266 439|val_439 342|val_342 367|val_367 325|val_325 167|val_167 195|val_195 475|val_475 17|val_17 113|val_113 155|val_155 203|val_203 339|val_339 0|val_0 455|val_455 128|val_128 311|val_311 316|val_316 57|val_57 302|val_302 > Execute sql appear "NumberFormatException: Zero length BigInteger" > ------------------------------------------------------------------ > > Key: FLINK-15309 > URL: https://issues.apache.org/jira/browse/FLINK-15309 > Project: Flink > Issue Type: Bug > Components: Table SQL / Client > Affects Versions: 1.10.0 > Reporter: xiaojin.wy > Priority: Major > Attachments: image-2019-12-18-15-53-24-501.png > > > *The sql is:* > CREATE TABLE `src` ( > key bigint, > v varchar > ) WITH ( > 'format.field-delimiter'='|', > 'connector.type'='filesystem', > 'format.derive-schema'='true', > > 'connector.path'='/defender_test_data/daily_regression_batch_hive_1.10/test_cast/sources/src.csv', > 'format.type'='csv' > ); > select > cast(key as decimal(10,2)) as c1, > cast(key as char(10)) as c2, > cast(key as varchar(10)) as c3 > from src > order by c1, c2, c3 > limit 1; > *The result schema get in the code is:* > sinkSchema:root > |-- c1: DECIMAL(10, 2) > |-- c2: CHAR(10) > |-- c3: VARCHAR(10) > *The detail:* > If you user the sql above to execute in a sqlclinet environment, you can get > the result like this: > !image-2019-12-18-15-53-24-501.png! > But if you put the result directly into a cvs sink in the code, there will be > a exception: > Caused by: java.lang.NumberFormatException: Zero length BigInteger > at java.math.BigInteger.<init>(BigInteger.java:302) > at > org.apache.flink.table.dataformat.Decimal.fromUnscaledBytes(Decimal.java:214) > at > org.apache.flink.table.dataformat.Decimal.readDecimalFieldFromSegments(Decimal.java:487) > at > org.apache.flink.table.dataformat.BinaryRow.getDecimal(BinaryRow.java:334) > at > org.apache.flink.table.dataformat.DataFormatConverters$BigDecimalConverter.toExternalImpl(DataFormatConverters.java:642) > at > org.apache.flink.table.dataformat.DataFormatConverters$BigDecimalConverter.toExternalImpl(DataFormatConverters.java:618) > at > org.apache.flink.table.dataformat.DataFormatConverters$DataFormatConverter.toExternal(DataFormatConverters.java:358) > at > org.apache.flink.table.dataformat.DataFormatConverters$RowConverter.toExternalImpl(DataFormatConverters.java:1370) > at > org.apache.flink.table.dataformat.DataFormatConverters$RowConverter.toExternalImpl(DataFormatConverters.java:1349) > at > org.apache.flink.table.dataformat.DataFormatConverters$DataFormatConverter.toExternal(DataFormatConverters.java:340) > at SinkConversion$43.processElement(Unknown Source) > at > org.apache.flink.streaming.runtime.tasks.OperatorChain$ChainingOutput.pushToOperator(OperatorChain.java:550) > at > org.apache.flink.streaming.runtime.tasks.OperatorChain$ChainingOutput.collect(OperatorChain.java:527) > at > org.apache.flink.streaming.runtime.tasks.OperatorChain$ChainingOutput.collect(OperatorChain.java:487) > at > org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect(AbstractStreamOperator.java:730) > at > org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect(AbstractStreamOperator.java:708) > at > org.apache.flink.table.runtime.util.StreamRecordCollector.collect(StreamRecordCollector.java:44) > at > org.apache.flink.table.runtime.operators.sort.SortLimitOperator.endInput(SortLimitOperator.java:98) > at > org.apache.flink.streaming.runtime.tasks.OperatorChain.endOperatorInput(OperatorChain.java:265) > at > org.apache.flink.streaming.runtime.tasks.OperatorChain.endHeadOperatorInput(OperatorChain.java:249) > at > org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:73) > at > org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:311) > at > org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:187) > at > org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:488) > at > org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:470) > at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:702) > at org.apache.flink.runtime.taskmanager.Task.run(Task.java:527) > at java.lang.Thread.run(Thread.java:834) > *The input data is:* > 193|val_193 > 338|val_338 > 446|val_446 > 459|val_459 > 394|val_394 > 237|val_237 > 482|val_482 > 174|val_174 > 413|val_413 > 494|val_494 > 207|val_207 > 199|val_199 > 466|val_466 > 208|val_208 > 174|val_174 > 399|val_399 > 396|val_396 > 247|val_247 > 417|val_417 > 489|val_489 > 162|val_162 > 377|val_377 > 397|val_397 > 309|val_309 > 365|val_365 > 266|val_266 > 439|val_439 > 342|val_342 > 367|val_367 > 325|val_325 > 167|val_167 > 195|val_195 > 475|val_475 > 17|val_17 > 113|val_113 > 155|val_155 > 203|val_203 > 339|val_339 > 0|val_0 > 455|val_455 > 128|val_128 > 311|val_311 > 316|val_316 > 57|val_57 > 302|val_302 -- This message was sent by Atlassian Jira (v8.3.4#803005)