azure-sql-database - 如何通过 azure Databricks 更新 Azure SQL 数据库/数据仓库表?
问题描述
我的项目中有一个要求,我在 Azure SQL DW 中实现 SCD 类型 2 表。我可以使用 JDBC 连接器插入新记录,但我需要将旧记录更新为“过期”,并根据更新的值更新其他记录。
解决方案
推荐的模式是使用Databricks Azure SQL DW 连接器批量加载临时表,或者将新数据写入 blob 存储中的文件,或者使用数据湖并使用Polybase外部表来保存新行。
然后,一旦新数据被加载到临时表中,或者在 Polybase 外部表中可用,编写一个 TSQL 存储过程来“将旧记录更新为“过期”,并根据更新的值更新其他记录”。
Spark 只知道如何运行查询和加载表。但是您已经安装了 JDBC 驱动程序,并且可以使用 Scala 或 Java 的 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://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()
推荐阅读
- c - 如何使用代码中已定义的变量为变量设置值?
- exception - 独白捕获致命错误:允许的内存大小已用尽
- reactjs - 如何将无限滚动与 FlatList 和 React Hook 一起使用?
- c# - 由于重叠视图,按钮不可点击
- android - 有没有办法让改造忽略 EOFExceptions 并继续解析?
- flutter - Flutter 流式广播在通话后不会重新启动
- php - 无法使用 SSE 和 PHP 发送自定义事件
- json - 使用角度 8 解析 JSON 时出错
- javascript - AOS-Animate On Scroll Library 响应性
- graphql - Gatsby - 从 csv 文件中的参考字段制作流体图像宽度 ImageSharp