我需要通过复制“With (NOLOCK)”SQL 功能的 Databricks 通过 JDBC 从 Microsoft SQL Server 数据库读取数据。通过官方文档,执行此操作的方法是将“isolationLevel”选项设置为“READ_UNCOMMITTED”。尽管我尝试在有目的地锁定表(在 SQL Server 上)然后尝试使用指定的“isolationLevel”(在 Databricks 上)读取时执行此操作,但查询始终保持挂起状态,直到表解锁。
下面是我用来尝试在 Databricks 上阅读的 Pyspark 代码。
df = ( spark.read
.format("jdbc")
.option("isolationLevel", "READ_UNCOMMITTED")
.option("url",jdbcUrl)
.option("port", port)
.option("user", user)
.option("password", password)
.option("database", db_name)
.option('loginTimeout', 30)
.option("dbtable",dbtable)
.load())
df.write.format("delta").mode("overwrite").option("overwriteSchema",True).saveAsTable("test_table")
这是我用来锁定 SQL SERVER 上的目标表的 SQL 查询。
BEGIN TRAN
SELECT TOP (1) 1 FROM dbo.Test_Table WITH (TABLOCKX)
WAITFOR DELAY '00:02:00'
ROLLBACK TRAN;
我的代码是否有问题,或者这是 JDBC 驱动程序/连接的限制?
如果您的 db_name 字符串等于“dbo.sometable with (nolock)”,则可以完成此操作