#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. Вы можете использовать несколько атрибутов маршрута для маршрутизации данных по нескольким процессорам.