求助:在Snowpark中操作Snowflake外部文件列表遇NAME标识符无效错误
解决Snowpark中LIST命令列名无效的问题
问题原因
Snowflake的LIST命令返回的列名是小写的name,而Snowflake默认会将未加引号的标识符自动转为大写,直接使用col('name')会被解析为NAME,导致出现"无效标识符"的错误。
解决方案
有两种可行的解决方式:
方式一:使用带双引号的列名引用
在col()中用双引号包裹小写列名,强制Snowflake匹配原列名:
import snowflake.snowpark as snowpark from snowflake.snowpark.functions import col def main(session: snowpark.Session): dataframe = session.sql('list @test/ext') df_selected = dataframe.select(col('"name"')) return df_selected
方式二:通过RESULT_SCAN获取结果并设置别名
将LIST命令的结果通过result_scan转为可查询的表,同时给列设置大写别名,后续直接使用别名即可:
import snowflake.snowpark as snowpark from snowflake.snowpark.functions import col def main(session: snowpark.Session): # 执行LIST命令 session.sql('list @test/ext').collect() # 通过result_scan获取结果并设置别名 dataframe = session.sql('select "name" as FILE_NAME from table(result_scan(last_query_id()))') df_selected = dataframe.select(col('FILE_NAME')) return df_selected
内容的提问来源于stack exchange,提问作者Prodip
相关产品推荐
相关产品推荐

