org.apache.hive.jdbc.hivedriver:hivebaseresultset尚未实现absolute()?

blmhpbnm  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(503)

我刚开始用司机 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() ?
是否有任何解决限制的方法?

a9wyjsp7

a9wyjsp71#

谢谢马克·罗特维尔的暗示。现在我更明白了,让我贴出我自己问题的答案。
absolute()的实现是可选的
按照 ResultSet#absolute() (链接),用于 absolute() 是可选的——尤其是当结果集类型是 TYPE_FORWARD_ONLY .
变通办法
在我的例子中,结果集来自spark thrift服务器(sts),所以我猜它确实只是向前的。所以问题变成了如何指导我的申请不打电话给 absolute() ,基本上是光标移动。
smartgwt特定答案
为了 SmartGWT ,这由一个名为 sqlPaging ,我们可以为 OperationBinding . 正确的使用价值似乎是 dropAtServer (此处提供更多参考)。所以我将smartgwt数据源xml文件设置为

<operationBindings>
    <operationBinding   operationType="fetch"  progressiveLoading="false"
                sqlPaging="dropAtServer" 
        >

在那之后,我看到了另一个错误,它现在与 HiveConnection#commit() :

java.sql.SQLException: Method not supported
    at org.apache.hive.jdbc.HiveConnection.commit(HiveConnection.java:742)
    at org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:334)
    at com.isomorphic.sql.SQLTransaction.commitTransaction(SQLTransaction.java:307)
    at com.isomorphic.sql.SQLDataSource.commit(SQLDataSource.java:4673)

在进一步挖掘之后,我意识到smartgwt控制提交行为的正确属性是 autoJoinTransactions 我应该把它设为false(这里有更多的引用)。在这两次修改之后,我可以让五月的申请通过 jdbc.HiveDriver 对于那些也在尝试这个的人,这里是我在smartgwt中对驱动程序的完整设置 server.properties (更多参考)

sql.defaultDatabase: perf2 # this name is picked by me, but it can be anyname

sql.perf2.driver.networkProtocol: tcp
sql.perf2.driver: org.apache.hive.jdbc.HiveDriver   # important
sql.perf2.database.type: generic                    # important
sql.perf2.autoJoinTransactions: false               # important
sql.perf2.interface.type: driverManager             # important
sql.perf2.driver.url: jdbc:hive2://host:port        # important -- pick your host:port
sql.perf2.driver.user: someuser                     # important -- pick your username
sql.perf2.interface.credentialsInURL: true
sql.perf2.driver.databaseName: someDb
sql.perf2.driver.context:

相关问题