Как преобразовать XML в Apache Nifi - PullRequest
1 голос
/ 16 апреля 2019

В NiFi у меня есть процессор ExecuteSQL, который возвращает следующее

person_id| name | adress 
01       | John | Street 01 
01       | John | Street 02
02       | Deby | Street 01

Обратите внимание, что Adress - это таблица, отличная от Person, поэтому левое соединение приводит к дублированию значений.

В NifiЯ преобразовал AVro в Json, а затем в XML, и это результат:

<person>
  <person_id>01</person_id>
  <name>John</name>
  <address>Street 01</address>
</person>
<person>
  <person_id>01</person_id>
  <name>John</name>
  <address>Street 02</address>
</person>
<person>
  <person_id>02</person_id>
  <name>Deby</name>
  <address>Street 01</address>
</person>

Однако мой желаемый результат будет:

<person>
  <person_id>01</person_id>
  <name>John</name>
  <addresses>
    <address>Street 01</address>
    <address>Street 02</address>
  </addresses>
</person>
<person>
  <person_id>02</person_id>
  <name>Deby</name>
  <addresses>
    <address>Street 01</address>
  </addresses>
</person>

Возможно ли это сделать вNifi?Я не могу найти подходящий процессор для этого, я должен использовать XSLT (с процессором Transform XML)?написать свой процессор?Как я могу это сделать?

Я новичок в NiFi, и любая помощь будет признательна.

1 Ответ

2 голосов
/ 16 апреля 2019

Существует несколько подходов:

  1. Выполните преобразование в JSON перед преобразованием в XML - дескрипторы процессора JoltTransformJSONсложные преобразования и больше документации по этому процессу (а также онлайн-песочниц для тестирования )
  2. Выполните преобразование в XSLT - если вам удобнееXSLT, вы можете сделать это с TransformXML.Существует много ответов Stack Overflow , которые помогут вам создать XSLT
  3. Написать скрипт Groovy - Если логику преобразования сложно создать в Jolt или XSLT,Groovy-скрипт в ExecuteScript, вероятно, будет самым простым решением.Обработка XML в Groovy очень лаконична и допускает мощные манипуляции с типизацией карт / объектов.Это было бы моей рекомендацией, если спецификации Jolt или XSLT нетривиальны
  4. Написать собственный процессор - Если вы создаете сценарий, который работает хорошо, вы можете перенести этот код в пользовательскийпроцессор для долгосрочных преимуществ (повышение производительности, разворачиваемость, контроль версий, конфигурируемость и т. д.).У меня есть последние слайды о процессе разработки собственного процессора
...