Snowpark执行ALTER SESSION语句报错,如何无错误执行该语句?
解决Snowpark执行ALTER SESSION语句报错的问题
问题分析
报错信息:
SnowparkSQLException: (1304): 01b90062-0205-27a9-0000-01915ca148da: 090236 (42601): Stored procedure execution error: Unsupported statement type 'ALTER_SESSION'.
核心原因分两种场景:
- 直接调用
collect()方法:collect()用于提取查询结果集,但ALTER SESSION属于无返回结果的DDL语句,调用该方法会触发异常。 - 在存储过程内执行:Snowpark存储过程默认不支持直接执行
ALTER SESSION这类会话级修改语句,需要特殊处理。
解决方案
场景1:非存储过程的Snowpark脚本中执行
移除collect(),改用execute()方法执行语句:
session.sql("ALTER SESSION SET query_tag = 'test';").execute()
execute()专门用于执行无返回结果的DDL/DML操作,适配ALTER SESSION的特性。
场景2:Snowpark存储过程中执行
需用EXECUTE IMMEDIATE包裹语句,同时转义内部单引号:
from snowflake.snowpark import Session from snowflake.snowpark.types import StringType def set_session_query_tag(session: Session): # 用两个单引号转义字符串内部的单引号 session.sql("EXECUTE IMMEDIATE 'ALTER SESSION SET query_tag = ''test''';").execute() return "Query tag set successfully" # 注册存储过程 session.sproc.register( func=set_session_query_tag, return_type=StringType(), input_types=[], is_permanent=False, name="SET_SESSION_QUERY_TAG" )
通过EXECUTE IMMEDIATE可以在存储过程上下文中间接执行ALTER SESSION语句。
内容的提问来源于stack exchange,提问作者Eren
相关产品推荐
相关产品推荐

