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

Jdbc 无法基于Microsoft Azure SQL数据库表在Microsoft Azure Databricks中创建表,jdbc,azure-sql-database,databricks,Jdbc,Azure Sql Database,Databricks,我想从我的Microsoft Azure Databricks笔记本连接到Microsoft Azure SQL Server和Microsoft Azure SQL数据库,并执行选择和插入操作 假设我有一个名为dev SQL srv的Microsoft SQL Server,可访问的主机名是dev SQL srv.database.windows.net 然后我有一个名为dev-SQL-srv-db1的SQL数据库。例如,该表被称为CUSTOMER 我在原始的Azure Databricks文

我想从我的Microsoft Azure Databricks笔记本连接到Microsoft Azure SQL Server和Microsoft Azure SQL数据库,并执行选择和插入操作

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

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

我在原始的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.databricksceptions$SQLExecutionException: java.lang.IllegalArgumentException:需求失败:选项 “dbtable”是必需的。在scala.Predef$.require(Predef.scala:224)处 org.apache.spark.sql.execution.datasources.jdbc.jdbchoptions.(jdbchoptions.scala:68) 在 org.apache.spark.sql.execution.datasources.jdbc.jdbchoptions.(jdbchoptions.scala:35) 在 org.apache.spark.sql.execution.datasources.jdbc.jdbcreationprovider.createRelation(jdbcreationprovider.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.executeCommandExec.sideEffectResult$lzycompute(commands.scala:72) 在 org.apache.spark.sql.execution.command.executeCommandExec.sideEffectResult(commands.scala:70) 在 org.apache.spark.sql.execution.command.executeCommandExec.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)

这个例子有什么问题?我的参数肯定都正常。

请将“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"
)

您必须将databasename添加到JDBC Url:

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

我已经在你的回答中实现了这一点。我尝试了dbtable
dbo.customer
customer
,但在这两种情况下,我都得到了以下错误:
com.databricks.backend.common.rpc.databrickscececeptions$SQLExecutionException:com.microsoft.sqlserver.jdbc.SQLServerException:无效的对象名“customer”。
我可以保证名称是100%正确的,并且表存在,并且用户具有访问权限(我已经尝试过SSMS和Azure SQL数据库查询(预览)您是否创建了防火墙规则以允许访问Azure SQL数据库?在Azure SQL DB->概述->防火墙和虚拟网络->显示防火墙设置->
允许访问Azure服务
->在>上设置为
——这是您的意思吗?在数据库级别上也是相同的设置。但是您也是从Azur外部连接的e、 从Azure之外的任何公共IP地址添加规则