我在尝试在 Synapse 数据流中配置动态内容以根据工作区环境有选择地应用错误处理策略时遇到困难。我尝试在生产环境中操作时使用“出现第一个错误时停止”选项(这是默认设置),并在开发工作区中切换到“出现错误时继续”。尽管“错误行处理”下拉菜单旨在支持动态内容,但系统似乎将动态内容误解为列引用,如图 2 所示。
用于指示错误处理策略的逻辑如下:
case($ws == 'dev', allErrors, stopOnFirstError)
但是,当
allErrors
作为动态内容输入并解释为字符串时,数据流执行会由于有关事务提交类型的错误而停止。收到的错误信息如下:
{
"message": "Job failed due to reason: com.microsoft.dataflow.Issues: DF-SRC-004 - 'transactionCommit' (Configure transactions for data writes affecting visibility of data changes. Values: batch = multiple smaller transactions, single = single transaction) should be one of the allowed values single, batch - EXE-0001, Dataflow cannot be analyzed as a graph,
selectDims sink(
) ~> sinkDimReturnStatus,[564 737]. Details:",
"failureType": "UserError",
"target": "GO_Dims",
"errorCode": "DFExecutorUserError"
}
图 1:突触错误行下拉列表
图 2:动态内容中的错误
我正在寻求有关如何在 Synapse 数据流中正确实现错误行处理的动态内容的见解。如何确保动态内容不会被误解为列,并根据工作空间环境应用适当的错误处理策略?
当您为接收器的
Errors中的
Transaction Commit动态内容提供除
Single
和batch
以外的字符串值时,您将收到上述错误。
要克服错误并达到您的要求,请使用如下所示的错误行处理。
将表达式
case($ws == 'dev', 'allErrors', 'stopOnFirstError')
赋予错误行处理动态表达式,并使用下拉列表中的Single
或batch
选项中的事务提交。
这是我的输入数据:
Id,Chec
1,Starc
3,Rakesh
5,Virat
6,ABD
7,Ryan Harris
8,Kieswetter
这里,我将 SQL 目标表中
varchar(5)
列的数据类型设置为Chec
。这意味着错误行是列 Chec
的长度超过 5 的行。我的数据流参数$ws
和你的一样。
从管道传递数据流参数值作为
'dev'
时的结果:
数据流将成功,您可以看到仅所需的行已复制到目标表。
错误行文件:
当参数的给定值不是
'dev'
时,数据流按预期失败:
对于突触数据集,您使用突触或azure sql db链接服务。我面临无法将错误行写入 adls 的问题