【发布时间】:2015-08-31 15:55:00
【问题描述】:
我不擅长正则表达式。我正在尝试将自定义日志行捕获到 Hive 表中。
到目前为止,我可以使用以下内容捕获基本条目:
CREATE EXTERNAL TABLE IF NOT EXISTS elb_logs_v2_9 (
ResponseCode STRING,
Timestamp STRING,
ResponseTime DOUBLE,
RemoteIP STRING,
URL STRING,
UserAgent STRING,
Referer STRING,
Domain STRING,
Version INT
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (.*) \"(.*)\" \"(.*)\" \"(.*)\" \"(.*)\" (.*)$"
) LOCATION 's3://my-bucket/logfiles/';
这是一个示例日志文件:
204 1434401743 365 XX.XXX.XXX.XXX "/tra.ck?p=1234&a=5432&evt=view&r=1434401750625285" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" "https://referer.org/page.html" "metric.mydomain.org" 7
204 1434401743 269 XX.XXX.XXX.XXX "/tra.ck?p=1234&a=5432&evt=renderTime&v[]=10&r=1434401750650240" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" "https://referer.org/page.html" "metric.mydomain.org" 7
基本结构是:
ResponseCode Timestamp ResponseTimeMS RemoteIP QueryString UserAgent Referer Domain Version
如何使 RegEx 更进一步,并根据 URI 中的值创建列?比如说p 和a 值的列,以及用于存储view 和renderTime 的eventType 等?
【问题讨论】: