在Snowflake Python工作表执行代码报错:缺少必填参数'conn'
问题分析与解决
错误根源
报错TypeError: __init__() missing 1 required positional argument: 'conn'出现在第12行session = snowpark.Session(),原因是Snowpark的Session类不能直接无参实例化,其构造函数必须传入有效的连接对象,或者使用官方推荐的builder模式创建会话。
修正方案
方案1:复用已创建的connector连接
你已经用snowflake.connector创建了conn对象,只需将其传入Session的构造函数:
import snowflake.snowpark as snowpark import snowflake.connector from snowflake.snowpark.functions import col from snowflake.snowpark.functions import * # 先创建connector连接 conn = snowflake.connector.connect( user='xxxxxx', password='xxxxxxx', account='xxxxx', role= 'ACCOUNTADMIN', warehouse='COMPUTE_WH', database='MYDEMODB', schema='MYSCHEMA' ) # 传入conn初始化Session session = snowpark.Session(conn) # 后续getEntityStruct函数逻辑...
方案2:使用Snowpark官方推荐的Builder模式(更简洁)
无需单独创建connector连接,直接通过Session Builder配置参数创建会话:
import snowflake.snowpark as snowpark from snowflake.snowpark.functions import col from snowflake.snowpark.functions import * connection_params = { "user": "xxxxxx", "password": "xxxxxxx", "account": "xxxxx", "role": "ACCOUNTADMIN", "warehouse": "COMPUTE_WH", "database": "MYDEMODB", "schema": "MYSCHEMA" } # 通过builder创建Session session = snowpark.Session.builder.configs(connection_params).create() # 后续getEntityStruct函数逻辑...
额外潜在问题提示
你的getEntityStruct函数中使用了sp.StructField和sp.StructType,但代码中未定义sp别名,需要补充导入:
from snowflake.snowpark.types import StructType, StructField # 或者将函数中的sp替换为snowpark.types,比如: struct_fields = [ snowpark.types.StructField(col.ColumnName, eval(col.ColumnType), col.IsNullable) for col in entityColumns.select("ColumnName", "ColumnType", "IsNullable").orderBy("EntityColumnOrder").collect() ] struct = snowpark.types.StructType(struct_fields)
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

