Snowflake Python UDF能否访问部署库表并使用非默认Python包?
Snowflake Python UDF常见问题解答
1. 能否访问部署所在的数据库表及模式?
可以访问,但需满足以下条件:
- UDF的所有者必须拥有目标表/模式的对应权限(如
SELECT、INSERT等) - 代码中需通过Snowflake官方提供的Snowpark API或者SQL执行语句来操作表,示例如下:
def get_table_count(): from snowflake.snowpark import Session session = Session.builder.getOrCreate() # 建议使用全限定名指定表(数据库.模式.表) df = session.table("MY_DB.MY_SCHEMA.MY_TABLE") return df.count()
- UDF默认继承当前会话的数据库/上下文,但显式指定全限定名能避免歧义。
2. 是否支持使用非默认Python包?
支持,有两种常用方式:
- 使用Snowflake集成的Anaconda仓库:大部分主流Python包(如
pandas、numpy)可直接通过packages参数指定版本引入,无需自行打包上传,示例:
create or replace function pandas_demo(data string) returns string language python runtime_version = '3.8' packages = ('pandas==1.3.5') handler = 'pandas_demo_py' as $$ import pandas as pd def pandas_demo_py(data): df = pd.DataFrame([data], columns=['input']) return df.to_string() $$;
- 上传自定义包到Snowflake阶段:对于Anaconda仓库没有的包,可将包打包成zip文件上传至Snowflake内部/外部阶段,然后在创建UDF时通过
imports参数指定包的路径。
内容的提问来源于stack exchange,提问作者cs0815
相关产品推荐
相关产品推荐

