我正在尝试使用内置于猪的日期功能
输入文件包含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
预期的格式是什么?
答案 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)