Преобразования
Преобразование — это фрагмент кода, который определяет, как входные данные преобразуются в выходные данные при прохождении через шаг. Преобразование определяется в атрибуте "transform" или "normalize".
Определение преобразования задается вручную в файле задания с помощью языка JavaScript.
Шаги, допускающие преобразования
Преобразователи можно использовать в таких шагах как HashJoin, MergeJoin, Map, Rollup. В этих шагах есть возможность задать алгоритм преобразования на своё усмотрение, в то время как для других шагов алгоритмы обработки данных чётко определены.
Возвращаемые значения преобразователей
Ниже в таблице представлены все возможные варианты возвращаемых преобразователями значений.
Значение | Описание | Пример использования |
---|---|---|
ALL | В этом случае запись отправляется на все выходные порты. |
|
SKIP | Сообщает что мы пропускаем данный выход (пропускаем цикл преобразования) |
|
Любое целое число больше или равное 0 | Запись отправляется на выходной порт, номер которого равен этому возвращаемому значению. |
|
Методы преобразования данных
В некоторых шагах можно самостоятельно определить алгоритм обработки данных. К таким шагам относятся HashJoin, MergeJoin, HashJoin, Map, Rollup. Пользовательский алгоритм преобразования в этих шагах определяется в атрибуте с именем "transform" с помощью JavaScript:
<Node id="m" type="Map">
<Attr name="transform">
<![CDATA[
function transform() {
//transform code
$out[0].field1 = $in[0].field1 * 3,14;
$out[0].field2 = $in[1].field2 + 'success_string';
return ALL;
}
]]>
</Attr>
</Node>
В шагах, использующих функцию преобразования, можно применять методы для работы с записями, описанные в примере ниже:
<Node id="map" guiX="250" guiY="100" guiName="map" type="Map">
<Attr name="transform"><![CDATA[
$out[0].person = $in[0].name.toString() + "_" + $in[0].surname.toString();
$out[1].person = $in[0].name.toString().toUpperCase() + " " + $in[0].surname.toString().toUpperCase();
return ALL;
Param(param_name)
возвращает значение param_name, но выдает ошибку unknown parameter 'param_name', если имя параметра не определено
0 => $out[0].obj_type = param("X"),
1 => $out[0].obj_type = param("RbISb"),
2 => $out[0].obj_type = format!("secure number is {}", param("FILE_PRM_NUM")),
Param_or(param_name, default_value)
возвращает значение параметра или default_value, если параметра нет
3 => $out[0].obj_type = input.obj_type + " is not " + ¶m_or("XX", "goose") + "!",
Try_param(param_name)
возвращает Some(value) (value является строкой) в случае,
если параметр есть, None, если параметра нет
4 => $out[0].obj_type = if let Some(obj_type) = try_param("X") { obj_type } else { "tuturu".to_string() },
Param_parse_or(param_name, default_value)
возвращает преобразованное значение параметра, если он есть или default_value. Возвращает ошибку, если значение параметра не преобразуется к типу
5 | 6 => {
$out[0].y_coord = param_parse_or("X", 24);
$out[0].obj_type = param_parse_or("X", "tururu".to_string());
}
_ => $out[0].obj_type = input.obj_type,
index += 1;
return ALL;