Pig中GetYear()的日期格式

时间:2014-04-17 13:47:59

标签: date apache-pig

我正在尝试使用内置于猪的日期功能 输入文件包含yyyy-mm-dd hh:mi:ss格式的日期 我正在尝试使用以下代码:

row = foreach log generate FLATTEN(REGEX_EXTRACT_ALL (pattern) AS (date_time : datetime, other columns);

final_data = foreach row {
  yyyy = (chararray)GetYear(date_time);
  mm = (chararray)GetMonth(date_time);
  dd = (chararray)GetDay(date_time);
  hh = (chararray)GetHour(date_time);
  mi = (chararray)GetMinute(date_time);
  ss = (chararray)GetSecond(date_time);
  generate CONCAT(CONCAT(CONCAT(yyyy, '-'), CONCAT(mm, '-')),dd) as myDate;
  }

但是我收到了错误:

 ERROR 1066: Unable to open iterator for alias final_data. Backend error : java.lang.String cannot be cast to org.joda.time.DateTime

我正在尝试使用以下方法:Formatting Date in Generate Statement

预期的格式是什么?

1 个答案:

答案 0 :(得分:3)

REGEX_EXTRACT_ALL接受一个字符串并返回一个带有提取字符串的元组,即无法提取到DateTime字段。
您可以在加载的日期字符串上使用ToDate UDF:
E.g:

cat data.txt
2014-03-11 13:44:11
2014-02-22 10:44:11

A = load 'data.txt' as (in:chararray);
B = foreach A generate ToDate(in,'yyyy-MM-dd HH:mm:ss') as (dt:DateTime);
C = foreach B {
      year = (chararray)GetYear(dt);
      month = (chararray)GetMonth(dt);
      day = (chararray)GetDay(dt);
      generate CONCAT(CONCAT(CONCAT(year, ''), CONCAT(month, '-')),day) as myDate;
};
dump M;
(2014-3-11)
(2014-2-22)