SP 调用中的 ADF 映射数据流温度 Table 问题

ADF Mapping Dataflow Temp Table issue inside SP call

我在 foreach activity 中有一个映射数据流,我用它来将几个 table 复制到 ADLS 中;在数据流源 activity 中,我从我的突触环境中调用了一个存储过程。在 SP 中,我创建了一个小临时 table 来存储一些值,稍后我将使用这些值来处理查询。

当我 运行 管道时,我在映射数据流上遇到错误; “SQLServerException:111212:无法在事务内执行操作。”如果我删除临时 table,并只从一个小的 table 做一个简单的 select *,它 returns 数据很好;只有在我恢复温度后 table 我才遇到问题。

你们以前见过这种情况吗?有解决办法吗?

如果您查看 官方 MS 文档,这个错误有很好的记录。

Failed with an error: "SQLServerException: 111212; Operation cannot be performed within a transaction."

Symptoms

When you use the Azure SQL Database as a sink in the data flow to preview data, debug/trigger run and do other activities, you may find your job fails with following error message:

{"StatusCode":"DFExecutorUserError","Message":"Job failed due to reason: at Sink 'sink': shaded.msdataflow.com.microsoft.sqlserver.jdbc.SQLServerException: 111212;Operation cannot be performed within a transaction.","Details":"at Sink 'sink': shaded.msdataflow.com.microsoft.sqlserver.jdbc.SQLServerException: 111212;Operation cannot be performed within a transaction."}

Cause

The error "111212;Operation cannot be performed within a transaction." only occurs in the Synapse dedicated SQL pool. But you mistakenly use the Azure SQL Database as the connector instead.

Recommendation

Confirm if your SQL Database is a Synapse dedicated SQL pool. If so, use Azure Synapse Analytics as a connector shown in the picture below.

Screenshot that shows the Azure Synapse Analytics
connector.

所以在 运行 围绕这个问题进行了一些测试之后,当我调用我的存储过程时,映射数据流似乎不喜欢 Temp Tables。

我最终解决这个问题的方法是,我没有使用 Temp Table,而是使用了 CTE,不管你信不信,它的运行速度比我使用 Temp Table.

@KarthikBhyresh

我之前看过那篇文章,但这不是接收器的问题,我使用 Synapse LS 作为源,使用 Data Lake Storage 作为接收器,所以我从一开始就知道这不是问题适用于我的问题,即使它是相同的错误编号。