【问题标题】:Apache Drill Returning Gibberish via ODBC?Apache Drill 通过 ODBC 返回乱码?
【发布时间】:2015-07-08 02:30:20
【问题描述】:

我正在尝试编写一个使用 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章

Error: ('HY000', '[HY000] [MapR][Drill] (1040) Drill 未能执行查询:����������������\n[30027 ]查询执行错误。详细信息:[ \nPARSE ERROR: Lexical error at line 1, column 1. Encountered: "\ufffd" (65533), after : ""\n\n\n[Error Id: 669ea9b9-34d6-4281 -8898-57e8d0 (1040) (SQLExecDirectW)')

【问题讨论】:

    标签: python odbc pyodbc apache-drill


    【解决方案1】:

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

    [Driver]
    DriverManagerEncoding=UTF-16
    

    【讨论】:

    • 我尝试进行更改并重新启动演习,但我得到了同样的错误。其他地方是否可能需要设置其他配置变量?
    • 有同样的问题。如果我找到解决方案,我会回帖
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      相关资源
      最近更新 更多