Azure фабрика данных: обработка внутреннего отказа в до / для активности - PullRequest
1 голос
/ 25 мая 2020

У меня есть конвейер Azure фабрики данных v2, содержащий действие до.

Внутри до действие копирования - если это не удается, ошибка регистрируется, точно как этот пост, и я хочу, чтобы l oop продолжался.

Azure Конвейер фабрики данных 'On Failure'

Хотя ошибка внутреннего копирования обрабатывается , действие до считается неудачным из-за сбоя внутреннего действия.

ADF Screenshots

Есть ли способ настроить пока активность не будет продолжена, когда внутренняя активность потерпит неудачу?

1 Ответ

0 голосов
/ 27 мая 2020

Решение

Поместите шаги обработки ошибок в отдельный конвейер и запускайте их из действия 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, поэтому размещаю здесь кровавые подробности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...