如何执行命令: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.
我已经能够使用 JDBC 驱动程序 read/write 从 Databricks 进入 SQL 服务器 table。但是这次我必须在写入 SQL 服务器之前执行命令。
我需要在 SQL 服务器上执行此命令:SET IDENTITY_INSERT
您不能使用 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.