NORMALIZER

NORMALIZER создает одну или несколько выходных записей из каждой отдельной входной записи. Входные записи не обязательно сортировать.

Порты NORMALIZER:

Тип портаНомерОбязательныйОписаниеМетаданные
Input0даДля входных записейЛюбые
Output0даДля нормализованных записейЛюбые

Атрибуты NORMALIZER:

АтрибутОбязательныйОписаниеВозможные значения
normalizeдаОпределение способа нормализации записей
<attr name="normalize"><![CDATA[
	function count() {
	    if ($in[0].foo >= 50) {	return 1 } 
        else { return 0 }
			
	function transform() {
		$out[0].num = $in[0].foo;
		$out[0].str = "asd"+$in[0].foo/3.14;
		return ALL;
	}
]]></attr>

Для NORMALIZER нужно определить функцию преобразования. Преобразование должно быть определено в файле задания в артибуте normalize. Эта функция будет вызываться заданное количество раз для каждой записи, поданной на вход этому шагу.

Функции шага NORMALIZER:

integer count()

ПараметрЗначение
ОбязательныйДа
Входные параметрынет
ВозвращаетЧисло, которое определяет количество вызовов функции Transform() для каждой записи. Если функция count() возвращает 0, то последующий вызов Transform() не производится.
ВызовВызывается по одному разу для каждой входной записи.
ОписаниеОписывает количество повторений вызова функции transform()
Пример
function count() {
   customers = split($in[0].customers,";");
   return length(customers);
}

integer transform()

ПараметрЗначение
ОбязательныйДа
Входные параметрынет
ВозвращаетЦелое число. Число соответствует возвращаемому значению преобразования.
ВызовВызывается один раз для каждой выходной записи. Количество вызовов определяется возвращаемым значением функции count().
ОписаниеСоздает выходные записи.
Пример
function transform(idx) {
   myString = customers[idx];
   $out[0].OneCustomer = str2integer(myString);
   $out[0].RecordNo = $in[0].recordNo;
   $out[0].OrderWithinRecord = idx;

   return ALL;
}

Пример. Преобразование записи с многозначными полями в несколько записей.

Входные записи содержат название должности и список имён сотрудников. Нужно преобразовать записи в кортежи, содержащие название должности и одно имя сотрудника.

менеджер | [Егор, Алина]
разработчик | [Артём, Никита, Данил]

Решение

Определим преобразование, используя атрибут normalize:

function count() {
    return length($in[0].users);
}

function transform() {
    $out[0].group = $in[0].group;
    $out[0].user = $in[0].users;
    return ALL;
}

NORMALIZER вернёт следующие записи:

менеджер |Егор
менеджер |Алина
разработчик|Артём
разработчик|Никита
разработчик|Данил