使用SSO认证的Snowflake账户创建Snowpark Session报错解决
解决Snowpark Session未定义及SSO认证下的Session创建问题
你当前用snowflake.connector建立的是普通数据库连接,但Snowpark的核心操作依赖专属的Session对象,这就是你遇到NameError: name 'session' is not defined的原因。下面是两种适配SSO认证的Snowpark Session创建方案:
方案1:复用已有的SSO连接创建Session
如果你已经通过connector完成了SSO认证,可以直接基于这个连接生成Snowpark Session:
import snowflake.connector from snowflake.snowpark import Session # 保留你原有的SSO连接代码 con = snowflake.connector.connect( user="<username>", account="<account name>", authenticator="externalbrowser", ) # 用现有连接初始化Snowpark Session session = Session.builder.config({"connection": con}).create() # 验证Session有效性 print("当前日期:", session.sql("select current_date").collect()[0][0]) print("Snowflake版本:", session.sql("SELECT current_version()").collect()[0][0]) # 现在可以正常调用session.table了 provider_table = session.table("ENVIRONMENT.<view name>") # 示例:查看表的前5行数据 provider_table.show() # 最后记得关闭资源 session.close() con.close()
方案2:直接用Snowpark配置完成SSO认证(推荐)
无需先创建connector连接,直接通过Snowpark的Session构建器配置SSO参数,一步完成认证和Session初始化:
from snowflake.snowpark import Session # 配置SSO及Snowpark连接参数 connection_params = { "user": "<username>", "account": "<account name>", "authenticator": "externalbrowser", # 可选:设置默认仓库、数据库、Schema,后续操作无需写全限定名 "warehouse": "<你的仓库名>", "database": "<你的数据库名>", "schema": "<你的Schema名>" } # 创建Snowpark Session session = Session.builder.configs(connection_params).create() # 验证连接 print("当前日期:", session.sql("select current_date").collect()[0][0]) # 操作目标视图 provider_table = session.table("ENVIRONMENT.<view name>") # 示例:获取表的列信息 print("表列名:", provider_table.columns) # 关闭Session session.close()
重要提示
- 确保已安装Snowpark Python包:执行
pip install snowflake-snowpark-python - 替换代码中所有
<>包裹的占位符为你的实际账户信息 - Session创建后,所有Snowpark相关操作(读表、写UDF、执行SQL)都要通过这个
session对象进行,不要再用connector的游标 - 如果设置了默认的数据库和Schema,后续可以直接写
session.table("<视图名>"),无需带环境前缀
内容的提问来源于stack exchange,提问作者drymolasses
相关产品推荐
相关产品推荐

