Заменить строковое значение на целочисленное значение в NiFi в том же столбце - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу заменить 'строковое значение ' и ввести это значение как Целочисленное значение , используя Nifi ReplaceText.Я не знаю, как этого добиться в NiFi.

Так что мой сценарий таков:

У меня будет CSV-файл с несколькими полями с целыми числами и несколькими полями в качестве общих значений String.Для полей, которые имеют строковое значение, я хочу вставить это как предопределенное целое число в мою таблицу базы данных.Например: Мой CSV выглядит следующим образом:

Поле1, Поле2, Поле3, Поле4, Поле5

1,2, abc , 45, Джон

23,12, pqr , 28, Сэм

98,75, lmn , 87, Smith

Итак, теперь в таблице MySQL тип данных Field3 и Field4 имеет тип Integer, поэтому перед вставкой CSV в базу данных я хочуИзмените строковое значение на Pre0, определенное целочисленным значением, т. Е. Для Fiel3 значение abc должно быть введено в таблицу MySQL как 0, pqr как 1, lmn как 2 и т. Д. Аналогично значение в Field4 должно быть введено в таблицу MySQLкак Джон как 10, Сэм как 20 и Смит как 30 ... поэтому мой вышеуказанный CSV должен храниться в моей базе данных следующим образом:

Поле1, Поле2, Поле3, Поле4, Поле5

1,2,0, 45 , 10

23,12, 1 , 28, 20

98,75, 2 , 87, 30

Я думаю, что могудостичь этого с ReplaceText.Но если есть какой-то лучший способ добиться этого, это было бы здорово.Потому что у моего CSV будет более 1000 столбцов, и, скажем, более 50 столбцов будут иметь строковое значение, которое мне нужно обработать и преобразовать в заранее заданное целочисленное значение.Можно ли добиться этого в NiFi?

Если да, то какие конфиги установить и какой подход будет наилучшим?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

То, что предложил @Shu, будет работать хорошо, но в случае увеличения или увеличения числа поисков, я настоятельно рекомендую использовать процессор LookupRecord и настроить его на SimpleKeyValueLookupService для начинающих, так как ваш CASEутверждение станет тяжелым и хлопотным.

Таким образом, ваш поток может быть изменен на что-то вроде

enter image description here

Чтобы узнать, как использоватьвзгляните на простой шаблон, представленный здесь: https://gist.github.com/zenfenan/37eb1e4cd0e59a63e85b0400040720b6

Полезные ссылки:

0 голосов
/ 21 декабря 2018

Использование QueryRecord процессора и настройка / включение Устройство чтения / записи Службы контроллера

  • Добавление custom sql query в качестве нового свойства для процессора

Конфигурации QueryRecord:

select Field1,Field2,
    CASE WHEN Field3='abc' THEN '0'
         WHEN Field3='pqr' THEN '1'
         WHEN Field3='lmn' THEN '2'
    end Field3,
        Field4,
    CASE WHEN Field5='John' THEN '10'
         WHEN Field5='Sam' THEN '20'
         WHEN Field5='Smith' THEN '30'
    end Field5 
from FLowfile

enter image description here

Выходной файл потока из процессора QueryRecord будет иметь желаемое значениерезультат

Field1,Field2,Field3,Field4,Field5
1,2,0,45,10
23,12,1,28,20
98,75,2,87,30

Используйте этот шаблон для ссылки на вышеуказанный поток, а QueryRecord использует процессор Apache Calcite sql parser .

...