PySpark读取Snowflake视图报reader account操作不支持错误如何解决
问题根因
你遇到的报错Operation is not supported in reader account是因为当前使用的是Snowflake的Reader Account(数据共享只读访问账号),这类账号是Snowflake专为外部数据共享场景提供的轻量只读账号,默认不支持Spark Snowflake连接器默认使用的COPY UNLOAD数据导出操作。
你之前能正常执行数据加载、行数统计、Schema打印的原因是这类操作仅访问元数据或执行轻量聚合,不会触发批量数据导出流程,而show()、写入GCS这类需要拉取全量数据的操作会触发导出逻辑,因此触发权限报错。
解决方案
方案1(推荐):替换为普通Snowflake账号访问
给普通账号授予以下权限即可正常使用:- 对应数据库、Schema的
USAGE权限 - 视图
JOB_v1的SELECT权限 - 配置中指定的Warehouse的
USAGE权限
该方案无功能限制,支持大数据量读写,性能最优。
- 对应数据库、Schema的
方案2(仅适用于小数据量、必须使用Reader Account的场景):修改Spark连接器配置,禁用COPY UNLOAD导出逻辑
在你的sfOptions配置中新增两个参数:sfOptions = { # 原有配置保持不变 "sfURL" : "XXX.snowflakecomputing.com", "sfUser" : "XXX", "sfPassword" : "XXX", "sfDatabase" : "DB", "sfSchema" : "XXX", "sfWarehouse": "DWH", # 新增以下两个参数 "autopushdown": "off", "use_copy_unload": "false" }该方案会让连接器通过JDBC接口逐行拉取数据,避免触发Reader Account不支持的导出操作,但性能下降明显,不适合超过10万行级别的数据量使用。
内容的提问来源于stack exchange,提问作者AKs
相关产品推荐
相关产品推荐

