我有一个带有URL的日志文件,这些URL用自定义的google analytics campaign参数(utm\u source、utm\u medium、utm\u campaign)标记。我需要从url中提取参数并创建一个csv文件,其中source、medium和campaign分别出现在它们自己的列中(加上日志文件中的其他几个字段)。
我就是这样开始的(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. 因为参数顺序不一致,所以这对我不起作用。
我尝试了多个regexp条件,用or(|)分隔,但这只给了我第一个匹配。我还尝试在它自己的extract命令中提取每个参数,然后加入数据,但这花费了很长时间,最终复制了数据。
那么,重写pig命令的最佳方法(或者至少是可行的)是什么呢?这样它就可以从url中提取所有三个utm参数,而不受它们出现的顺序的影响?
1条答案
按热度按时间hivapdat1#
我只要三个
REGEX_ECTRACT
:虽然你可能只用一个正则表达式就可以做到,但我发现这个更简单,更易读。