在猪,我有一个声明,基本上附加日期到我的生成值。在生成语句格式化日期
Data = FOREACH Input GENERATE (CurrentTime()),FLATTEN(group), COUNT(guid)oas Cnt;
该输出给出了ISO8601中的日期2013-05-25T09:01:38.914-04:00
。
我该如何做到这一点"YYYY-MM-DD"
?
在猪,我有一个声明,基本上附加日期到我的生成值。在生成语句格式化日期
Data = FOREACH Input GENERATE (CurrentTime()),FLATTEN(group), COUNT(guid)oas Cnt;
该输出给出了ISO8601中的日期2013-05-25T09:01:38.914-04:00
。
我该如何做到这一点"YYYY-MM-DD"
?
您有几种选择:
与猪的功能将它转换:
如:
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,其中您将DateTime对象转换为Joda-Time库的适当格式。
最简单的就是在脚本的开头声明日期。
如果您使用的猪0.12或更高版本,可以使用 的ToString(CURRENTTIME(), 'YYYY-MM-DD')
你可以使用任何DateTime类型CURRENTTIME()而不是
有关日期时间格式,请参阅http://pig.apache.org/docs/r0.12.0/func.html#to-string。
嘿洛兰德,谢谢你的回复。事实上,我已经尝试过将日期作为参数方法。但今天的最终产出显示了1983年,而不是2013-05-25。任何想法为什么?同样的输出参数可以正常工作,同时将其分配给存储文件的名称。例如:STORE Output INTO'Outputs $ CURR_DATE正常工作,并显示为Output2013-05-25。 – JohnMeek
这是因为如果你做减法:2013-5-25你会得到1983.这就是为什么我使用引号(''$ CURR_DATE''),所以它将被作为chararray而不是int来处理。 –
woks perfect.thanks。 – JohnMeek