在PIG中使用Timestamp连接文件

时间:2015-03-31 14:04:28

标签: hadoop apache-pig hue

如何将时间戳与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());

1 个答案:

答案 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根据日期/时间生成您的输出位置。