Snowflake vs Spark - Недостаточно прав для работы со схемой - PullRequest
0 голосов
/ 24 февраля 2020

Я создал новую бесплатную стандартную учетную запись снежинки "xxxxx". Мне удалось получить доступ к базе данных, схеме и таблицам по умолчанию из веб-интерфейса Snowflake.

И попытался подключиться к Snowflake из Spark

val spark = SparkSession.builder()
    .master("local[1]")
    .appName("SparkByExamples.com")
    .getOrCreate();

  var sfOptions = Map(
    "sfURL" -> "https://xxxxxx.us-east-1.snowflakecomputing.com/",
    "sfAccount" -> "xxxxxx",
    "sfUser" -> "xxxxx",
    "sfPassword" -> "#########",
    "sfDatabase" -> "snowflake_sample_data",
    "sfSchema" -> "tpch_sf1"
  )
  val df: DataFrame = spark.read
    .format("net.snowflake.spark.snowflake")
    .options(sfOptions)
    .option("query", "SELECT l_returnflag,l_linestatus,sum(l_quantity) as sum_qty FROM lineitem GROUP BY l_returnflag,l_linestatus")
    .load()

После запуска выдается сообщение об ошибке «Недостаточно прав для работы с схемой TPCH_SF1». Может кто-нибудь, пожалуйста, помогите.

20/02/23 19:35:12 WARN SnowflakeStrategy: Ошибка при нажатии: SQL Ошибка управления доступом: Недостаточно прав для работы со схемой 'TPCH_SF1' 20/02/23 19: 35:13 ИНФОРМАЦИЯ SnowflakeSQLStatement: Мастер Spark Connector: выполнить запрос с переменной связывания: создать временный этап, если идентификатор не существует (?) 20/02/23 19:35:13 ПРЕДУПРЕЖДЕНИЕ SnowflakeStrategy: Сбой при нажатии: SQL Ошибка управления доступом: недостаточно привилегии для работы со схемой 'TPCH_SF1' 20/02/23 19:35:14 INFO SnowflakeSQLStatement: Spark Connector Master: выполнить запрос с переменной bind: создать временный этап, если не существует идентификатора (?) Исключение в потоке "main" net .snowflake.client.jdb c .SnowflakeSQLException: SQL Ошибка управления доступом: недостаточно прав для работы со схемой 'TPCH_SF1' в net .snowflake.client.jdb c .SnowflakeUtil.checkErrorAndThrow6keUtil (Snow Snow6keUtil. *: 152) в net .snowflake.client.jdb c .SnowflakeUtil.checkErrorAndThrowException (Snowfla keUtil. java: 77) в net .snowflake.client.core.StmtUtil.pollForOutput (StmtUtil. java: 495) в net .snowflake.client.core.StmtUtil.execute (StmtUtil. java: 372) в net .snowflake.client.core.SFStatement.executeHelper (SFStatement. java: 575) в net .snowflake.client.core.SFStatement.executeQueryInternal (SFStatement. java: 265) в net .snowflake.client.core.SFStatement.executeQuery (SFStatement. java: 203) в net .snowflake.client.core.SFStatement.execute (SFStatement. java: 874)

1 Ответ

1 голос
/ 24 февраля 2020

При работе с Spark-коннектором вам необходимы привилегии CREATE STAGE для используемой вами схемы. Вместо использования схемы tpch_sf1 используйте схему, которой у вас есть права для создания этапа, и используйте полное имя таблицы (база данных, схема, имя таблицы):

  var sfOptions = Map(
    "sfURL" -> "https://xxxxx.us-east-1.snowflakecomputing.com/",
    "sfAccount" -> "xxxxx",
    "sfUser" -> "xxxxx",
    "sfPassword" -> "#########",
    "sfDatabase" -> "your_own_database",
    "sfSchema" -> "your_own_Schema"
  )


  val df: DataFrame = spark.read
    .format("net.snowflake.spark.snowflake")
    .options(sfOptions)
    .option("query", "SELECT l_returnflag,l_linestatus,sum(l_quantity) as sum_qty FROM snowflake_sample_data.tpch_sf1.lineitem GROUP BY l_returnflag,l_linestatus")
    .load()
...