Asynchronous cursor execution in Snowflake

Viewed 2491

(Submitting on behalf of a Snowflake user)


At the time of query execution on Snowflake, I need its query id. So I am using following code snippet:

cursor.execute(query, _no_results=True)

query_id = cursor.sfqid

cursor.query_result(query_id)

This code snippet working fine for small running queries. But for query which takes more than 40-45 seconds to execute, query_result function fails with KeyError u'rowtype'.

Stack trace:

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'

Why would this error occur? How to solve this problem?


Any recommendations? Thanks!

1 Answers

The Snowflake Python Connector allows for async SQL execution by using ​cur.execute(sql, _no_results=True)​

This ​"fire and forget"​ style of SQL execution allows for the parent process to continue without waiting for the SQL command to complete (think long-running SQL that may time-out).

If this is used, many developers will write code that captures the unique Snowflake Query ID (like you have in your code) and then use that Query ID to ​"check back on the query status later"​, in some sort of looping process. When you check back to get the status, you can then get the results from that query_id using the result_scan( ) function.

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

I hope this helps...Rich

Related