【问题标题】:How to execute a command: SET IDENTITY_INSERT <table> ON on SQL Server table from Spark/Databricks?如何在 Spark/Databricks 的 SQL Server 表上执行命令:SET IDENTITY_INSERT <table> ON?
【发布时间】:2021-04-23 17:23:59
【问题描述】:

我已经能够使用 JDBC 驱动程序从 Databricks 读取/写入 SQL Server 表。但是这次我必须在写入 SQL Server 之前执行一个命令。 我需要在 SQL 服务器上执行这个命令: SET IDENTITY_INSERT ON 如何从 Databricks 做到这一点?任何帮助/指针表示赞赏。谢谢。

【问题讨论】:

    标签: sql-server apache-spark azure-databricks


    【解决方案1】:

    您不能使用 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 批处理将暂存数据加载到目标表中。

    【讨论】:

    • 谢谢大卫。是的,我使用了 JDBC 连接器并且它工作正常。 val sql = "SET IDENTITY_INSERT ON;插入 " stmt.execute(sql)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    相关资源
    最近更新 更多