我想从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)
此示例出了什么问题?我的参数肯定都没问题。
答案 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"
)