10

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

yyyy-mm-dd

在oozie。我将此变量传递给 hive 脚本,该脚本正在为该日期添加分区,我找到了创建时间戳的函数:

<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 个字符。

4

2 回答 2

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>
于 2014-06-02T20:13:40.050 回答
2

您需要使用正则表达式从 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),所以这就是正则表达式如上所述的原因。

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

于 2019-05-09T02:19:54.033 回答