oozie使用今天日期创建参数

时间:2014-05-26 20:46:11

标签: date oozie oozie-coordinator

如何使用格式的今天日期创建参数:

yyyy-mm-dd
在oozie中。我将此变量传递给hive脚本,该脚本正在添加该日期的分区,我找到了使用以下函数创建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个字符串字符。

2 个答案:

答案 0 :(得分:8)

对于基本的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>

答案 1 :(得分:0)

您需要使用正则表达式从timestamp()函数中提取日期:

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

由于某种原因,timestamp()似乎以YYYY-MM-DDThh:mmZ的格式返回日期(而不是如上所述的YYYY-MM-DDThh:mm:ss.sZ),因此正则表达式如上所述。 / p>

这应该对您有用,并且不需要使用协调器。