首页 > 解决方案 > 雪花:SQL 访问控制错误:权限不足,无法对架构进行操作

问题描述

我已经编写了 aws 胶水作业,我试图将雪花表读取为火花数据帧,并尝试将火花数据帧写入雪花表。在这两种情况下,我的工作都未能说明“在架构上操作的权限不足”。

但是当我直接在雪花cli上编写插入语句时,我可以插入数据。所以基本上我有插入权限。

那么,当我尝试从数据框中插入数据或从雪花表中读取数据作为数据框时,为什么我的工作失败了?

下面是我将数据写入雪花表的代码。

sfOptions = {
    "sfURL" : "xt30972.snowflakecomputing.com",
    "sfAccount" : "*****",
    "sfUser" : "*****",
    "sfPassword" : "****",
    "sfDatabase" : "*****",
    "sfSchema" : "******"
}

df=spark.read.format("csv").option("header","false").option("delimiter",',').load(aws s3 file_name)

df2.write.format("net.snowflake.spark.snowflake") \
.options(**sfOptions) \
.option("dbtable", table_name) \
.mode("append") \
.save()

标签: pysparkaws-gluesnowflake-cloud-data-platform

解决方案


当您使用 Snowflake CLI 时,我假设您切换到适当的角色来执行 SELECT 或 INSERT。在 Spark 上,在对表进行操作之前,您需要手动切换到具有 SELECT/INSERT 授权的角色。您可以通过以下发布来做到这一点。

Utils.runQuery(sfOptions, "USE ROLE <your_role>")

这将在 Spark 会话期间切换角色。

另外,请注意 Snowflake 的访问结构是基于层次结构的。这意味着您需要对包含您尝试使用的表的数据库和模式具有“使用”权限。请确保您对使用 SELECT 或 INSERT 的角色拥有所有正确的授权。


推荐阅读