【问题标题】:EMR Hive Regex QueryString valuesEMR Hive 正则表达式 QueryString 值
【发布时间】: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 等?

【问题讨论】:

    标签: sql regex hadoop


    【解决方案1】:

    如果您可以假设请求始终采用相同格式且参数顺序正确,这将起作用。

    ^([0-9]\d*) ([0-9]\d*) ([0-9]\d*) ([0-9\.X]+) "((?:.*?)p=(\d+)&a=(\d+)&evt=([^&]+).*?)" "([^"]+)" "([^"]+)" "([^"]+)" ([0-9]\d*)$
    

    您可以在这里进行更多编辑和使用:https://regex101.com/r/gS3nO1/2

    (编辑)我在这里假设第 4 项是 IP,因此您可以从实际的正则表达式中删除 X。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 2023-03-17
      • 2020-01-22
      • 2019-06-28
      • 2015-04-11
      相关资源
      最近更新 更多