Решение
Поместите шаги обработки ошибок в отдельный конвейер и запускайте их из действия ExecutePipeline. Вам нужно будет передать все параметры, требуемые от внешнего конвейера.
Затем вы можете использовать зависимость завершения (синяя) от ExecutePipeline (вместо успеха (зеленый)), чтобы внешний конвейер продолжал запустить, несмотря на внутреннюю ошибку.
Обратите внимание, что если вы хотите, чтобы внешний вид знал, что произошло внутри, тогда в настоящее время нет способа передать данные из ExecutePipeline его родительскому элементу (https://feedback.azure.com/forums/270578-data-factory/suggestions/38690032-add-ability-to-customize-output-fields-from-execut).
Чтобы решить эту проблему, используйте действие sp внутри ExecutePipeline для записи данных в таблицу SQL, идентифицированную идентификатором выполнения конвейера. На это можно ссылаться внутри конвейера с помощью @pipeline().RunId
.
Затем за пределами конвейера вы можете выполнить поиск в таблице SQL, используя идентификатор запуска, чтобы получить нужную строку.
ПРЕДУПРЕЖДЕНИЕ О ЗДОРОВЬЕ:
По какой-то странной причине результат ExecutePipeline возвращается не как объект JSON, а как строка. Поэтому, если вы попытаетесь выбрать свойство вывода, подобное @activity('ExecutePipelineActivityName').output.something
, вы получите следующую ошибку:
Выбор свойства не поддерживается для значений типа String
Итак, чтобы получить идентификатор запуска ExecutePipeine извне, вам нужно: @json(activity('ExecutePipelineActivityName').output).pipelineRunId
Я не мог нигде найти это задокументировано в документации Microsoft, поэтому размещаю здесь кровавые подробности.