Python连接到Hive

Kno*_*uch 10 python hadoop hive pyodbc

我安装了Hortonworks Hive ODBC驱动程序并在数据源中创建了一个连接.我测试了它并且它成功地运行了.

我安装了PyODBC并编写了以下代码

import os, sys, pyodbc;
con = pyodbc.connect("DSN=MyCon")
Run Code Online (Sandbox Code Playgroud)

我收到了错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pyodbc.Error: ('HYC00', '[HYC00] [Hortonworks][ODBC] (11470) Transactions are not supported. (11470) (SQLSetConnnectAttr(SQL_ATTR_AUTOCOMMIT))')
Run Code Online (Sandbox Code Playgroud)

我也试过了

import pyodbc, sys, os
pyodbc.pooling = False
pyodbc.autocommit = False
con = pyodbc.connect("DSN=MyCon")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pyodbc.Error: ('HYC00', '[HYC00] [Hortonworks][ODBC] (11470) Transactions are not supported. (11470) (SQLSetConnnectAttr(SQL_ATTR_AUTOCOMMIT))')
Run Code Online (Sandbox Code Playgroud)

也试过了

con = pyodbc.connect("DSN=Tenet", autocommit=False)


Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pyodbc.Error: ('HYC00', '[HYC00] [Hortonworks][ODBC] (11470) Transactions are not supported. (11470) (SQLSetConnnectAttr(SQL_ATTR_AUTOCOMMIT))')
Run Code Online (Sandbox Code Playgroud)

Kno*_*uch 23

我解决了......我没有删除我的问题并在此处回答

pyodbc.autocommit = True
con = pyodbc.connect("DSN=MyCon", autocommit=True)
Run Code Online (Sandbox Code Playgroud)

这是根据本读物的建议完成的

https://code.google.com/p/pyodbc/issues/detail?id=162

**感谢Kyle Porter的建议......现在完全有道理**

  • 稍微澄清,你实际上并没有关闭自动提交,你指定pyodbc保持自动提交.ODBC表示默认情况下应该启用自动提交,Python表示它应该关闭,因此pyodbc尝试关闭自动提交作为第一步.当驱动程序/数据库不支持事务(如Hive)时,这会失败,这就是您收到此错误的原因.告诉pyodbc它应该保持自动提交意味着它不会调用将自动提交关闭到驱动程序,然后一切正常工作. (7认同)