【问题标题】:Apache Pig: Extra query parameters from web logApache Pig:来自网络日志的额外查询参数
【发布时间】:2011-07-15 08:59:06
【问题描述】:

我正在分析 AWS CloudFront 访问日志。

我有加载文件行的代码

    raw_logs2 =LOAD 'file:///home/ec2-user/ENWRZAC68E00M.2011-02-28-18.72jA8eGh'
  USING PigStorage('\t')
  AS (
    date: chararray, time: chararray, x_edge_location: chararray, sc_bytes: int,
    c_ip: chararray, cs_method: chararray, cs_host: chararray, cs_uri_stem: chararray,
    sc_status: chararray, cs_referer: chararray, cs_user_agent:chararray, cs_uri_query: chararray
  );

现在我正在尝试解析查询字符串参数(名称/值对):

p=searchresults&s=homesforsale&gad=&gci=FOUNTAIN%2520VALLEY&gst=CA&gzi=&k=fountainvalleyca&ts=1298918206&

如何在我的 raw_logs2 表中为查询字符串中的 p、s 和 gci 值添加额外的列?

【问题讨论】:

    标签: apache-pig amazon-cloudfront


    【解决方案1】:

    一种快速的方法是使用REGEX_EXTRACT_ALL:

    raw_logs = 
      GENERATE
        *, 
        FLATTEN(REGEX_EXTRACT_ALL(cs_uri_query, 'p=(.+?)&s=(.+?)&.+?gci=(.+?)&.+?')) 
          AS (p:CHARARRAY, s:CHARARRAY, gci:CHARARRAY);`
    

    【讨论】:

    • 感谢罗曼的回复。我扩展了示例并得到了这个:code raw_logs = GENERATE *, FLATTEN(REGEX_EXTRACT_ALL(cs_uri_query, 'p=(.+?)&s=(.+?)&w=(.+?)&h=(.+ ?)&ad=(.+?)&gad=(.+?)&gci=(.+?)&gst=(.+?)&gzi=(.+?)&kw=(.+?)&.+?') ) AS (p:CHARARRAY, s:CHARARRAY, w:CHARARRAY, h:CHARARRAY, ad:CHARARRAY, gad:CHARARRAY, gci:CHARARRAY, gst:CHARARRAY, gzi:CHARARRAY, kw:CHARARRAY);/code 我正在使用pig 0.6.0 并得到一个它生成的错误,它期望其他东西。当我从日志文件加载 raw_logs2 时,调用如何知道 cs_uri_query 来自。
    • 我更新到 0.8.0 并进行了更改,在它之前添加了一个 FOREACH,效果很好。谢谢。
    猜你喜欢
    • 2010-10-09
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多