Подтвердить что ты не робот

Oozie создать параметр с сегодняшней датой

Как создать параметр с сегодняшней датой формата:

yyyy-mm-dd

в oozie. Я передаю эту переменную в hive script, который добавляет раздел для этой даты, я нашел функцию для создания timestamp, используя:

<param>DATE=${wf:timestamp()}</param>

который должен возвращать вывод в форме:

(YYYY-MM-DDThh:mm:ss.sZ). I.e.: 1997-07-16T19:20:30.45Z

но я получаю ошибку:

No function is mapped to the name "wf:timestamp"

Также я хочу только YYYY-MM-DD из метки времени и не существует функции подстроки, которая может дать мне первые 10 символов строки.

4b9b3361

Ответ 1

Для базовой функции EL вам не нужно добавлять wf, чтобы она выглядела так:

<param>DATE=${timestamp()}</param>

Если вы используете coordinator, то можете просто добавить новый параметр в wf. он должен выглядеть примерно так.

<action>
        <workflow>
            <app-path>${appPath}</app-path>
            <configuration>
                        <property>
                            <name>reportDate</name>
                            <value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1,
                                'DAY'), "yyyy-MM-dd")}
                            </value>
                        </property>
              </configuration>
        </workflow>
</action>

Ответ 2

Вам нужно использовать регулярное выражение для извлечения даты из функции timestamp():

replaceAll(timestamp(), "(\\d{4}-\\d{2}-\\d{2})T\\d{2}:\\d{2}Z", "$1")

По какой-то причине метка времени(), по-видимому, возвращает дату в формате ГГГГ-ММ-ДДТч: ммЗ (а не ГГГГ-ММ-ДДТчч: мм: сс.сZ, как описано), поэтому регулярное выражение соответствует приведенному выше.

Это должно работать для вас и не требовать использования координатора.