为什么 HiveConnection 不支持 getHoldability()?将 C3P0 与 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的源代码(这里(

/*
 * (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

这是一个错误吗?

一般来说,是否可以使用这样的连接池与Hive C3P0一样(我实际上正在使用Spark SQL(?

更新 1 (2017-11-15(

我刚刚尝试了dbcp2(org.apache.commons.dbcp2.BasicDataSource(,它起作用了。 我想不知何故dbcp2没有调用Connection#getHoldability()方法。

(我在这里回答我自己的问题。 )

感谢Mark Rotteveel的建议,我现在也认为问题确实是一个错误。 我已经向Apache提交了HIVE-18082(这里(的错误报告。

在修复错误之前,一种临时解决方法是使用不同的连接池 - DBCP2而不是C3P0。 由于某种原因,前者不会调用Connection#getHoldability(),因此不受HiveConnection中的此错误的影响

相关内容

  • 没有找到相关文章

最新更新