DataBricks JDBC“isolationLevel”选项不启用脏读

问题描述 投票:0回答:1

我需要通过复制“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 驱动程序/连接的限制?

sql-server jdbc databricks mssql-jdbc
1个回答
0
投票

如果您的 db_name 字符串等于“dbo.sometable with (nolock)”,则可以完成此操作

© www.soinside.com 2019 - 2024. All rights reserved.