我刚开始用司机 org.apache.hive.jdbc.HiveDriver
(spark2的1.2.1版)带有spark thrift服务器(sts)(参考此处) java.sql.ResultSet
定义方法 absolute()
(这里是javadoc)
但是 HiveBaseResultSet
似乎选择了不实现这个方法(这里是源代码)
所以现在我的应用程序(建立在 SmartGWT
)正在执行一个简单的操作,我收到以下错误消息:
=== 2017-05-13 18:06:16,980 [3-47] WARN RequestContext - dsRequest.execute() failed:
java.sql.SQLException: Method not supported
at org.apache.hive.jdbc.HiveBaseResultSet.absolute(HiveBaseResultSet.java:70)
at org.apache.commons.dbcp.DelegatingResultSet.absolute(DelegatingResultSet.java:373)
at com.isomorphic.sql.SQLDataSource.executeWindowedSelect(SQLDataSource.java:2970)
at com.isomorphic.sql.SQLDataSource.SQLExecute(SQLDataSource.java:2024)
驱动程序选择不执行的原因是什么 absolute()
?
是否有任何解决限制的方法?
1条答案
按热度按时间a9wyjsp71#
谢谢马克·罗特维尔的暗示。现在我更明白了,让我贴出我自己问题的答案。
absolute()的实现是可选的
按照
ResultSet#absolute()
(链接),用于absolute()
是可选的——尤其是当结果集类型是TYPE_FORWARD_ONLY
.变通办法
在我的例子中,结果集来自spark thrift服务器(sts),所以我猜它确实只是向前的。所以问题变成了如何指导我的申请不打电话给
absolute()
,基本上是光标移动。smartgwt特定答案
为了
SmartGWT
,这由一个名为sqlPaging
,我们可以为OperationBinding
. 正确的使用价值似乎是dropAtServer
(此处提供更多参考)。所以我将smartgwt数据源xml文件设置为在那之后,我看到了另一个错误,它现在与
HiveConnection#commit()
:在进一步挖掘之后,我意识到smartgwt控制提交行为的正确属性是
autoJoinTransactions
我应该把它设为false(这里有更多的引用)。在这两次修改之后,我可以让五月的申请通过jdbc.HiveDriver
对于那些也在尝试这个的人,这里是我在smartgwt中对驱动程序的完整设置server.properties
(更多参考)