如何将时间戳与pig生成的输出连接起来。我需要将pig生成的输出保存到另一个带有时间戳的文件夹中,以便将其用作历史数据以供将来使用。我试图使用CurrentTime(),但它给了我一个这样的错误:
2015-03-31 19:29:58,249 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <file script.pig, line 1> Cannot expand macro 'CurrentTime'. Reason: Macro must be defined before expansion.
如何定义此宏?
以下是代码:
A = load '/user/root/b2.out';
X = FILTER A BY ($2 == 'Error') OR ($2=='Info') OR ($2=='Warning') OR ($2=='Critical');
D = FOREACH X GENERATE $0,$2,$4,$6,$8;
store D into CONCAT('/user/root/ELABD/finalout',CurrentTime());
答案 0 :(得分:1)
CONCAT
只能在关系(aka foreach
语句)中使用,因此您不能使用它来构造输出文件位置。
我认为这里有两种可能的解决方案:
在您的猪脚本中使用%declare
语句在bash中使用date
之类的内容来获取当前时间并将其用作参数,例如
%declare DATETIME `date +%Y-%m-%dT%H-%M-%S`
...
store D into '/user/root/ELABD/finalout/$DATETIME';
或者使用类似Oozie之类的东西来安排您的猪作业,让Oozie根据日期/时间生成您的输出位置。