我写了aws胶粘作业,在这里我试图将雪花表读取为spark数据框,还试图将spark数据框写入snow数据表。在这两种情况下,我的工作都未能说明“权限不足,无法对架构进行操作”。
但是当我直接在雪花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()
答案 0 :(得分:1)
使用Snowflake CLI时,我假设您切换到适当的角色来执行SELECT或INSERT。在Spark上,需要在表上进行操作之前手动切换到具有SELECT / INSERT授予的角色。您可以通过在下面进行发行来实现。
Utils.runQuery(sfOptions, "USE ROLE <your_role>")
这将在您的Spark会话期间切换角色。
此外,请注意Snowflake的访问结构是基于层次结构的。这意味着您需要对包含要使用的表的数据库和模式具有“使用”特权。请确保您拥有用于SELECT或INSERT的角色的所有正确授予。