Зацикливание значений атрибутов для выполнения SQL в Nifi - PullRequest
0 голосов
/ 01 ноября 2018

Я хотел бы знать, как мне выполнить следующий сценарий использования в Nifi Flow:

Я хотел бы выполнить SQL-запрос для диапазона дат по циклу. Диапазон дат предоставляется из списка значений атрибутов.

Например: если мой список атрибутов: 2013-01-01 2013-02-01 2013-03-01, я бы хотел выполнить операцию SQL над циклом, такую ​​что:

 select * from where startdate>=2013-01-01 and enddate<2013-02-01

с последующим:

 select * from where startdate>=2013-02-01 and enddate<2013-03-01

Поэтому, для того же, я примерно знаю идею, но не могу реализовать конкретно:

UpdateAttribute (содержит список значений дат) -> SplitText -> RouteOnAttribute -> ExecuteSQL

Спасибо

1 Ответ

0 голосов
/ 01 ноября 2018

В NiFi 1.8.0 вы можете использовать для этого DuplicateFlowFile (через NIFI-5454 ). Вы можете начать с UpdateAttribute, чтобы добавить количество выделенных значений в ваш список (давайте предположим, что это атрибут с именем datelist), возможно, установив list.count в

${allDelineatedValues(${datelist}, " "):count()}

Затем в DuplicateFlowFile вы можете установить количество копий на ${list.count:minus(1)}. Каждый файл потока в нисходящем направлении будет иметь набор атрибутов copy.index (оригинал с индексом 0), так что вы можете использовать его в ReplaceText вместе с getDelimitedValue(), возможно, установив для содержимого следующее:

select * from myTable where 
  startdate >= ${datelist:getDelimitedField(${copy.index:plus(1)})} and 
  enddate < ${datelist:getDelimitedField(${copy.index:plus(2)})}
...