无法基于Microsoft Azure SQL数据库表在Microsoft Azure Databricks中创建表

时间:2018-09-27 12:59:15

标签: jdbc azure-sql-database databricks

我想从Microsoft Azure Databricks Notebook连接到Microsoft Azure SQL Server和Microsoft Azure SQL数据库,然后执行SELECT和INSERT。

假设我有一个名为dev-sql-srv的Microsoft SQL Server,可访问的主机名是dev-sql-srv.database.windows.net

然后我有一个名为dev-sql-srv-db1的SQL数据库。例如,该表称为CUSTOMER

我已经在https://docs.azuredatabricks.net/spark/latest/data-sources/sql-databases.html#spark-sql-example的原始Azure Databricks文档中找到了这一点。

当我这样做

%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.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:349)     在   org.apache.spark.sql.execution.command.CreateDataSourceTableCommand.run(createDataSourceTables.scala:80)     在   org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult $ lzycompute(commands.scala:72)     在   org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult(commands.scala:70)     在   org.apache.spark.sql.execution.command.ExecutedCommandExec.executeCollect(commands.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.SQLExecution $ .withNewExecutionId(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)在   com.databricks.backend.daemon.driver.SQLDriverLocal $$ anonfun $ 1.apply(SQLDriverLocal.scala:87)

此示例出了什么问题?我的参数肯定都没问题。

2 个答案:

答案 0 :(得分:1)

您必须将数据库名称添加到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"
)

答案 1 :(得分:0)

请用“ dbtable”替换“ table”。例如,

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"
)