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 символов строки.
Ответы
Ответ 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, как описано), поэтому регулярное выражение соответствует приведенному выше.
Это должно работать для вас и не требовать использования координатора.