NIFI: создание дат между двумя датами с использованием процессора ExecuteScript - PullRequest
0 голосов
/ 23 ноября 2018

В настоящее время я пытаюсь получить список всех дат в файле потока между двумя датами, указанными с помощью ExecuteScript.Но я как-то получаю пустой атрибут.

Ниже приведен мой Groovy-код ExecuteScript для указанной переменной startdate и enddate:

flowFile = session.get();
if(!flowFile)
    return;

DATE_FORMAT = 'dd-MM-yyyy';
startDate = Date.parse(DATE_FORMAT, flowFile.getAttribute("startdate"));
endDate = Date.parse(DATE_FORMAT, flowFile.getAttribute("enddate"));
allDates = "";

Calendar calendar = Calendar.getInstance();
Set allDates = new LinkedHashSet();
numbers = TimeUnit.MILLISECONDS.toDays(Math.abs(endDate - startDate))


for (int i = 1; i <= numbers; i++) {
calendar.setTime( startDate );
calendar.add( Calendar.DATE, i );
}

days.each {
    day -> allDates = allDates + day + "\n";
}

flowFile = session.putAttribute(flowFile,"allDates", allDates );
session.transfer(flowFile,REL_SUCCESS)

В моей исходящей очереди я нахожуатрибут allDates пусто Строка

Что не так с моим кодом?

1 Ответ

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

у вас есть проблемы в вашем коде

, например, переменная allDates, объявленная дважды в двух разных областях:

global (без типа или определения)

allDates = "";

и локальный (с типом)

Set allDates = new LinkedHashSet();

, после этого трудно предсказать, какой из них используется

, и на самом деле код может быть проще в groovy:

def DATE_FORMAT = 'dd-MM-yyyy';
def startDate = Date.parse(DATE_FORMAT, '01-11-1970');
def endDate = Date.parse(DATE_FORMAT, '09-11-1970');
def allDates = ""

for (def d = startDate; d<=endDate; d++){
    allDates+=d.format(DATE_FORMAT)+"\n"
}
println allDates

обратите внимание, что это исполняемый код, поэтому вы можете использовать groovyconsole или любую IDE для его отладки перед интеграцией в nifi

, потому что вам нужно обернуть его обработкой потокового файла перед использованием в nifi

...