Apache Drill通过ODBC返回Gibberish?

时间:2015-07-08 02:30:21

标签: python odbc pyodbc apache-drill

我试图编写一个使用pyodbc模块连接到Apache Drill的python脚本。我能够成功连接到钻取,但是当我尝试查询时,我得到一个奇怪的错误,看起来与字符编码有关。我已经在下面添加了我的代码,并且我使用的是Python 3.4。我应该补充一点,我已经尝试了这个有和没有Pandas并且得到了相同的错误,所以我认为错误是在ODBC的某个地方,但我没有使用ODBC的经验。

import pyodbc
import pandas as pd

MY_DSN = "DRIVER=/opt/mapr/drillodbc/lib/universal/libmaprdrillodbc.dylib;Host=localhost;Port=31010;ConnectionType=Direct;Catalog=Drill;Schema=mfs.views;AuthenticationType=No Authentication"
conn = pyodbc.connect(MY_DSN, autocommit=True)
employee_query = "SELECT * FROM cp.`employee.json`"
data = pd.read_sql( employee_query, conn )

这是错误:

  

错误回溯(最近一次调用最后一次)   //anaconda/lib/python3.4/site-packages/pandas/io/sql.py in execute(self,* args,** kwargs)      1471其他:    - > 1472 cur.execute(* args)      1473返回cur

     

错误:(' HY000',' [HY000] [MapR] [Drill](1040)钻取无法执行查询:������������ ����\ n [30027]查询执行错误。详细信息:[\ nPARSE错误:第1行第1列的词汇错误。遇到:" \ ufffd"(65533),之后:" " \ n \ n \ n [错误ID:669ea9b9-34d6-4281-8898-57e8d0(1040)(SQLExecDirectW)')

2 个答案:

答案 0 :(得分:0)

.mapr.drillodbc.ini中将编码更改为utf-i6为我解决了这个问题:

[Driver]
DriverManagerEncoding=UTF-16

答案 1 :(得分:0)

我的问题是默认的unixODBC驱动程序版本。当我从源代码https://code.google.com/p/odbc/wiki/InstallingUnixODBC安装unixODBC驱动程序时,一切正常。 docker即将发布。