Как получить первую дату каждого месяца на основе заданного диапазона года в потоке Nifi - PullRequest
0 голосов
/ 31 октября 2018

Я хотел бы знать, что может быть наилучшим способом получения значений начальной даты для каждого месяца на основе диапазона дат.

Например: если мне указан годовой диапазон 2015-11-10 and 2018-01-15 (формат ГГГГ-мм-дд). Тогда я хотел бы извлечь следующие даты:

2015-12-01
2016-01-01
.
.
2018-01-01

1 Ответ

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

Вы можете попытаться использовать этот поток для генерации первого дня каждого месяца в указанном диапазоне дат.

Общий поток

enter image description here

Шаг 1 Настройка: запуск

enter image description here

Шаг 2 Настройка: настройка диапазона дат

На этом шаге укажите даты начала и окончания в качестве параметров конфигурации. enter image description here

Шаг 3 Настройка: создание первых дат для месяцев

При этом используется скрипт Groovy, который приведен ниже. enter image description here

Groovy скрипт

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

DATE_FORMAT = 'yyyy-MM-dd';
startDate = Date.parse(DATE_FORMAT, flowFile.getAttribute("start_date"));
endDate = Date.parse(DATE_FORMAT, flowFile.getAttribute("end_date"));
allFirstDates = "";

Calendar calendar = Calendar.getInstance();
Set firstDaysOfMonths = new LinkedHashSet();

for (int i = 0; i <= endDate-startDate; i++) {
    calendar.setTime(startDate.plus(i));
    calendar.set(Calendar.DAY_OF_MONTH, 1);
    firstDayOfMonth = calendar.getTime();
    if (firstDayOfMonth.compareTo(startDate) >= 0) {
        firstDaysOfMonths.add(calendar.getTime().format(DATE_FORMAT));
    }
}

firstDaysOfMonths.each {
    firstDayOfMonth -> allFirstDates = allFirstDates + firstDayOfMonth + "\n";
}

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

Шаг 4 Конфигурация: Просмотр результата

enter image description here

Выход прогона:

При запуске потока атрибут all_first_dates будет заполняться первыми датами каждого месяца в диапазоне дат.

enter image description here

...