Нифи JSON регулярное выражение - PullRequest
0 голосов
/ 26 февраля 2019

Я использую процессор AvroToJson для преобразования avro в json, а затем разделяю json с выражением $. *, Чтобы разбить массив json на отдельные записи.

Ошибка в случае, если в json есть один элемент, а немассив.

Может ли кто-нибудь помочь с регулярным выражением для поддержки как массива, так и одного элемента.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Ну, вам нечего разделять на один элемент.Если вы хотите избежать ошибок на отдельных элементах, вы можете использовать ConvertRecord вместо ConvertAvroToJson.

Разница в том, что ConvertRecord предоставит вам атрибут record.count, который сообщает вам, сколько записей включено в этот FlowFile (а также более общий поток).

Это позволит вам установить средний процессор (RouteOnAttribute) между ConvertRecord и SplitJSON.

Таким образом, вы можете настроить его следующим образом:

Стратегия маршрутизации = Путь к «найденному», если все совпадения

match (динамическое свойство) = $ {record.count: равно (1)}

Затем перенесите отношение connect matched к процессору, который расположен после вашего SplitJSON, и подключите unmatched к вашему SplitJSON процессору.Таким образом, если есть одна запись (которая не нуждается в разделении), это позволит избежать процессора SplitJSON.

0 голосов
/ 26 февраля 2019

Возможно, вы захотите попробовать использовать процессор ConvertRecord с AvroReader и JsonWriter, а затем использовать SplitRecord с количеством записей 1.

Также возможно избежать разделения на отдельные записи.Обычно это делается для того, чтобы манипулировать каждой записью, но с помощью процессоров записей вы обычно можете манипулировать ими на месте, тем самым значительно улучшая производительность, не разбивая.

...