[ https://issues.apache.org/jira/browse/HIVE-5060?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13740490#comment-13740490 ]
Henry Robinson commented on HIVE-5060: -------------------------------------- [~amareshwari] - thanks for your comments! I have a couple of responses: * For SELECT etc. queries, there's no need to do the polling (and the patch does not poll in that case), since the call to fetch the results will block until some are ready. * The polling only happens 10 times a second, which should not overload any reasonable server even at quite high levels of concurrency * I can see that it would be useful to have a call that was synchronous; it just seems that {{executeStatement}} was not designed to be it since it returns a handle. If the idea is not to poll its status, I'm not sure why {{executeStatement}} would return {{TOperationHandle}}. However, it will be good to have both APIs eventually, I would just rather that {{executeStatement}} was the async one. > JDBC driver assumes executeStatement is synchronous > --------------------------------------------------- > > Key: HIVE-5060 > URL: https://issues.apache.org/jira/browse/HIVE-5060 > Project: Hive > Issue Type: Bug > Components: JDBC > Affects Versions: 0.11.0 > Reporter: Henry Robinson > Fix For: 0.11.1, 0.12.0 > > Attachments: > 0001-HIVE-5060-JDBC-driver-assumes-executeStatement-is-sy.patch, > HIVE-5060.patch > > > The JDBC driver seems to assume that {{ExecuteStatement}} is a synchronous > call when performing updates via {{executeUpdate}}, where the following > comment on the RPC in the Thrift file indicates otherwise: > {code} > // ExecuteStatement() > // > // Execute a statement. > // The returned OperationHandle can be used to check on the > // status of the statement, and to fetch results once the > // statement has finished executing. > {code} > I understand that Hive's implementation of {{ExecuteStatement}} is blocking > (see https://issues.apache.org/jira/browse/HIVE-4569), but presumably other > implementations of the HiveServer2 API (and I'm talking specifically about > Impala here, but others might have a similar concern) should be free to > return a pollable {{OperationHandle}} per the specification. > The JDBC driver's {{executeUpdate}} is as follows: > {code} > public int executeUpdate(String sql) throws SQLException { > execute(sql); > return 0; > } > {code} > {{execute(sql)}} discards the {{OperationHandle}} that it gets from the > server after determining whether there are results to be fetched. > This is problematic for us, because Impala will cancel queries that are > running when a session executes, but there's no easy way to be sure that an > {{INSERT}} statement has completed before terminating a session on the client. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira