Преобразовать массив Json в csv с помощью Nifi

#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}]"
  

введите описание изображения здесь

Конфигурация ConvertRecord:
введите описание изображения здесь

Конфигурация службы контроллера 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.