1

我正在尝试编写一个使用 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 else: -> 1472 cur.execute (*args) 1473 返回当前

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

4

2 回答 2

0

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

[Driver]
DriverManagerEncoding=UTF-16
于 2015-08-11T20:08:39.773 回答
0

我的问题在于默认的 unixODBC 驱动程序构建。当我从源代码https://code.google.com/p/odbc/wiki/InstallingUnixODBC安装 unixODBC 驱动程序时,一切正常。码头工人将很快发布。

于 2015-12-18T23:55:01.233 回答