Pandas read_sql() 在使用 hive odbc 连接器时不喜欢 DISTINCT 关键字
Pandas read_sql() doesn't like DISTINCT keyword when using hive odbc connector
我正在通过 pyodbc 连接访问配置单元。它使用 Hortonworks Hive ODBC 驱动程序。我正在使用 pandas 将 sql 结果读入数据帧。有些查询有效,有些则无效。我不知道为什么。例如,
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)
returns一切都很好。但是,当我 运行 这个
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 解决了 Tableau 中的类似问题。它提到问题很可能与用户权限有关。我认为这不是问题,因为我可以 运行 一些查询,但不能查询其他查询。任何帮助将不胜感激。
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)
我正在通过 pyodbc 连接访问配置单元。它使用 Hortonworks Hive ODBC 驱动程序。我正在使用 pandas 将 sql 结果读入数据帧。有些查询有效,有些则无效。我不知道为什么。例如,
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)
returns一切都很好。但是,当我 运行 这个
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 解决了 Tableau 中的类似问题。它提到问题很可能与用户权限有关。我认为这不是问题,因为我可以 运行 一些查询,但不能查询其他查询。任何帮助将不胜感激。
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)