gpt4 book ai didi

Hive/SparkSQL 的 Hibernate 方言?

转载 作者:可可西里 更新时间:2023-11-01 15:26:13 24 4
gpt4 key购买 nike

我有一个用于连接到 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_classurl 有一些想法(假设我们使用端口 10000),但是 dialect 是?

<property name="hibernate.connection.driver_class">org.apache.hive.jdbc.HiveDriver</property>
<property name="hibernate.connection.url">jdbc:hive2://someHost:10000</property>

更新

我尝试了许多不同的值,但没有一个有效。 (我还没有找出 Apache Hive 安装使用的 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.Final 中的第 207 行)。

我下载了Hibernate的源码,追查了其中的逻辑。异常是因为变量前面的几行dialect(属于 Dialect 类型)被确定为 null 由于尝试执行第 138 行时捕获的异常:

metaReportsDDLCausesTxnCommit = meta.dataDefinitionCausesTransactionCommit();

异常(exception)是

java.sql.SQLException: Method not supported

(导致上述警告信息)

这是否意味着我不能将 Hibernate 与 Apache Hive 一起使用?如果是这样的话,那就这样吧。 (我想我会有换掉这部分的 Hibernate 实现)但我很想知道权威答案对此。

在互联网上我找不到有力的证据证明人们一直在通过 Apache Hive 成功使用 Hibernate

最佳答案

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

我认为 Hibernate 的答案是“不——Hive/SparkSQL 没有方言”。显然,Hibernate 不支持 HiveServer2(即不支持 Hive Metastore)。我相信截至目前(2017 年 10 月 19 日)这是真的(95% 的置信度)。

就我而言,我最终重写了我的代码并将 Hibernate 代码替换为直接 JDBC 代码。我很幸运,那里的 Hibernate 代码只是用于简单的 DB 查询 (session.createSQLQuery()) 而不是严肃的 ORM,因此更改相对容易。

关于Hive/SparkSQL 的 Hibernate 方言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46739044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com