MAP

MAP позволяет написать пользовательский алгоритм обработки данных, используя внутренний язык системы. Можно по своему усмотрению трансформировать данные между входным и выходными портами, если предложенных шагов не хватает для выполнения необходимых преобразований данных.

Имеет единственный входной порт и как минимум один выходной. Может отправлять разные записи в разные выходные порты или даже отправлять одну и ту же запись на несколько выходных портов. Работает только с одним элементом, сохраняет порядок записей.

С помощью MAP можно:

  • удалить ненужные значения полей
  • проверить записи с помощью функций или регулярных выражений
  • создать новые или изменить существующие поля
  • преобразовать типы данных

Порты MAP:

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

Атрибуты MAP:

АтрибутОбязательныйОписаниеВозможные значения
transformдаАлгоритм преобразования данных

<attr name="transform">
    <![CDATA[
        function transform() {
            $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;
        }
    ]]>
</attr>

Пример. Обработка данных с помощью MAP.

Нужно получить произведение и сумму полученных на вход данных и отправить результаты на разные выходные порты. Входные метаданные содержат поля a, b. Нужно отправить результат перемножения a*b на первый порт, а результат сложения a+b на второй порт.

Входящие записи:

ab
56
24
12

Решение:

Преобразование:


<Attr name="transform"><![CDATA[
    function transform() {
    //transform code
        var res_mul = $in[0].a * $in[0].b;
        var res_add = $in[0].a + $in[0].b;

        $out[0].res_mul = res_mul;
        $out[1].res_add = res_add;

        return ALL;
    }
    ]]>
</Attr>

Исходящие записи:

порт 0:

multiplied
30
6
2

порт 1:

added
11
5
3