我写了aws glue job,我试图将雪花表读作spark数据帧,并尝试将spark数据帧写入雪花表。我的工作是在两种情况下都没有说明“在架构上操作的权限不足”。
但是当我直接在雪花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()
当您使用Snowflake CLI时,我假设您切换到适当的角色来执行SELECT或INSERT。在Spark上,您需要在对表进行操作之前手动切换到具有SELECT / INSERT授权的角色。您可以通过以下方式发布。
Utils.runQuery(sfOptions, "USE ROLE <your_role>")
这将在Spark会话期间切换角色。
另请注意,Snowflake的访问结构基于层次结构。这意味着您需要对包含您尝试使用的表的数据库和架构具有“使用”权限。请确保您使用SELECT或INSERT获得对该角色的所有正确授权。