You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "yuanfenghu (Jira)" <ji...@apache.org> on 2022/10/17 04:47:00 UTC

[jira] [Comment Edited] (FLINK-29646) SQL Gateway should return a simpler error message

    [ https://issues.apache.org/jira/browse/FLINK-29646?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17618413#comment-17618413 ] 

yuanfenghu edited comment on FLINK-29646 at 10/17/22 4:46 AM:
--------------------------------------------------------------

Thank  [~xtsong] . It is really not the best way to use root case to simplify exception information. It may cause the problem you mentioned. This problem should be boiled down to, when we use sql-gateway for sql operation, if sql Syntax error, is it better to deal with the error as a separate strategy? Instead of all the return stack information in one go. My pr is the reference hiveserver2 mode, which may not be applicable in this scenario, but I think it is indeed possible to consider handling exceptions caused by SQL syntax errors separate. 
like using mysql or other databases
 


was (Author: JIRAUSER296932):
Thank  [~xtsong] . It is really not the best way to use root case to simplify exception information. It may cause the problem you mentioned. This problem should be boiled down to, when we use sql-gateway for sql operation, if sql Syntax error, is it better to deal with the error as a separate strategy? Instead of all the return stack information in one go. My pr is the reference hiveserver2 mode, which may not be applicable in this scenario, but I think it is indeed possible to consider handling exceptions caused by SQL syntax errors separate.

> SQL Gateway should return a simpler error message
> -------------------------------------------------
>
>                 Key: FLINK-29646
>                 URL: https://issues.apache.org/jira/browse/FLINK-29646
>             Project: Flink
>          Issue Type: Improvement
>          Components: Table SQL / Gateway
>    Affects Versions: 1.16.0
>            Reporter: yuanfenghu
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.16.0
>
>
> sql gateway should return simpler exception information
> for example:
>   If i execute a sql statement through sql gateway but my statement has syntax error  :[ inset into tablea select * from tableb  ]
> When I get exception information. The abnormal information returned by the server is too redundant to quickly find the Key Information. 
> {code:java}
> <Exception on server side:
> org.apache.flink.table.gateway.api.utils.SqlGatewayException: org.apache.flink.table.gateway.api.utils.SqlGatewayException: Failed to fetchResults.
>     at org.apache.flink.table.gateway.rest.handler.statement.FetchResultsHandler.handleRequest(FetchResultsHandler.java:77)
>     at org.apache.flink.table.gateway.rest.handler.AbstractSqlGatewayRestHandler.respondToRequest(AbstractSqlGatewayRestHandler.java:84)
>     at org.apache.flink.table.gateway.rest.handler.AbstractSqlGatewayRestHandler.respondToRequest(AbstractSqlGatewayRestHandler.java:52)
>     at org.apache.flink.runtime.rest.handler.AbstractHandler.respondAsLeader(AbstractHandler.java:196)
>     at org.apache.flink.runtime.rest.handler.LeaderRetrievalHandler.lambda$channelRead0$0(LeaderRetrievalHandler.java:83)
>     at java.util.Optional.ifPresent(Optional.java:159)
>     at org.apache.flink.util.OptionalConsumer.ifPresent(OptionalConsumer.java:45)
>     at org.apache.flink.runtime.rest.handler.LeaderRetrievalHandler.channelRead0(LeaderRetrievalHandler.java:80)
>     at org.apache.flink.runtime.rest.handler.LeaderRetrievalHandler.channelRead0(LeaderRetrievalHandler.java:49)
>     at org.apache.flink.shaded.netty4.io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
>     at org.apache.flink.runtime.rest.handler.router.RouterHandler.routed(RouterHandler.java:115)
>     at org.apache.flink.runtime.rest.handler.router.RouterHandler.channelRead0(RouterHandler.java:94)
>     at org.apache.flink.runtime.rest.handler.router.RouterHandler.channelRead0(RouterHandler.java:55)
>     at org.apache.flink.shaded.netty4.io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
>     at org.apache.flink.shaded.netty4.io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
>     at org.apache.flink.runtime.rest.FileUploadHandler.channelRead0(FileUploadHandler.java:210)
>     at org.apache.flink.runtime.rest.FileUploadHandler.channelRead0(FileUploadHandler.java:69)
>     at org.apache.flink.shaded.netty4.io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
>     at org.apache.flink.shaded.netty4.io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
>     at org.apache.flink.shaded.netty4.io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
>     at org.apache.flink.shaded.netty4.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)
>     at org.apache.flink.shaded.netty4.io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
>     at org.apache.flink.shaded.netty4.io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
>     at org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
>     at org.apache.flink.shaded.netty4.io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
>     at org.apache.flink.shaded.netty4.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
>     at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
>     at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
>     at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
>     at org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
>     at org.apache.flink.shaded.netty4.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
>     at org.apache.flink.shaded.netty4.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
>     at java.lang.Thread.run(Thread.java:748)
> Caused by: org.apache.flink.table.gateway.api.utils.SqlGatewayException: Failed to fetchResults.
>     at org.apache.flink.table.gateway.service.SqlGatewayServiceImpl.fetchResults(SqlGatewayServiceImpl.java:199)
>     at org.apache.flink.table.gateway.rest.handler.statement.FetchResultsHandler.handleRequest(FetchResultsHandler.java:73)
>     ... 48 more
> Caused by: org.apache.flink.table.gateway.service.utils.SqlExecutionException: Failed to execute the operation 5fb47960-4413-43c8-864b-b2703d5186b3.
>     at org.apache.flink.table.gateway.service.operation.OperationManager$Operation.processThrowable(OperationManager.java:389)
>     at org.apache.flink.table.gateway.service.operation.OperationManager$Operation.lambda$run$0(OperationManager.java:248)
>     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>     ... 1 more
> Caused by: org.apache.flink.table.api.SqlParserException: SQL parse failed. Encountered "inset" at line 4, column 2.
> Was expecting one of:
>     "INSERT" ...
>     "UPSERT" ...
>     
>     at org.apache.flink.table.planner.parse.CalciteParser.parseSqlList(CalciteParser.java:82)
>     at org.apache.flink.table.planner.delegation.ParserImpl.parse(ParserImpl.java:102)
>     at org.apache.flink.table.gateway.service.operation.OperationExecutor.executeStatement(OperationExecutor.java:90)
>     at org.apache.flink.table.gateway.service.SqlGatewayServiceImpl.lambda$executeStatement$0(SqlGatewayServiceImpl.java:182)
>     at org.apache.flink.table.gateway.service.operation.OperationManager.lambda$submitOperation$1(OperationManager.java:111)
>     at org.apache.flink.table.gateway.service.operation.OperationManager$Operation.lambda$run$0(OperationManager.java:239)
>     ... 7 more
> Caused by: org.apache.calcite.sql.parser.SqlParseException: Encountered "inset" at line 4, column 2.
> Was expecting one of:
>     "INSERT" ...
>     "UPSERT" ...
>     
>     at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.convertException(FlinkSqlParserImpl.java:483)
>     at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.normalizeException(FlinkSqlParserImpl.java:246)
>     at org.apache.calcite.sql.parser.SqlParser.handleException(SqlParser.java:140)
>     at org.apache.calcite.sql.parser.SqlParser.parseStmtList(SqlParser.java:195)
>     at org.apache.flink.table.planner.parse.CalciteParser.parseSqlList(CalciteParser.java:77)
>     ... 12 more
> Caused by: org.apache.flink.sql.parser.impl.ParseException: Encountered "inset" at line 4, column 2.
> Was expecting one of:
>     "INSERT" ...
>     "UPSERT" ...
>     
>     at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.generateParseException(FlinkSqlParserImpl.java:44417)
>     at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.jj_consume_token(FlinkSqlParserImpl.java:44228)
>     at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.RichSqlInsert(FlinkSqlParserImpl.java:7366)
>     at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlStatementSet(FlinkSqlParserImpl.java:8435)
>     at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlExecute(FlinkSqlParserImpl.java:8990)
>     at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlStmt(FlinkSqlParserImpl.java:3512)
>     at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.SqlStmtList(FlinkSqlParserImpl.java:2934)
>     at org.apache.flink.sql.parser.impl.FlinkSqlParserImpl.parseSqlStmtList(FlinkSqlParserImpl.java:298)
>     at org.apache.calcite.sql.parser.SqlParser.parseStmtList(SqlParser.java:193)
>     ... 13 moreEnd of exception on server side> {code}
>  
> The key information is:
> {code:java}
> org.apache.flink.sql.parser.impl.ParseException: Encountered "inset" at line 4, column 2. Was expecting one of:     "INSERT" ...     "UPSERT" ... {code}
> However, it is difficult for the client to see it quickly. I think sql gateway should have higher requirements for exception information.
> [~Wencong Liu] 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)