首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用sqlalchemy odbc.ini文件连接到蜂箱

使用sqlalchemy odbc.ini文件连接到蜂箱
EN

Stack Overflow用户
提问于 2022-05-25 16:28:41
回答 1查看 423关注 0票数 0

我想使用sqlalchemy和odbc.ini文件连接到Hive

我有一个odbc.ini文件,看起来

代码语言:javascript
代码运行次数:0
运行
复制
[Hive]
Description = ODBC Hive connection to Hadoop cluster
Driver = /opt/cloudera/hiveodbc/lib/64/libclouderahiveodbc64.so
HOST = host1,host2,host3
Schema = default
ServiceDiscoveryMode = 1
ZKNamespace = hiveserver2
HiveServerType = 2
AuthMech = 1
ThriftTransport = 1
UseNativeQuery = 0
KrbHostFQDN = _HOST
KrbServiceName = hive
ServicePrincipalCanonicalization = 1
SSL = 0
TwoWaySSL = 0

我试着和

代码语言:javascript
代码运行次数:0
运行
复制
import sqlalchemy
import pandas as pd

query_test = """SELECT * FROM my_table limit 1;"""

engine =  sqlalchemy.create_engine("hive://@Hive")
conn = engine.connect()
print(pd.read_sql(query_test, conn))

它生成错误TTransportException:未能解析Hive:10000的套接字。

在……里面

代码语言:javascript
代码运行次数:0
运行
复制
~/folder/lib64/python3.6/site-packages/thrift/transport/TSocket.py in open(self)
    125             msg = 'failed to resolve sockaddr for ' + str(self._address)
    126             logger.exception(msg)
--> 127             raise TTransportException(type=TTransportException.NOT_OPEN, message=msg,         inner=gai)
    128         for family, socktype, _, _, sockaddr in addrs:
    129             handle = self._do_open(family, socktype)

有人告诉我,这是因为我们有多个宿主,必须经过一个叫做动物园管理员的地方

我无法理解的是,当我使用pyodbc时,没有问题。下面的工作很好

代码语言:javascript
代码运行次数:0
运行
复制
pyodbc.autocommit = True
cnxn = pyodbc.connect(dsn='Hive', autocommit=True)
data = pd.read_sql(query, cnxn, params=params)
cnxn.close()

我应该如何配置sqlalchemy代码来处理我的odbc.ini文件?

我有过

代码语言:javascript
代码运行次数:0
运行
复制
PyHive-0.6.5
thrift-0.16.0
thrift_sasl-0.4.3
SQLAlchemy-1.4.36
sasl-0.3.1
pyodbc-4.0.32
EN

回答 1

Stack Overflow用户

发布于 2022-06-03 14:50:59

您似乎希望使用Cloudera中的Hive连接器连接到Hive,但随后使用了一个hive:// URI,这意味着SQLAlchemy将尝试使用pyHive,因为它不知道odbc.ini

要从SQLAlchemy通过ODBC连接,您需要使用<dialect>+pyodbc:// URI,例如mssql+pyodbc://mysql+pyodbc://sybase+pyodbc://

Hive + ODBC没有等效的方言,所以即使您通过pyODBC在SQLAlchemy中管理Hive连接,它也不知道如何与Hive对话。我找到了这个回购AurelienGalicher/PyHiveODBC,它似乎包含一个Hive + ODBC方言的初稿,但是我还没有测试它。

pyHive文档通过连接SQLAlchemy URI直接指向hive://

因此,要么您需要开发一个Hive + ODBC方言,要么使用pyHive,它根本不使用odbc.ini (因此不使用odbc.ini DSN)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72381308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档