生成语句中的格式化日期

时间:2013-05-25 13:05:56

标签: apache-pig

在Pig中,我有一个声明,它基本上将日期附加到我生成的值。

Data = FOREACH Input GENERATE (CurrentTime()),FLATTEN(group), COUNT(guid)oas Cnt;

输出为我提供了ISO8601中的日期2013-05-25T09:01:38.914-04:00

如何将其作为"YYYY-MM-DD"

2 个答案:

答案 0 :(得分:14)

您有几种选择:

使用Pig函数转换它:
E.g:

A = load ...
B = foreach A {
  currTime = CurrentTime();
  year = (chararray)GetYear(currTime);
  month = (chararray)GetMonth(currTime);
  day = (chararray)GetDay(currTime);
  generate CONCAT(CONCAT(CONCAT(year, '-'), CONCAT(month, '-')),day) as myDate;
}

或者将日期作为参数传递给脚本:

pig -f script.pig -param CURR_DATE=`date +%Y-%m-%d`

或者在脚本中声明它:

%declare CURR_DATE `date +%Y-%m-%d`;

然后在脚本中将变量称为'$CURR_DATE'

您还可以创建一个已修改的 CurrentTime UDF,在其中使用Joda-Time库将DateTime对象转换为适当的格式。

最简单的方法是在脚本开头声明日期。

答案 1 :(得分:12)

如果您使用Pig 0.12或更高版本,则可以使用 的ToString(currentTime的(),' YYYY-MM-DD&#39)

您可以使用任何日期时间类型而不是CurrentTime()

有关日期时间格式,请参阅http://pig.apache.org/docs/r0.12.0/func.html#to-string