read\u sql()在使用配置单元odbc连接器时不喜欢distinct关键字

nc1teljy  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(353)

我正在通过pyodbc连接访问配置单元。它使用hortonworks配置单元odbc驱动程序。我使用pandas将sql结果读入Dataframe。有些查询有效,有些则无效。我不明白为什么。例如,

conn = pyodbc.connect('DSN=HiveConnection;UID=username;PWD=password;', autocommit=TRUE)
df = pd.read_sql("SELECT * FROM myTable AS m WHERE m.file = 'myfile';", con=conn)

一切正常。但是,当我运行这个

df = pd.read_sql("SELECT DISTINCT m.file FROM myTable AS m;", con=conn)

还是这个

df = pd.read_sql("SELECT m.file, count(m.file) FROM myTable AS m GROUP BY m.file;", con=conn)

它给了我一个错误。

pyodbc.Error: ('HY000', "[HY000] [Hortonworks][HiveODBC] (35) Error from Hive: error code: '0' error message: 'ExecuteStatement finished with operation state: ERROR_STATE'. (35) (SQLExecDirectW)")

我找到这个了https://kb.tableau.com/articles/issue/error-from-hive-executestatement-finished-connecting-to-hadoop-table 解决了一个类似的问题。它提到这个问题很可能与用户权限有关。我不认为这是问题所在,因为我可以运行一些查询,但不能运行其他查询。任何帮助都将不胜感激。

xriantvc

xriantvc1#

select * 获取任务不需要mapreduce作业。问题可能是被查询的集群需要一个您有权执行mapreduce作业的队列。
请尝试将队列设置为您知道有权访问的队列。
对于tez任务

pd.read_sql("set tez.queue.name=<your_queue_name>;", con=conn)

对于mapreduce任务

pd.read_sql("set mapreduce.job.queuename=<your_queue_name>;" , con=conn)
pd.read_sql("set mapreduce.job.queue=<your_queue_name>;" , con=conn)

相关问题