Преобразование 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"}