首页 > 解决方案 > Impyla 以字节格式返回值

问题描述

我正在尝试从 Impyla 接收 JH 中的数据,除了一个 DB 中的表以 b'' 格式返回数据外,一切正常。

代码:

from impala.dbapi import connect

conn = connect(host=host, port=21050, user={userName}, use_ssl=True, auth_mechanism='GSSAPI', kerberos_service_name='impala', database=db)
cursor = conn.cursor()
cursor.execute(sql)
data = cursor.fetchall()

示例输出:

b'', b'UK', b'X', b'Hlavn\xc3\xad 51',

它只发生在 1 个数据库上,我测试过的其他数据库和表在 utf-8 中都可以(在 4 个数据库上测试)。+ 并非每一列都在 b'' 中。

套餐:

impyla 0.17.0 pypi_0 pypi
bitarray 2.1.0 pypi_0 pypi
six 1.14.0 py_1 conda-forge
thrift 0.11.0 pypi_0 pypi
thrift-cpp 0.13.0 h62aa4f2_2 conda-forge
thrift-sasl 0.4.3 pypi_0 pypi
thriftpy 0.3.9 py37h516909a_1001 conda-forge
thriftpy2 0.4.14 py37h5e8e339_0 conda-forge
krb5 1.17.2 h926e7f8_0 conda-forge

但是,如果我不是从 JH 而是直接从服务器运行相同的查询,则输出是正确的编码 - 没有字节。

服务器上的软件包:

impyla 0.16.3 py37hc8dfbb8_0 conda-forge
bitarray 2.0.1 py37h5e8e339_0 conda-forge
thrift 0.13.0 py37hcd2ae1e_2 conda-forge
thrift_sasl 0.4.2 py37h8f50634_0 conda-forge
thriftpy 0.3.9 py37h516909a_1001 conda-forge
thriftpy2 0.4.14 py37h5e8e339_0 conda-forge
six 1.15.0 pyh9f0ad1d_0 conda-forge
krb5 1.19.1 hcc1bbae_0 conda-forge

有什么线索吗?:) 谢谢。


编辑:07. 06. 格式以字节为单位,因为列是 varchar。字符串列格式 = utf-8 编码字符串。但是 varchars 和 chars 是字节格式的。正如我所描述的行为服务器/JH(不同版本),他们似乎通过版本升级对其进行了更改。所以我会通过降级版本来解决这个问题,但是在尝试选择大量行时,较低版本会返回“无效的查询句柄”:(

我添加了这个链接,它描述了问题、解决方法和未来的进展:https ://github.com/cloudera/impyla/issues/455

标签: python-3.xencodingimpalaimpyla

解决方案


推荐阅读