将文本连接到猪的列

时间:2014-06-19 00:12:41

标签: date apache-pig concat

我有一个日期列和一个月列,并希望将年份连接到它并将其以CHARARRAY格式与连字符一起存储。 所以我有:month:CHARARRAY, day:CHARARRAY

含义,例如,如果day列包含'03'且month列包含'04',我想创建一个包含以下内容的日期列:'2014-04-03'

这是我的代码:

CONCAT('2014-',month,'-',day) as date;

它不起作用,我不太确定如何将其他文本连接到列上。 我想请注意,我不确定转换为日期格式对我来说是一个选项。我希望将其保留为CHARARRAY格式,因为我想加入另一个以CHARARRAY格式存储日期的文件。

1 个答案:

答案 0 :(得分:4)

假设这是名为dateExample.csv的数据文件:

     Surender,02,03,1988
     Raja,12,09,1998
     Raj,05,10,1986

这是猪的脚本:

   A = LOAD 'dateExample.csv' USING PigStorage(',') AS(name:chararray,day:chararray,month:long,year:chararray);
   X = FOREACH A GENERATE CONCAT((chararray)day,CONCAT('-',CONCAT((chararray)month,CONCAT('-',(chararray)year))));
   dump X;

您将获得所需的输出:

   (02-3-1988)
   (12-9-1998)
   (05-10-1986)

说明:

当我们尝试这样结束时:

   X = FOREACH A GENERATE CONCAT(day,CONCAT('-',CONCAT(month,CONCAT('-',year))));

我们得到以下例外:

  ERROR 1045: 
  <line 2, column 45> Could not infer the matching function for org.apache.pig.builtin.CONCAT as multiple or none of them fit. Please use an explicit cast.

所以我们需要明确地将日,月和年值转换为chararray并且它有效!!