Невозможно создать таблицу в Microsoft Azure Databricks на основе таблицы базы данных Microsoft Azure SQL - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу подключиться к Microsoft Azure SQL Server и базе данных Microsoft Azure SQL из моего ноутбука Microsoft Azure Databricks и выполнить SELECT и INSERT.

Предположим, у меня есть Microsoft SQL Server с именем dev-sql-srvдостижимое имя хоста - dev-sql-srv.database.windows.net.

Тогда у меня есть база данных SQL с именем dev-sql-srv-db1.Например, таблица называется CUSTOMER.

Я нашел это в оригинальной документации по Azure Databricks на https://docs.azuredatabricks.net/spark/latest/data-sources/sql-databases.html#spark-sql-example.

Когда я делаю

%sql
CREATE TABLE CustomerT1
USING org.apache.spark.sql.jdbc
OPTIONS (
  url "jdbc:sqlserver://dev-sql-srv.database.windows.net:1433",
  table "dev-sql-srv-db1.CUSTOMER",
  user "myAdmin",
  password "myPassword"
)

Когда явыполнить это в моей записной книжке, я получаю следующую ошибку:

Ошибка в операторе SQL: IllegalArgumentException: требование не выполнено: требуется параметр 'dbtable'.com.databricks.backend.common.rpc.DatabricksExceptions $ SQLExecutionException: java.lang.IllegalArgumentException: требование не выполнено: требуется параметр 'dbtable'.в scala.Predef $ .require (Predef.scala: 224) в org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions. (JDBCOptions.scala: 68) в org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions. (JDBCOptions.scala: 35) в org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation (JdbcRelationProvider.scala: 34) в org.apache.spark.sqlasources.scark.sql.execution.DataSource.resolveRelation (DataSource.scala: 349) в org.apache.spark.sql.execution.command.CreateDataSourceTableCommand.run (createDataSourceTables.scala: 80) в org.apache.spark.sql.execution.command.ExecutedCommandExult.lzycompute (commands.scala: 72) в org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult (commands.scala: 70) в org.apache.spark.sql.execution.command.ExecutedCommandExec.executeCollect (команды.scala: 81) в org.apache.spark.sql.Dataset $$ anonfun $ 6.apply (Dataset.scala: 194) в org.apache.spark.sql.Dataset $$ anonfun $ 6.apply (Dataset.scala: 194)на org.apache.spark.sql.Dataset $$ anonfun $ 53.apply (Dataset.scala: 3320) в org.apache.spark.sql.execution.SQLExecution $ .withCustomExecutionEnv (SQLExecution.scala: 88) в org.apache.spark.sql.execution.SQLExUEwithNewExecutionId (SQLExecution.scala: 124) в org.apache.spark.sql.Dataset.withAction (Dataset.scala: 3319) в org.apache.spark.sql.Dataset. (Dataset.scala: 194) в org.apache.spark.sql.Dataset $ .ofRows (Dataset.scala: 78) в org.apache.spark.sql.SparkSession.sql (SparkSession.scala: 639) в org.apache.spark.sql.SQLContext.sql (SQLContext.scala: 707) at com.databricks.backend.daemon.driver.SQLDriverLocal $$ anonfun $ 1.apply (SQLDriverLocal.scala: 87)

Что не так в этом примере?Мои параметры все определенно все в порядке.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Вы должны добавить имя базы данных в URL JDBC:

%sql
CREATE TABLE CustomerT1
USING org.apache.spark.sql.jdbc
OPTIONS (
  url "jdbc:sqlserver://dev-sql-srv.database.windows.net:1433;database=dev-sql-srv-db1",
  dbtable "dbo.CUSTOMER",
  user "myAdmin",
  password "myPassword"
)
0 голосов
/ 27 сентября 2018

Пожалуйста, замените "table" на "dbtable".Например,

CREATE TEMPORARY TABLE jdbcTable
USING org.apache.spark.sql.jdbc 
OPTIONS ( url "jdbc:sqlserver://xxxxx.databse.windows.net;
DabaseName=yyyydb01;
user=someuser;
password=secret", 
dbtable "SalesLT.Product"
)
...