2017-01-31 4 views
0

ブタのラテンスクリプトを使用し、正規表現を使用してログを解析しようとしましたが、二重引用符を一致させている間にエラーを返します。 " ERROR 1200: ログフォーマット:Apacheブタ、正規表現を使用して結合ログを解析する

118.102.255.50 - - [17/Oct/2014:00:00:29 -0400] "GET /favicon.ico HTTP/1.1" 200 20 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36"

ながら、私が書いたスクリプト:

test = LOAD '/pigdata/log' as (line:chararray); 
 
log = FOREACH test GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,'^(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+.(\\S+\\s+\\S+).\\s+\"(\\S+)\\s+(.+?)\\s+(HTTP[^\"]+)\"\\s+(\\S+)\\s+(\\S+)\\s+\"([^\"]*)\"\\s+\"(.*)\"$')) AS (address_ip: chararray, logname: chararray, user: chararray, timestamp: chararray, method: chararray, uri: chararray, proto: chararray, status: int, bytes: int, referer: chararray, userAgent: chararray); 
 

 
dump log;

答えて

0

豚は、Javaの正規表現を使用しているので、あなたはこのように\\"をエスケープする必要があります。

log = FOREACH test GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,'^(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+.(\\S+\\s+\\S+).\\s+\\"(\\S+)\\s+(.+?)\\s+(HTTP[^"]+)\\"\\s+(\\S+)\\s+(\\S+)\\s+\\"([^"]*)\\"\\s+\\"(.*)\\"$')) AS (address_ip: chararray, logname: chararray, user: chararray, timestamp: chararray, method: chararray, uri: chararray, proto: chararray, status: int, bytes: int, referer: chararray, userAgent: chararray); 
+0

こんにちは、おかげで、問題は解決しました。私はちょうど引用符のためのバックスラッシュを削除 "とそれは動作し、それはPIGが必要としない、バックスラッシュを削除するように見えます。 –

関連する問題