Henry Robinson created HIVE-5060:
------------------------------------
Summary: 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
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