#arrays #json #apache-nifi
#массивы #json #apache-nifi
Вопрос:
Я хочу преобразовать JSON с массивом в формат csv. Количество элементов внутри массива является динамическим для каждой строки. Я пытался использовать этот поток (прикрепил XML-файл потока к сообщению).
GetFile -> ConvertRecord -> UpdateAttribute -> PutFile
Есть ли другие альтернативы?
Формат JSON:
{
"LogData":{
"Location":"APAC",
"product":"w1"
},
"Outcome":[
{
"limit":"0",
"pri":"3",
"result":"pass"
},
{
"limit":"1",
"pri":"2",
"result":"pass"
},
{
"limit":"5",
"priority":"1",
"result":"fail"
}
],
"attr":{
"vers":"1",
"datetime":"2018-01-10 00:36:00"
}
}
Ожидаемый результат в формате csv:
location, product, limit, pri, result, vers, datetime
APAC w1 0 3 pass 1 2018-01-10 00:36:00
APAC w1 1 2 pass 1 2018-01-10 00:36:00
APAC w1 5 1 fail 1 2018-01-10 00:36:00
Вывод из подключенного потока:
LogData,Outcome,attr
"MapRecord[{product=w1, Location=APAC}]","[MapRecord[{limit=0, result=pass, pri=3}], MapRecord[{limit=1, result=pass, pri=2}], MapRecord[{limit=5, result=fail}]]","MapRecord[{datetime=2018-01-10 00:36:00, vers=1}]"
Конфигурация службы контроллера JSONTReeReader: Конфигурация службы контроллера CSVRecordSetWriter: Конфигурация службы контроллера Avroschmeregistry:
Схема Avro: { «name»: «myschema», «type»: «record», «namespace»: «myschema», «fields»: [{«name»: «LogData», «type»: { «name»: «LogData», «type»: «record», «fields»: [{ «name»: «Location», «type»: «string»},{ «name»: «product», «type»: «string»} ]} },{«имя»: «Результат»,»тип»: { «тип»: «массив», «элементы»: {«имя»: «Итоговая запись», «тип»: «запись», «поля»: [ {«имя»: «ограничение», «тип»: «строка»}, {«имя»: «pri»,»тип»: [«строка»,»null»]}, {«имя»: «результат», «тип»: «строка» }] }}},{«имя»: «attr «,»тип»: { «имя»: «attr», «тип»: «запись», «поля»: [{ «имя»: «версии», «тип»: «строка»},{ «имя»: «дата-время», «тип»: «строка»} ]}} ]}
Комментарии:
1. Не могли бы вы обновить вопрос с помощью
Record Reader/Writer
схем обслуживания контроллера?2. обновлены скриншоты всех настроек и деталей схемы avro.