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 вернёт следующие записи:
менеджер |Егор
менеджер |Алина
разработчик|Артём
разработчик|Никита
разработчик|Данил