Snowflake 中的异步游标执行

Gav*_*son 3 snowflake-cloud-data-platform

(代表雪花用户提交)


在 Snowflake 上执行查询时,我需要它的查询 ID。所以我使用以下代码片段:

cursor.execute(query, _no_results=True)

query_id = cursor.sfqid

cursor.query_result(query_id)
Run Code Online (Sandbox Code Playgroud)

此代码片段适用于小型运行查询。但是对于执行时间超过 40-45 秒的查询,query_result 函数失败并显示KeyError u'rowtype'.

堆栈跟踪:

File "snowflake/connector/cursor.py", line 631, in query_result

self._init_result_and_meta(data, _use_ijson)

File "snowflake/connector/cursor.py", line 591, in _init_result_and_meta

for column in data[u'rowtype']:

KeyError: u'rowtype'
Run Code Online (Sandbox Code Playgroud)

为什么会出现这个错误?如何解决这个问题呢?


有什么建议吗?谢谢!

Ric*_*ane 6

Snowflake Python 连接器允许使用 ?cur.execute(sql, _no_results=True)?

这?“火了就忘了”?SQL 执行的风格允许父进程继续而不等待 SQL 命令完成(想想可能会超时的长时间运行的 SQL)。

如果使用它,许多开发人员将编写代码来捕获唯一的 Snowflake 查询 ID(就像您在代码中使用的那样),然后使用该查询 ID 来“稍后查看查询状态”?,在某种循环过程中. 当您回来查看状态时,您可以使用 result_scan() 函数从该 query_id 中获取结果。

https://docs.snowflake.net/manuals/sql-reference/functions/result_scan.html

我希望这有助于...丰富