为什么hiveconnection不支持getholdability()?将c3p0与hivedriver结合使用

pgpifvop  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(481)

我想用 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

这是虫子吗?
通常,是否可以使用连接池,例如 C3P0Hive (我实际上正在使用 Spark SQL )?
更新1(2017-11-15)
我只是试过了 dbcp2 ( org.apache.commons.dbcp2.BasicDataSource )而且成功了。我想不知怎么的 dbcp2 不调用 Connection#getHoldability() 方法。

ngynwnxp

ngynwnxp1#

(我在这里回答我自己的问题。)
感谢mark rotteveel的建议,我现在也认为这个问题确实是一个bug。我已经向apache提交了一份错误报告hive-18082(这里)。
在修复错误之前,一个临时解决方法是使用不同的连接池-- DBCP2 而不是 C3P0 . 由于某种原因,前者不呼吁 Connection#getHoldability() 因此不受 HiveConnection

相关问题