为什么 HiveConnection 不支持 getHoldability()?将 C3P0 与 HiveDriver 一起使用
Why does not HiveConnection support getHoldability()? Using C3P0 with HiveDriver
我正在尝试将 C3P0
(com.mchange.v2.c3p0.ComboPooledDataSource
) 与 HiveDriver
(org.apache.hive.jdbc.HiveDriver
) 一起使用。我有一个例外:
java.sql.SQLException: Method not supported
at org.apache.hive.jdbc.HiveConnection.getHoldability(HiveConnection.java:924)
at com.mchange.v2.c3p0.impl.NewPooledConnection.<init>(NewPooledConnection.java:106)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:159)
我找到了 HiveConnection
(here)
的源代码
/*
* (non-Javadoc)
*
* @see java.sql.Connection#getHoldability()
*/
@Override
public int getHoldability() throws SQLException {
// TODO Auto-generated method stub
throw new SQLFeatureNotSupportedException("Method not supported");
}
我的问题:为什么 HiveConnection
选择抛出一个
SQLFeatureNotSupportedException
?而不是只返回其中之一?
ResultSet.HOLD_CURSORS_OVER_COMMIT
ResultSet.CLOSE_CURSORS_AT_COMMIT
这是一个错误吗?
一般来说,是否可以使用这样的连接池
as C3P0
with Hive
(我实际上使用的是 Spark SQL
)?
更新一 (2017-11-15)
我刚刚尝试了 dbcp2
(org.apache.commons.dbcp2.BasicDataSource
) 并且成功了。我想不知何故 dbcp2
不会调用 Connection#getHoldability()
方法。
(我在这里回答我自己的问题。)
感谢Mark Rotteveel的建议,我现在也觉得问题确实是bug。我已经向 Apache 提交了错误报告 HIVE-18082 (here)。
在修复错误之前,一个临时解决方法是使用不同的连接池——DBCP2
而不是 C3P0
。由于某种原因,前者没有调用 Connection#getHoldability()
,因此不受 HiveConnection
中此错误的影响
我正在尝试将 C3P0
(com.mchange.v2.c3p0.ComboPooledDataSource
) 与 HiveDriver
(org.apache.hive.jdbc.HiveDriver
) 一起使用。我有一个例外:
java.sql.SQLException: Method not supported
at org.apache.hive.jdbc.HiveConnection.getHoldability(HiveConnection.java:924)
at com.mchange.v2.c3p0.impl.NewPooledConnection.<init>(NewPooledConnection.java:106)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:159)
我找到了 HiveConnection
(here)
/*
* (non-Javadoc)
*
* @see java.sql.Connection#getHoldability()
*/
@Override
public int getHoldability() throws SQLException {
// TODO Auto-generated method stub
throw new SQLFeatureNotSupportedException("Method not supported");
}
我的问题:为什么 HiveConnection
选择抛出一个
SQLFeatureNotSupportedException
?而不是只返回其中之一?
ResultSet.HOLD_CURSORS_OVER_COMMIT
ResultSet.CLOSE_CURSORS_AT_COMMIT
这是一个错误吗?
一般来说,是否可以使用这样的连接池
as C3P0
with Hive
(我实际上使用的是 Spark SQL
)?
更新一 (2017-11-15)
我刚刚尝试了 dbcp2
(org.apache.commons.dbcp2.BasicDataSource
) 并且成功了。我想不知何故 dbcp2
不会调用 Connection#getHoldability()
方法。
(我在这里回答我自己的问题。)
感谢Mark Rotteveel的建议,我现在也觉得问题确实是bug。我已经向 Apache 提交了错误报告 HIVE-18082 (here)。
在修复错误之前,一个临时解决方法是使用不同的连接池——DBCP2
而不是 C3P0
。由于某种原因,前者没有调用 Connection#getHoldability()
,因此不受 HiveConnection