使用雪花连接器获取数据会引发 EmptyPyArrowIterator 错误

Fetching data with snowflake connector throws EmptyPyArrowIterator error

我在我的 python 脚本(plotly dash 应用程序)中使用了 python 雪花连接器,今天应用程序在我没有更改代码的情况下停止工作。我尝试了几件事来找出可能的问题,我什至尝试 运行 来自 Snowflake documentation 的示例代码,但我得到了同样的错误:

代码:

cur = conn.cursor()
try:
    cur.execute("SELECT col1, col2 FROM test_table ORDER BY col1")
    for (col1, col2) in cur:
        print('{0}, {1}'.format(col1, col2))
finally:
    cur.close()

错误:

Traceback (most recent call last):
  File "db_connection.py", line 48, in <module>
    cur.execute("SELECT col1, col2 FROM test_table ORDER BY col1")
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/snowflake/connector/cursor.py", line 580, in execute
    self._init_result_and_meta(data, _use_ijson)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/snowflake/connector/cursor.py", line 630, in _init_result_and_meta
    self._result = ArrowResult(data, self, use_dict_result=self._use_dict_result)
  File "arrow_result.pyx", line 42, in snowflake.connector.arrow_result.ArrowResult.__init__
  File "arrow_result.pyx", line 156, in snowflake.connector.arrow_result.ArrowResult._reset
NameError: name 'EmptyPyArrowIterator' is not defined

连接已建立,我可以在我的数据库中创建 table,但我似乎无法查询和迭代数据。

我在 macOS Catalina 10.15.1snowflake-connector-python==2.1.0Python 3.7.0

简短版本:通过 运行 将您的 snowflake-connector-python 回滚到版本 2.0.4:pipenv install "snowflake-connector-python~=2.0.4"

长版: 我检查了连接器对 github 的提交,我看到他们正在添加 ARROW 支持。不确定为什么 arrow_result.pyx 无法包含 EmptyPyArrowIterator,但它包含在 try 中,所以它仍然会执行。但是,到了reset函数,找不到引用,抛出异常。

你必须通过

安装pyarrow模块
pip3 install pyarrow

安装雪花连接器不会自动安装它。

我相信你可能用过 pip install snowflake——用于安装雪花连接器

试试, pip 安装雪花连接器-python

我 运行 几个小时前在一个很长的批处理作业中加入了这个。有趣的是,同样的工作工作得很好,直到突然它开始抛出 "EmptyPyArrowIterator" 异常并且不会重新启动。将 snowflake-connector-python 降级到 2.0.4 似乎暂时解决了这个问题。

请使用 Python 连接器版本 2.1.1

pip 安装雪花连接器-python==2.1.1

pip3 安装雪花连接器-python==2.1.1

有关其他影响的更多详细信息,请参阅下面的发布文档。

https://docs.snowflake.net/manuals/release-notes/2019-12.html#python-connector-2-1-0-jdbc-driver-3-11-0-support-for-internal-arrow-format

为了解决这个问题,我在用户级别安装了 pyarrow

pip3 install pyarrow --user