【问题标题】:Write data using JDBC connection to Azure SQL DB with Scala code Databricks notebook通过 Scala 代码 Databricks 笔记本使用 JDBC 连接将数据写入 Azure SQL DB
【发布时间】:2019-04-29 11:01:26
【问题描述】:

我正在尝试将数据从配置单元表插入 Azure SQL DB 表。 SQL DB 表已经存在,我只想使用以下 Scala JDBC 编写代码将数据覆盖到其中。此代码正在将数据写入 SQL DB 表,但是它正在更改其 DDL(数据类型/列名)。我怎样才能避免它。我想要简单的插入表格。

【问题讨论】:

  • spark.table(s"${SqlSchema}.${SqlTbl}").write.insertInto(s"${SqlSchema}.${SqlTbl}") 是否对底层架构产生相同的更改?

标签: scala apache-spark hive azure-sql-database azure-databricks


【解决方案1】:

您可以查看此文档:Connecting to SQL Databases using JDBC。它为您提供了一些关于write data to JDBC 的示例。

本节介绍如何从名为 diamonds 的现有 Spark SQL 表将数据写入数据库。

%sql -- quick test that this test table exists
select * from diamonds limit 5

以下代码将数据保存到名为 diamonds 的数据库表中。使用保留关键字的列名可能会触发异常。示例表具有名为 table 的列,因此您可以在将其推送到 JDBC API 之前使用 withColumnRenamed() 对其进行重命名。

spark.table("diamonds").withColumnRenamed("table", "table_number")
     .write
     .jdbc(jdbcUrl, "diamonds", connectionProperties)

Spark 会自动创建一个数据库表,其中包含从 DataFrame 架构确定的适当架构。

默认行为是创建一个新表并在同名表已存在时抛出错误消息。您可以使用 Spark SQL SaveMode 功能来更改此行为。例如,以下是向表格追加更多行的方法:

import org.apache.spark.sql.SaveMode

spark.sql("select * from diamonds limit 10").withColumnRenamed("table", "table_number")
     .write
     .mode(SaveMode.Append) // <--- Append to the existing table
     .jdbc(jdbcUrl, "diamonds", connectionProperties)

您还可以覆盖现有表:

spark.table("diamonds").withColumnRenamed("table", "table_number")
     .write
     .mode(SaveMode.Overwrite) // <--- Overwrite the existing table
     .jdbc(jdbcUrl, "diamonds", connectionProperties)

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-15
    • 2020-05-03
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多