如何在spark/databricks的sqlserver表上执行以下命令:set identity\u insert< table>on?

3yhwsihp  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(407)

我已经能够使用jdbc驱动程序将databricks读/写到sqlserver表中。不过,这次我必须在写入sql server之前执行一个命令。我需要在sql server上执行以下命令:set identity\u insert<sqlserver\u table\u name>关于如何从databricks执行此操作?感谢您的帮助/指点。谢谢。

pgky5nke

pgky5nke1#

您不能使用jdbc spark连接器(或sqlserverspark连接器)来实现这一点,但是在scala或java中直接使用jdbc是很简单的。直接使用jdbc时,您可以显式控制会话,并且可以在同一会话中发出多个批,或者在同一批中发出多个语句。如

%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运行一个存储过程,或者使用ad-hoc sql批处理将暂存数据加载到目标表中。

相关问题