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

Преобразование lookup дополняет основной поток данных значениями, найденными во втором потоке. Для поиска берутся одно или несколько ключевых полей основного потока; каждое сопоставляется с одним ключевым полем второго потока.

При совпадении по умолчанию весь найденный объект второго потока добавляется как свойство исходного объекта. Если задан параметр values, из найденного объекта копируются только перечисленные поля, и запись остаётся плоской.

Параметры преобразования

Свойство Тип Описание
from Data Обязательно. Имя второго потока данных, в котором выполняется поиск.
key Field Обязательно. Ключевое поле второго потока.
values Field[ ] Поля, которые нужно скопировать из второго потока в основной. Если не заданы, копируется ссылка на всю найденную запись.
fields Field[ ] Обязательно. Поля основного потока, значения которых нужно искать.
as String[ ] Имена выходных полей для найденных данных. При заданном values по умолчанию берутся имена оттуда. Параметр обязателен, если указано несколько полей fields или не задан values.
default Any Значение при неудачном поиске (по умолчанию null).

Использование

Для каждого объекта потока values пример ищет в потоке names запись, у которой поле id совпадает с полем foo. Найденный объект добавляется в values как поле obj.

"data": [
  {
    "name": "names",
    "values": [
      {"id": "A", "name": "label A"},
      {"id": "B", "name": "label B"},
      {"id": "C", "name": "label C"}
    ]
  },
  {
    "name": "values",
    "values": [
      {"foo": "A", "bar": 28},
      {"foo": "B", "bar": 55},
      {"foo": "C", "bar": 43},
      {"foo": "C", "bar": 91},
      {"foo": "D", "bar": 81}
    ],
    "transform": [
      {
        "type": "lookup",
        "from": "names",
        "key": "id",
        "fields": ["foo"],
        "as": ["obj"]
      }
    ]
  }
]

После преобразования поток values содержит:

{"foo": "A", "bar": 28, "obj": {"id": "A", "name": "label A"}},
{"foo": "B", "bar": 55, "obj": {"id": "B", "name": "label B"}},
{"foo": "C", "bar": 43, "obj": {"id": "C", "name": "label C"}},
{"foo": "C", "bar": 91, "obj": {"id": "C", "name": "label C"}},
{"foo": "D", "bar": 81, "obj": null}

Следующий пример похож на предыдущий, но вместо ссылки на весь найденный объект копирует в основной поток только значение поля "name" и задаёт значение по умолчанию:

{
  "type": "lookup",
  "from": "names",
  "key": "id",
  "fields": ["foo"],
  "values": ["name"],
  "as": ["obj"],
  "default": "some label"
}

Результат:

{"foo": "A", "bar": 28, "obj": "label A"},
{"foo": "B", "bar": 55, "obj": "label B"},
{"foo": "C", "bar": 43, "obj": "label C"},
{"foo": "C", "bar": 91, "obj": "label C"},
{"foo": "D", "bar": 81, "obj": "some label"}