SparkSQL (Databricks): вставка данных в таблицу Snowflake, созданную другой ролью - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть таблица MYSCHEMA.TEST_SNOWFLAKE_ROLE_T в Snowflake, созданная с использованием роли CONSOLE_USER.

MYSCHEMA, с которой связан FUTURE GRANTS, который предоставляет следующие привилегии роли BATCH_USER для любоготаблица, созданная по схеме MYSCHEMA - DELETE, INSERT, REFERENCES, SELECT, TRUNCATE, UPDATE.

Роль BATCH_USER также имеет привилегии CREATE STAGE и USAGE для схемы MYSCHEMA.

Второй пользователь, принадлежащий к роли BATCH_USER, пытается вставить данные в ту же таблицу из кадра данных, используя следующий Spark SQL (блоки данных), но завершается неудачно с сообщением об ошибке недостаточных привилегий.

df.write.mode(op_mode)                   \ 
  .format("snowflake")                   \ 
  .options(**self.sfoptions)             \
  .option("dbtable", snowflake_tbl_name) \
  .option("truncate_table", "on")        \
  .save

Появляется следующее сообщение об ошибке:

Py4JJavaError: An error occurred while calling o908.save.
   : net.snowflake.client.jdbc.SnowflakeSQLException: SQL access control error
   : Insufficient privileges to operate on table 'TEST_SNOWFLAKE_ROLE_T')

Роль CONSOLE_USER имеет права владения на таблицу, поэтому роль BATCH_USER не сможет удалить таблицу, но при добавленииопция option("truncate_table", "on") должна была предотвратить автоматическую перезапись схемы таблицы.

Я несколько раз просматривал доступную документацию Snowflake и Databricks, но не могу понять, что является причиной проблемы с недостаточными привилегиями.

Любая помощь очень ценится!

...