Преобразование строки в массив в Apache NIFI

Вопрос или проблема

Я использую Apache NIFI уже некоторое время и использовал процессор ExecuteScript для сопоставления значений с номерами, используя статические JSON. В процессе ExecuteScript я передаю CSV в качестве входного формата и получаю CSV в качестве выходного формата, поскольку мы используем CSV в качестве формата файла в flowfile, после сопоставления значений многократного выбора он обрабатывается как строка, а не как массив.
Например –
Колонки входного файла:
test1,test2
Shrid,”map1,map2″
Колонки выходного файла:
test1,test2
Shrid,”[1,2]”
Вместо возврата массива объектов он выдаёт строку, что вызывает проблемы при загрузке данных в базу данных.
Как мы можем преобразовать значения из строки в массив объектов в NIFI? Заранее спасибо!

1. Пытался конвертировать значения в целые числа перед загрузкой в базу данных
2. Конвертация данных в формат JSON и использование схемы AVRO для вставки данных

Ответ или решение

Конечно! Проблема, с которой вы столкнулись в Apache NiFi, связана с тем, что значения, которые вы ожидаете как массив объектов, возвращаются как строка. Для решения этой проблемы можно использовать несколько подходов. Позвольте мне предложить вам шаги, которые помогут вам конвертировать строку в массив объектов в формате JSON.

Решение проблемы с преобразованием строки в массив объектов в Apache NiFi:

  1. Использование процессора ReplaceText:

    • Добавьте процессор ReplaceText перед шагом, где вы загружаете данные в базу данных.
    • Настройте Search Value на регулярное выражение, соответствующее строке, например: "(map1,map2)".
    • В Replacement Value указать JSON-формат, который вы хотите получить: ["map1", "map2"].
    • Убедитесь, что режим Replacement Strategy настроен на All.
  2. Использование процессора ExecuteScript:

    • Если вы все еще хотите использовать ExecuteScript, вы можете преобразовать строку в массив с помощью JavaScript.
    • Пример кода на JavaScript, который можно использовать в процессе:

      var input = flowFile.getAttribute('yourAttributeName'); // Получаем атрибут
      var array = input.split(","); // Преобразуем строку в массив
      var jsonArray = JSON.stringify(array); // Преобразуем массив в JSON-строку
      
      flowFile = session.putAttribute(flowFile, 'yourOutputAttributeName', jsonArray); // Записываем результат в атрибут
    • Убедитесь, что вы обрабатываете все атрибуты корректно и возвращаете их обратно в поток.
  3. Использование ConvertJSONToAvro:

    • Если вы хотите упростить работу с данными, вы можете преобразовать данные в JSON-формат и использовать процессор ConvertJSONToAvro.
    • Для этого вы можете сначала преобразовать данные в формат JSON с помощью процессора ConvertTextToJSON. Затем используйте ConvertJSONToAvro, чтобы создать сложные структуры, включая массивы.
  4. Завершение и проверка:
    • После преобразования данных в массив объектов убедитесь, что выходной файл имеет правильный формат. Для проверки можно использовать процессор LogAttribute, чтобы просмотреть содержимое переменных и атрибутов потока.
    • Проверьте, что массив объектов корректно воспринимается при загрузке в вашу базу данных.

Эти шаги помогут вам решить проблему с преобразованием строк в массив объектов в Apache NiFi. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь задавать их!

Оцените материал
Добавить комментарий

Капча загружается...