【发布时间】:2015-02-05 22:15:34
【问题描述】:
我有一个带有带有自定义 Google Analytics 活动参数(utm_source、utm_medium、utm_campaign)标记的 URL 的日志文件。我需要从 url 中提取参数并创建一个 csv 文件,其中源、媒体和活动分别出现在它们自己的列中(加上日志文件中的其他几个字段)。
这就是我开始的方式(url显然是包含url的字段):
extracted = foreach mydata GENERATE date, time,
FLATTEN(REGEX_EXTRACT_ALL(url, '.*utm_source=(.*)&utm_medium=(.*)&utm_campaign=(.*)&.*?'))
AS (source:CHARARRAY, medium:CHARARRAY, campaign:CHARARRAY);
这有效,但前提是参数以固定顺序出现(并且在 url 中没有其他参数之前)。
所以这将是例如从https://www.example.com/page.html?&utm_source=publisher&utm_medium=display&utm_campaign=standard&someotherparam 提取数据,但不从https://www.example.com/page.html?&utm_medium=display&utm_source=publisher&utm_campaign=standard&someotherparam 提取数据。由于参数顺序不一致,这对我不起作用。
我已经为由或 (|) 分隔的正则表达式尝试了多个条件,但这只给了我第一个匹配项。我还尝试在它自己的提取命令中提取每个参数,然后加入数据,但这需要很长时间并最终复制数据。
那么重写我的 pig 命令的最佳(或至少是一种可行的)方法是什么,以便它可以独立于它们出现的顺序从 url 中提取所有三个 utm 参数?
【问题讨论】:
标签: apache-pig