Nifi объединяет содержимое по аналогичному значению атрибута

#apache-nifi

Вопрос:

У меня есть zip-файлы, такие как ниже, в каталоге:

 139909-JSON.zip 139910-JSON.zip ...  

И содержимое каждого zip-файла выглядит следующим образом:

 1  672748  1399101-672748-content.json  1399101-672748-header.json 2  684919  1399101-684919-content.json  1399101-684919-header.json ...  

Я использую GetFile gt; UnpackContent gt; UpdateAttribute -gt; MergeContent поток прямо сейчас. Но я не могу по-настоящему объединить свои данные.

GetFile: получить все zip-файлы.

Распаковка содержимого: распакуйте zip-файлы и получите все .json файлы.

Атрибут UpdateAttribute: У меня есть 672748 и 684919 из filename TracingNo переменной.

Мне нужно объединить все файлы с одинаковым TracingNo значением в один файл JSON.

Как я могу это сделать?

Комментарии:

1. Вы знаете, сколько файлов для каждой трассировки-нет ? Как должен выглядеть объединенный файл? Что вы пробовали до сих пор?

2. @daggett Минимум 1 и максимум 2 файла для каждого TracingNo . Содержимое каждого файла является объектом JSON, и я хочу объединить тему в новый файл в массиве JSON. пример [{file_1}, {file_2}] .

3. @daggett Я объединил каждые 2 файла вместе. но я не могу объединить их с равными TracingNo .

4. Почему вы не можете объединить их с равным отслеживанием?

5. @даггетт, я не знаю. они не могут по-настоящему слиться с темой TracingNo . у вас есть какой-нибудь полезный пример или ресурс по этому поводу?

Ответ №1:

Проблема в этом утверждении: Минимум 1 и максимум 2 файла для каждого отслеживания.

Будет лучше знать количество файлов для создания содержимого слияния

Однако попробуйте сделать это в 2 этапа:

Слияние с параметрами:

 Merge Strategy = Bin-Packing Algorithm Merge Format = Binary Concatenation Correlation Attribute Name = TracingNo Minimum Number of Entries = 2 Maximum Number of Entries = 2 Max Bin Age = 10 seconds Delimiter Strategy = Text Header = [ Footer = ] Demarcator = ,  

Этот процессор будет ждать второго файла в течение 10 секунд. Отдельные файлы будут классифицированы как неудачные, и вы можете использовать ReplaceText для добавления [] в них.

Ответ №2:

Что делать, если вы использовали атрибут RouteAttribute для того, чтобы все потоковые файлы с одинаковым отслеживанием были перенаправлены одним и тем же способом, чтобы они направлялись к одному и тому же MergeContent. Это можно сделать для атрибута RouteAttribute, чтобы каждый трассировочный файл отправлялся по-своему, чтобы все потоковые файлы в каждом направлении имели одинаковый трассировочный файл, позволяющий обрабатывать одни и те же значения и объединять их

Комментарии:

1. Это хорошая идея , когда у меня их несколько TracingNo , но их слишком много.

2. Вы можете использовать несколько атрибутов маршрута для маршрутизации данных по нескольким процессорам.