Pyspark 雪花:SQL访问控制错误:权限不足,无法在架构上操作

Pyspark 雪花:SQL访问控制错误:权限不足,无法在架构上操作,pyspark,aws-glue,snowflake-cloud-data-platform,Pyspark,Aws Glue,Snowflake Cloud Data Platform,我已经写了aws胶水作业,我试图读取雪花表作为spark数据帧,也试图将spark数据帧写入雪花表。在这两种情况下,我的作业都无法声明“在架构上操作的权限不足” 但当我在snowflake cli上直接编写insert语句时,我能够插入数据。所以基本上我有插入特权 那么,当我试图从数据帧插入数据或从雪花表中读取数据作为数据帧时,为什么我的工作失败了呢 下面是我将数据写入雪花表的代码 sfOptions = { "sfURL" : "xt30972.snowflakecomputing.c

我已经写了aws胶水作业,我试图读取雪花表作为spark数据帧,也试图将spark数据帧写入雪花表。在这两种情况下,我的作业都无法声明“在架构上操作的权限不足”

但当我在snowflake cli上直接编写insert语句时,我能够插入数据。所以基本上我有插入特权

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

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

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()

当您使用Snowflake CLI时,我假设您切换到适当的角色来执行SELECT或INSERT。在Spark上,在对表进行操作之前,需要手动切换到具有选择/插入授权的角色。您可以通过以下方式执行此操作

Utils.runQuery(sfOptions, "USE ROLE <your_role>")
Utils.runQuery(选项“使用角色”)
这将在Spark会话期间切换角色


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

我没有雪花环境,但基于雪花体系结构,您可能拥有没有特权的默认角色。是。因为我已经拥有选择、更新、插入和删除特权,要将数据从spark dataframe写入snowflake表,需要添加哪些权限。我无法在prod环境中添加所有权限。我需要提供specefic权限。如果当前用户有多个角色,则可以在当前会话中使用一个角色。所以,在spark代码中创建连接时,您必须验证使用了哪个角色,但如果您没有设置任何角色,则将使用默认角色。您可以使用“显示角色”来检查默认角色。一旦您知道角色可以检查该角色的所有授权,以验证使用的角色是否具有正确的授权。同意,但根据客户端,他们不希望将所有授权授予任何角色。他们想要授予特定的特权。是的,它应该非常具体,并且您应该在sfoptions中设置正确的角色。能否将sfRole属性设置为具有要在目标表上写入的相关角色的角色