使用Snowpark创建DataFrame需要具备哪些权限?
问题原因
session.create_dataframe() 接收本地内存传入的数据时,Snowpark 不会在客户端本地直接完成DataFrame初始化,会自动把数据暂存到当前会话默认绑定的schema下的临时对象(临时表/临时stage)做中转,这一步会强制校验schema的操作权限。
你之前能成功执行CREATE OR REPLACE TABLE,基本都是因为写SQL时显式写了目标表的全路径(库名.schema名.表名),根本没用到当前默认的SNOWPARKschema,所以没触发这个schema的权限检查,才会出现建表正常、创建本地数据对应的DataFrame时报权限错的情况。
需要补充的权限
在SNOWPARKschema下,给你当前会话使用的角色授予以下权限即可解决问题:
USAGE:访问schema下所有对象的基础前置权限CREATE TEMPORARY TABLE:创建临时表的权限,Snowpark默认优先用临时表中转小体量本地数据,临时表仅当前会话可见,会话结束后自动删除,不会产生持久化存储CREATE TEMPORARY STAGE:创建临时stage的权限,当传入数据体量较大、包含半结构化/二进制类型字段时,Snowpark会自动通过临时stage暂存文件完成数据加载,临时stage同样随会话结束自动清理
临时验证方案
如果想先确认问题根因,可以临时把会话默认schema切换到你之前建表时用的、已确认有权限的schema,再执行创建DataFrame的逻辑:
# 替换为你有完整操作权限的 数据库名.schema名 session.use_schema("YOUR_DB.YOUR_VALID_SCHEMA") df1 = session.create_dataframe(data)
如果切换后代码运行正常,即可确认是SNOWPARKschema的上述权限缺失,联系账号管理员执行对应授权即可,授权参考SQL:
-- 替换尖括号内的实际资源名、角色名 GRANT USAGE ON SCHEMA <YOUR_DB>.SNOWPARK TO ROLE <YOUR_ROLE>; GRANT CREATE TEMPORARY TABLE ON SCHEMA <YOUR_DB>.SNOWPARK TO ROLE <YOUR_ROLE>; GRANT CREATE TEMPORARY STAGE ON SCHEMA <YOUR_DB>.SNOWPARK TO ROLE <YOUR_ROLE>;
内容的提问来源于stack exchange,提问作者Nick Hall
相关产品推荐
相关产品推荐

