PIG 中带双引号的正则表达式

Regex with double quotes in PIG

我正在编写一个 pig 脚本来处理来自 sophos 代理的访问日志。

每行如下:

2015:01:13-00:00:01 AR-BADC-FAST-01 httpproxy[27983]: id="0001" severity="info" sys="SecureWeb" sub="http" name="http access" action="pass" method="GET" srcip="10.20.7.210" dstip="10.24.2.7" user="" ad_domain="" statuscode="302" cached="0" profile="REF_DefaultHTTPProfile (Default Web Filter Profile)" filteraction="REF_DefaultHTTPCFFAction (Default content filter action)" size="0" request="0x9ac68d0" url="http://www.google.com" exceptions="av,auth,content,url,ssl,certcheck,certdate,mime,cache,fileextension" error="" authtime="0" dnstime="1" cattime="0" avscantime="0" fullreqtime="239428" device="0" auth="0"

所以我设法在 Java 中使用 MapReduce 做到了,使用以下正则表达式:\"([^\"]*)\" 获取引号之间的值,然后对其进行处理。现在我想对猪做同样的事情,但我无法将正则表达式应用于每一行。

我在做:

input = load './http.log' as (line : chararray);
splt = foreach input generate FLATTEN(REGEX_EXTRACT_ALL(line,'(\"([^\"]*)\")'));
dump splt;

转储的结果是:().

我在使用 REGEX_EXTRACT_ALL 时缺少某些东西,或者我必须以不同的方式转义正则表达式的某些字符?

谢谢!

我设法用不同的方法提取了值,因为我只想要该行的一些字段。

为了得到我正在做的值:

splt = FOREACH A GENERATE
    FLATTEN(REGEX_EXTRACT(line,'.*url="([^"]*)".*',1)) AS url,
    FLATTEN(REGEX_EXTRACT(line,'.*fullreqtime="([^"]*)".*',1)) AS duration,
    FLATTEN(REGEX_EXTRACT(line,'.*size="([^"]*)".*',1)) AS bytes;

然后我可以继续脚本的其余部分