【问题标题】:Cannot create a Table in Microsoft Azure Databricks based on a Microsoft Azure SQL Database Table无法在 Microsoft Azure Databricks 中基于 Microsoft Azure SQL 数据库表创建表
【发布时间】:2019-03-03 09:42:12
【问题描述】:

我想从我的 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)

这个例子有什么问题?我的参数绝对没问题。

【问题讨论】:

    标签: jdbc azure-sql-database databricks


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我已经按照您的回答实现了它。我尝试了 dbtable dbo.customercustomer 但在这两种情况下我都收到以下错误:com.databricks.backend.common.rpc.DatabricksExceptions$SQLExecutionException: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'Customer'.
      • 而且我可以保证数据库名称和表名称是 100% 正确的,并且该表存在并且用户具有访问权限(我已经尝试通过 SSMS 和 Azure SQL 数据库查询(预览版)
      • 您是否创建了防火墙规则以允许访问 Azure SQL 数据库?
      • 在 Azure SQL DB -> 概述 -> 防火墙和虚拟网络 -> 显示防火墙设置 -> Allow access to Azure services -> 设置为 ON -- 这是您的意思吗?数据库级别的设置也相同。
      • 但您也是从 Azure 外部连接,请从 Azure 外部的任何公共 IP 地址添加规则
      猜你喜欢
      • 2018-02-25
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      相关资源
      最近更新 更多