我有一个用来连接 MySQL
,我有 Hibernate
配置如下:
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://somehost:3306/some_db</property>
...
现在如果我想连接到 Hive/SparkSQL
相反,这些属性的等效值是多少?
我有一些关于 driver_class
以及 url
(假设我们使用的是端口 10000
),但是 dialect
是吗?
<property name="hibernate.connection.driver_class">org.apache.hive.jdbc.HiveDriver</property>
<property name="hibernate.connection.url">jdbc:hive2://someHost:10000</property>
更新
我尝试了许多不同的价值观,但都不起作用(我还没有找到apachehive安装使用的metastore是什么,所以在这里我只是做了一些尝试和错误)
org.hibernate.dialect.MySQLDialect
org.hibernate.dialect.MySQLInnoDBDialect
org.hibernate.dialect.DerbyDialect
org.hibernate.dialect.DerbyTenFiveDialect
org.hibernate.dialect.Oracle10gDialect
org.hibernate.dialect.H2Dialect
org.hibernate.dialect.Dialect
我注意到,在所有情况下,hibernate都会发出警告:
WARN JdbcServicesImpl,main:160 - \
HHH000341: Could not obtain connection metadata : \
Method not supported
然后代码会遇到 NullPointerException
在 org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure()
(最终版本4.2.0中的第207行)。
我下载了hibernate的源代码并跟踪了逻辑。导致异常的原因是变量前面的几行 dialect
(属于类型) Dialect
)他决心 null
由于尝试执行第138行时捕获到异常:
metaReportsDDLCausesTxnCommit = meta.dataDefinitionCausesTransactionCommit();
例外是
java.sql.SQLException: Method not supported
(导致上述警告信息的原因)
那是不是意味着我不能使用 Hibernate
用ApacheHive?如果是这样的话,那就这样吧(我想我得换掉 Hibernate
但我很想知道这个问题的权威答案。
在互联网上我找不到有力的证据表明人们一直在使用 Hibernate
成功使用apache hive。
1条答案
按热度按时间1yjd4xko1#
我在这里回答我自己的问题。
我认为答案是“不——hibernate没有hive/sparksql的方言”。显然,hibernate中不支持hiveserver2(即不支持hive元存储)。我相信这是真的(95%置信度)截至目前(2017-10-19)。
在我的例子中,我最终重写了我的代码并替换了hibernate代码来指导jdbc代码。我很幸运,那里的hibernate代码只用于简单的db查询(
session.createSQLQuery()
)不是很严重,所以改变相对容易。