我创建了一个ADF管道,其中包含多个组件;执行存储过程,执行复制数据任务。总共有14对(7对),我想触发一个失败,该失败将发送一封带有错误消息的电子邮件。
我已经去创建了一个逻辑应用程序来发送电子邮件,如本链接所述 http://microsoft-bitools.blogspot.com/2018/03/add-email-notification-in-azure-data.html
在“网络活动”组件->设置->正文中,我具有以下内容:
"DataFactoryName":
"@{pipeline().DataFactory}",
"PipelineName":
"@{pipeline().Pipeline}",
"ErrorMessage":
"@{activity('Execute Package').error.message}",
"EmailTo":
"@{pipeline().parameters.EmailTo}"
}
问题在于它仅适用于命名活动“执行包”。我一直找不到能够动态获取其来源的任何地方。 有什么办法可以进行单一的网络活动吗?我不想在我的管道中再创建14个事物来处理不同的可能失败。 由于只有一件事正在调用,因此对SendCompletionEmail的调用在逻辑应用程序中可以正常工作。
答案 0 :(得分:1)
我想花一点时间指出,在解决了当前问题(如何从多个来源中获取错误)之后,您还将面临另一个问题:FailureSendEmail活动将不会在您期望的情况下运行。
第一个问题(如何获取失败者的错误):
假设您的管道是线性的,并且您只希望一个活动失败,而所有后续活动都不会运行,那么我建议您使用合并功能。 Coalesce获取第一个非null参数。这是我使用2个存储过程计算出的示例:
aws lambda add-permission
Coalesce接受任意数量的参数,因此您可以随意扩展它。
另一个问题是所有“失败时”连接。虽然您构建的内容有意义,但请让我解释一下。当一个活动具有多个依赖关系连接时,除非所有依赖关系都报告了,否则它将不会执行。这些是AND(与)操作,而不是OR(与)操作。
幸运的是,您无需直接连接即可引用活动输出/错误。您只需要间接连接。如果您的管道逻辑是线性的,那么您已经拥有了。删除所有进入const { darkTheme } = require('@ant-design/dark-theme');
const { override, fixBabelImports, addLessLoader } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
}),
addLessLoader({
javascriptEnabled: true,
modifyVars: darkTheme
}),
);
的行。然后从上一个“复制数据”活动中添加“失败时”和“跳过”依赖关系连接。逻辑如下:
假设“成功之路”中的所有活动都与成功依赖关系相关联, 如果一项活动在管道的早期失败,则将跳过后续活动。这满足了跳过的依赖性。 如果最后一个复制活动失败,则这将满足失败依赖性。