Преобразование flatten
Преобразование flatten ≥ 3.1 превращает поля-массивы fields в отдельные объекты данных — по одному на элемент массива. Новый поток содержит извлечённое значение и все исходные поля соответствующего объекта.
Примечание: flatten работает только с полями-массивами. Если объект содержит вложенные свойства с известными заранее именами, используйте fold или project.
Параметры преобразования
| Свойство | Тип | Описание |
|---|---|---|
| fields | Field[ ] | Обязательно. Одно или несколько полей-массивов, которые нужно развернуть. Если полей несколько, массивы должны иметь параллельную структуру, желательно одинаковую длину. При разных длинах используется самый длинный массив, а недостающие элементы заполняются null. |
| index | String | Имя выходного поля с индексом элемента массива, начиная с нуля. Если не задано, индекс не добавляется. ≥ 5.8 |
| as | String[ ] | Имена выходных полей для извлечённых значений. По умолчанию используются имена соответствующих исходных полей-массивов. |
Использование
Разворачивание одного поля
Пример разворачивает поле-массив foo. Все поля, кроме foo, повторяются в каждом выходном объекте.
{"type": "flatten", "fields": ["foo"]}
Входные данные:
[
{"name": "alpha", "data": 123, "foo": [1, 2]},
{"name": "beta", "data": 456, "foo": [3, 4, 5]}
]
Результат:
[
{"name": "alpha", "data": 123, "foo": 1},
{"name": "alpha", "data": 123, "foo": 2},
{"name": "beta", "data": 456, "foo": 3},
{"name": "beta", "data": 456, "foo": 4},
{"name": "beta", "data": 456, "foo": 5}
]
Добавление индекса
{"type": "flatten", "fields": ["foo"], "index": "idx"}
Пример добавляет поле с индексом исходного элемента массива.
[
{"name": "alpha", "data": 123, "foo": [1, 2]},
{"name": "beta", "data": 456, "foo": [3, 4, 5]}
]
Результат:
[
{"name": "alpha", "data": 123, "foo": 1, "idx": 0},
{"name": "alpha", "data": 123, "foo": 2, "idx": 1},
{"name": "beta", "data": 456, "foo": 3, "idx": 0},
{"name": "beta", "data": 456, "foo": 4, "idx": 1},
{"name": "beta", "data": 456, "foo": 5, "idx": 2}
]
Разворачивание нескольких полей
{"type": "flatten", "fields": ["foo", "bar"]}
Пример одновременно разворачивает поля-массивы foo и bar. Пусть есть следующие данные:
[
{"key": "alpha", "foo": [1, 2], "bar": ["A", "B"]},
{"key": "beta", "foo": [3, 4, 5], "bar": ["C", "D"]}
]
Результат:
[
{"key": "alpha", "foo": 1, "bar": "A"},
{"key": "alpha", "foo": 2, "bar": "B"},
{"key": "beta", "foo": 3, "bar": "C"},
{"key": "beta", "foo": 4, "bar": "D"},
{"key": "beta", "foo": 5, "bar": null}
]