【发布时间】:2021-04-23 17:23:59
【问题描述】:
我已经能够使用 JDBC 驱动程序从 Databricks 读取/写入 SQL Server 表。但是这次我必须在写入 SQL Server 之前执行一个命令。
我需要在 SQL 服务器上执行这个命令: SET IDENTITY_INSERT
【问题讨论】:
标签: sql-server apache-spark azure-databricks
我已经能够使用 JDBC 驱动程序从 Databricks 读取/写入 SQL Server 表。但是这次我必须在写入 SQL Server 之前执行一个命令。
我需要在 SQL 服务器上执行这个命令: SET IDENTITY_INSERT
【问题讨论】:
标签: sql-server apache-spark azure-databricks
您不能使用 JDBC Spark 连接器(或 SQL Server Spark Connector)来做到这一点,但在 Scala 或 Java 中直接使用 JDBC 时这很简单。直接使用 JDBC 时,您可以显式控制会话,并且可以在同一个会话中发出多个批处理,或者在同一个批处理中发出多个语句。 EG
%scala
import java.util.Properties
import java.sql.DriverManager
val jdbcUsername = dbutils.secrets.get(scope = "kv", key = "sqluser")
val jdbcPassword = dbutils.secrets.get(scope = "kv", key = "sqlpassword")
val driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
// Create the JDBC URL without passing in the user and password parameters.
val jdbcUrl = s"jdbc:sqlserver://xxxxxx.database.windows.net:1433; . . ."
val connection = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword)
val stmt = connection.createStatement()
val sql = """
SET IDENTITY_INSERT <sqlserver_table_name> ON
"""
stmt.execute(sql)
//run additional batches here with IDENTITY_INSERT ON
connection.close()
您始终可以使用 Spark 连接器加载暂存表,然后使用 JDBC 运行存储过程或临时 SQL 批处理将暂存数据加载到目标表中。
【讨论】: