如何通过 azure Databricks 更新 Azure SQL Database/Data 仓库 table?
How to update a Azure SQL Database/Data Warehouse table by azure Databricks?
我在我的项目中有一个要求,我在 Azure SQL DW 中实现 SCD 类型 2 table。我可以使用 JDBC 连接器插入新记录,但我需要将旧记录更新为 "expired" 并根据更新值更新其他记录。
推荐的模式是使用 Databricks Azure SQL DW Connector to bulk load a staging table, or write the new data to files in blob storage, or datalake and use a Polybase 外部 Table 来保存新行。
然后,一旦新数据加载到分段 table,或在 Polybase 外部 Table 中可用,将 TSQL 存储过程写入 "update old records as "expired" 并更新根据更新值的其他记录。
Spark 只知道如何 运行 查询和加载 table。但是您已经安装了 JDBC 驱动程序,并且可以使用 JDBC 从 Scala 或 Java 访问。例如:
%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://xxxxx.database.windows.net:1433;database=AdventureWorks;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
val connection = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword)
val stmt = connection.createStatement()
val sql = """
exec usp_someproc ...
"""
stmt.execute(sql)
connection.close()
我在我的项目中有一个要求,我在 Azure SQL DW 中实现 SCD 类型 2 table。我可以使用 JDBC 连接器插入新记录,但我需要将旧记录更新为 "expired" 并根据更新值更新其他记录。
推荐的模式是使用 Databricks Azure SQL DW Connector to bulk load a staging table, or write the new data to files in blob storage, or datalake and use a Polybase 外部 Table 来保存新行。
然后,一旦新数据加载到分段 table,或在 Polybase 外部 Table 中可用,将 TSQL 存储过程写入 "update old records as "expired" 并更新根据更新值的其他记录。
Spark 只知道如何 运行 查询和加载 table。但是您已经安装了 JDBC 驱动程序,并且可以使用 JDBC 从 Scala 或 Java 访问。例如:
%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://xxxxx.database.windows.net:1433;database=AdventureWorks;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
val connection = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword)
val stmt = connection.createStatement()
val sql = """
exec usp_someproc ...
"""
stmt.execute(sql)
connection.close()