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