EXECUTE_GRAPH
Шаг EXECUTE_GRAPH запускает граф с определенными настройками, ожидает завершения графа и предоставляет результаты и детали выполнения на выходные порты.
Порты EXECUTE_GRAPH:
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Input | 0 | нет | Входные записи с настройками выполнения графа. | Любые |
Output | 0 | нет | Информация об успешном выполнении задания. | |
1 | нет | Информация о неудачном выполнении задания. |
Атрибуты EXECUTE_GRAPH:
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
jobURL | да | Путь к исполняемому графу. В этом атрибуте можно указать только один граф. Значение может быть переопределено значением из входного потока, см. атрибут «inputMapping». |
|
orderOutput | нет | Параметр указывает, сохранится ли порядок дочерних графов на выходе потока данных из шага. При 'true' - выходные данные подаются в соответствии с порядком запуска дочерних графов. При 'false', результаты выполнения передаются на выходной порт по мере выполнения. |
|
concurrentRunsLimit | нет | Количество исполняемых параллельно дочерних графов. |
|
inputMapping | нет | Маппинг входных данных определяет, как данные из входящего потока переопределяют значение jobURL, значение передаваемых в вызываемый граф параметров и словарей.
порт $out[0] - для переопределения значения jobURL; |
|
outputMapping | нет | Маппинг выходных данных сопоставляет результаты успешного выполнения графа с метаданными первого выходного порта.
порт $in[0] - для передачи записей из внутреннего графа. |
|
errorMapping | нет | Маппинг ошибок отображает результаты неудачных запусков графов на второй выходной порт. |
|
Подробности хода выполнения
Компонент считывает входную запись, выполняет граф на основе значений входящих данных, ждет завершения графа и отправляет результаты на соответствующий порт. Результаты успешного запуска графа отправляются на первый выходной порт. Результаты неудачного запуска отправляются на второй выходной порт (порт ошибки).
Если запуск графа прошел успешно, компонент продолжает обработку следующих входных записей. В противном случае компонент прекращает выполнение других графов, и с этого момента все входящие записи игнорируются, а информация об игнорируемых записях отправляется на порт вывода ошибок.
Подключенные и отключенные порты
В случае, если входной порт не подключен, выполняется только один граф с настройками по умолчанию, указанными в атрибутах компонента.
В случае, если первый выходной порт не подключен, компонент не выводит результаты выполнения графа.
Если второй выходной порт (порт ошибки) не подключен, первый граф с ошибкой приведет к прерыванию родительского задания.
Конфигурация компонента
Для запуска графа с помощью шага EXECUTE_GRAPH необходимо указать местоположение исполняемого графа в атрибуте jobURL
.
Большинство настроек выполнения можно указать в шаге с помощью атрибутов компонента, описанных ниже.
Настройки выполнения графа можно изменять для каждого запуска на основе данных из входящего потока в атрибуте inputMapping
.
Типы выполнения графа
EXECUTE_GRAPH поддерживает синхронное (последовательное) и асинхронное (параллельное) выполнение графов.
Для управления синхронностью выполнения используйте следующие атрибуты шага:
- concurrentRunsLimit - целое число, обозначающее сколько графов одновременно могут выполняться. По умолчанию значение равно
1
и дочерние графы выполняются параллельно, но если установить большее значение, то графы смогут выполняться асинхронно. - orderOutput - указывает порядок информации о дочерних графах, выдаваемой на выходной порт шага ExecuteGraph. По-умолчанию установлено значение
true
и выходные данные подаются в соответствии с порядком запуска дочерних графов. Приfalse
, результаты выполнения будут передаваться на выходной порт по мере выполнения дочерних графов.
Мапинг входных данных
Атрибут inputMapping
позволяет переопределить настройки шага на основе данных из входящего потока.
Маппинг входных данных — это преобразование, которое выполняется для каждой входной записи. С помощью inputMapping
можно переопределить атрибут jobURL
и передать в исполняемый граф значения его атрибутов и записи словаря.
На первый выходной порт можно подать значение для переопределения атрибута jobURL
, а на второй выходной порт - параметры для исполняемого графа.
Можно задавать не только явно определённые публичные параметры, но и определять новые параметры, они будут доступны внутри графа по аналогии с такими встроенными параметрами как runId
.
Тип порта | Номер | Обязательный | Описание | Пример |
---|---|---|---|---|
Output | 0 | нет | Для переопределения пути к исполняемому графу |
|
1 | Для передачи параметров в исполняемый граф |
| ||
2 | Для передачи записей в словарь исполняемого графа |
|
Маппинг выходных данных
outputMapping
— это преобразование, которое используется для заполнения потока, передаваемого в первый выходной порт шага EXECUTE_GRAPH. Этот маппинг используется для вывода данных при успешном выполнении графа.
Данные, предоставляемые на первый выходной порт EXECUTE_GRAPH с помощью outputMapping
описаны в таблице ниже. Первый выходной порт задействуется только если статус графа $in[1].status = "SUCCEEDED"
, в противном случае будет вызван errortMapping
и данные пойдут на второй выходной порт.
Тип порта | Номер | Обязательный | Описание | Пример |
---|---|---|---|---|
Output | 0 | нет | Для входящего потока записей |
|
1 | Уникальный идентификатор запуска графа |
| ||
Путь к исполняемому графу |
| |||
Время запуска графа |
| |||
Время завершения графа |
| |||
Окончательный статус выполнения графа, один из { SUCCEEDED, FAILED } |
| |||
2 | Для передачи записей из словаря исполняемого графа |
|
Маппинг ошибок
errorMapping
— это тоже трансформация. Она используется для вывода ошибок. Данные, которые можно отправить через errorMapping
аналогичны описанным в таблице в outputMapping
.
Маппинг ошибок используется в том случае, если внутренний граф завершился неудачно - со статусом $in[1].status = "FAILED"
- тогда вместо первого заполняется второй выходной порт шага EXECUTE_GRAPH.
Если маппинг ошибок не определен, а во внутреннем графе произошла ошибка - родительский граф не сможет ее обработать и упадёт.
Пример передачи параметров через словарь
Для передачи данных из основного графа во внутренний через словарь, необходимо использовать второй выходной порт в inputMapping
. Для передачи значений из словаря внутреннего графа в основной - второй входной порт в outputMapping
.
Задание: Передать значение в словарь внутреннего графа, изменить его, получить изменённое значение и вывести его в лог.
Решение: Чтобы запустить из графа другой граф - используйте шаг EXECUTE_GRAPH. Чтобы передать значения в вызываемый граф - заполните атрибут inputMapping
, присвоив начальное значение записи словаря вызываемого графа. Изменённое внутри вызываемого графа значение словаря можно получчить в основном графе через outputMapping
шага EXECUTE_GRAPH.
В inputMapping
шага execgrf
через второй выходной порт присваиваем значение 11
записи словаря с именем foo
, определённого во внутреннем графе. Значение словаря передаётся во внутренний граф. В outputMapping
получаем через второй входной порт изменённое значение записи этого словаря.
<Node id="execgrf" guiX="386" guiY="49" guiName="exec" type="EXECUTE_GRAPH" jobURL="dict_inner3.grf">
<attr name="inputMapping"><![CDATA[
function transform() {
$out[2].foo = 11;
return ALL;
}
]]></attr>
<attr name="outputMapping"><![CDATA[
function transform() {
$out[0].foo = $in[2].foo;
return ALL;
}
]]></attr>
</Node>
Объявление словаря в теге <Global>
во внутреннем графе:
<Dictionary>
<Entry dictval.value="1" name="foo" input="true" output="true" type="integer" />
</Dictionary>
Переопределение значения записи словаря foo
в датагенераторе внутреннего графа:
<Node id="datagen1" guiX="98" guiY="57" guiName="datagen1" type="DATA_GENERATOR" recordsNumber="1">
<attr name="generate"><![CDATA[
function generate() {
$out[0].foo = dictionary.foo;
dictionary.foo = 43;
return ALL;
}
]]></attr>
</Node>