如何修改Snowflake Python连接器异步查询默认超时时间
问题现象
通过Snowflake Python连接器运行异步查询时,接口返回提示查询运行时长超过300秒会被中止,测试代码如下:
cursor_result = sf_conn.cursor().execute_async( "select 1 as test_column", timeout=500)
接口返回结果如下:
'queryId':'01a00000-0404-bce3-0000-00013778eb6f' 'getResultUrl':'/queries/01a54712-0404-bce3-00c6-55013778eb6f/result' 'queryAbortsAfterSecs':300 'progressDesc':None
传入的timeout参数未生效,返回的queryAbortsAfterSecs值仍为300秒,需要调整该默认行为,修改300秒的默认超时阈值。
原因
execute_async方法接收的timeout参数仅控制客户端侧发起HTTP请求的等待超时,不作用于Snowflake服务端的查询生命周期管理。返回值中的queryAbortsAfterSecs是服务端异步查询的默认自动中止阈值,固定默认值300秒,和客户端传入的timeout参数无关联,因此直接传timeout=500不会修改该值。
调整方法
服务端侧的查询超时阈值由参数STATEMENT_TIMEOUT_IN_SECONDS控制,需要通过SQL语句显式设置该参数覆盖默认值,支持两种设置粒度:
- 语句级配置:仅对当前单条异步查询生效,适合不同查询需要不同超时时间的场景
# 单条查询指定500秒超时 query_sql = """ set STATEMENT_TIMEOUT_IN_SECONDS = 500; select 1 as test_column """ cursor_result = sf_conn.cursor().execute_async(query_sql)
- 会话级配置:对当前连接下所有后续执行的同步、异步查询生效,适合统一调整连接下所有查询超时的场景
# 连接建立后先执行会话参数配置 sf_conn.cursor().execute("alter session set STATEMENT_TIMEOUT_IN_SECONDS = 500") # 后续执行异步查询无需重复配置 cursor_result = sf_conn.cursor().execute_async("select 1 as test_column")
配置完成后重新发起异步查询,返回结果中的queryAbortsAfterSecs会同步更新为你设置的数值,不会再触发300秒默认中止逻辑。
注意:如果Snowflake账号、用户、虚拟仓库层级配置了强制的
STATEMENT_TIMEOUT_IN_SECONDS上限,会话/语句级设置的超时值不能超过该上限,否则配置不生效。
内容的提问来源于stack exchange,提问作者Sasan Ahmadi
相关产品推荐
相关产品推荐

