如何执行命令:SET IDENTITY_INSERT <table> ON on SQL Server table from Spark/Databricks?

How to execute a command: SET IDENTITY_INSERT <table> ON on SQL Server table from Spark/Databricks?

我已经能够使用 JDBC 驱动程序 read/write 从 Databricks 进入 SQL 服务器 table。但是这次我必须在写入 SQL 服务器之前执行命令。 我需要在 SQL 服务器上执行此命令:SET IDENTITY_INSERT ON 如何从 Databricks 做到这一点?任何 help/pointers 都表示赞赏。谢谢。

您不能使用 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 Connector 加载暂存 table,然后使用 JDBC 到 运行 存储过程或临时 SQL 批处理将暂存数据加载到目标 table.