【发布时间】:2013-10-22 08:21:48
【问题描述】:
我有日志文件,
116.48.29.143 - - [01/Oct/2013:20:28:21 +0530] "GET /test.php HTTP/1.1" 200 749 "-" "Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.1;SV1;.NET CLR 1.1.4322)"
145.89.87.211 - - [01/Oct/2013:20:28:21 +0530] "GET /test.php HTTP/1.1" 200 613 "-" "Mozilla/4.0 (兼容; MSIE 6.0; Windows NT 5.1;SV1;.NET CLR 1.1.4322)"
REGISTER file:/home/hadoop/lib/pig/piggybank.jar;
DEFINE EXTRACT org.apache.pig.piggybank.evaluation.string.EXTRACT();
DEFINE CustomFormatToISOorg.apache.pig.piggybank.evaluation.datetime.convert.CustomFormatToISO();
DEFINE ISOToUnix org.apache.pig.piggybank.evaluation.datetime.convert.ISOToUnix();
DEFINE DATE_TIME org.apache.pig.piggybank.evaluation.datetime.DATE_TIME();
DEFINE FORMAT_DT org.apache.pig.piggybank.evaluation.datetime.FORMAT_DT();
DEFINE FORMAT org.apache.pig.piggybank.evaluation.string.FORMAT();
A = LOAD 'input' USING TextLoader AS (line:chararray);
B = FOREACH A GENERATE FLATTEN (REGEX_EXTRACT_ALL(line,'^(\\S+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] "(.+?)" (\\S+) (\\S+) "([^"]*)" "([^"]*)"') ) AS (remoteAddr:chararray, remoteLogname: chararray, user: chararray, time: chararray, request: chararray, status: int, bytes_string: chararray, referrer: chararray, browser: chararray);
我的问题是提取分钟,我的意思是从 [01/Oct/2013:20:28:21 +0530] 我只需要得到 28:21
我怎样才能提取它??
【问题讨论】:
-
提示:标准库中有一个
STRSPLITUDF,您需要的值似乎由两边的单个空格分隔。 -
好的,我会试试的,谢谢。我的总体目标是...我需要获取时间戳之间的差异。我可以这样做吗?
-
如果您需要区别,为什么要删除日期?
-
我的意思是我需要每分钟获取日志..我提供了示例日志,我每秒获取日志,现在我需要知道每秒的日志。
标签: hadoop apache-pig