NORMALIZER
NORMALIZER создает одну или несколько выходных записей из каждой отдельной входной записи. Входные записи не обязательно сортировать.
Порты NORMALIZER:
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Input | 0 | да | Для входных записей | Любые |
Output | 0 | да | Для нормализованных записей | Любые |
Атрибуты NORMALIZER:
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
normalize | да | Определение способа нормализации записей |
|
Для NORMALIZER нужно определить функцию преобразования. Преобразование должно быть определено в файле задания в артибуте normalize. Эта функция будет вызываться заданное количество раз для каждой записи, поданной на вход этому шагу.
Функции шага NORMALIZER:
integer count()
Параметр | Значение |
---|---|
Обязательный | Да |
Входные параметры | нет |
Возвращает | Число, которое определяет количество вызовов функции Transform() для каждой записи. Если функция count() возвращает 0, то последующий вызов Transform() не производится. |
Вызов | Вызывается по одному разу для каждой входной записи. |
Описание | Описывает количество повторений вызова функции transform() |
Пример |
|
integer transform()
Параметр | Значение |
---|---|
Обязательный | Да |
Входные параметры | нет |
Возвращает | Целое число. Число соответствует возвращаемому значению преобразования. |
Вызов | Вызывается один раз для каждой выходной записи. Количество вызовов определяется возвращаемым значением функции count(). |
Описание | Создает выходные записи. |
Пример |
|
Пример. Преобразование записи с многозначными полями в несколько записей.
Входные записи содержат название должности и список имён сотрудников. Нужно преобразовать записи в кортежи, содержащие название должности и одно имя сотрудника.
менеджер | [Егор, Алина]
разработчик | [Артём, Никита, Данил]
Решение
Определим преобразование, используя атрибут 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 вернёт следующие записи:
менеджер |Егор
менеджер |Алина
разработчик|Артём
разработчик|Никита
разработчик|Данил