先看一下示例吧。
有这样一些日志,记录了url的一些信息。我现在需要统计出这些url中包含了-xianlu,或者-ziyouxing等的
出发到达城市的信息,并根据这个信息进行groupby来找出该线路被访问的次数。
http://test1.anyoneking.com/beijing-tianjin-xianlu.html
http://test1.anyoneking.com/beijing-badaling-xianlu.html
http://test1.anyoneking.com/beijing-tianjin-ziyouxing.html
http://test1.anyoneking.com/about.html
http://test1.anyoneking.com/link.html
http://test1.anyoneking.com/ab-c-link.html
这样,我们可以看一下,如果要针对-xianlu进行统计
我期望得到的结果是:
beijing-tianjin 1
beijing-badaling 1
beijing-tianjin 1
主要靠 Lateral View来实现。
用于UDTF(user-defined table generating functions)中将行转成列,例如explode().
这样我们可以通过以下方式来实现临时表:
lateral view explode(split(‘-xianlu:-ziyouxing’,':’)) t as charidx
这样,我们就可以将原有的sql进行特殊处理,来简化逻辑,同时减少了对pvlog表的反复遍历,
因为在上面的处理方式中,如果有2种类型是可以的,如果类型越来越多,我们将面临资源的重复
调度。
总结:通过小技巧进行行列转换,将原表扩展为2倍,通过一个HiveQL实现原来两次查询的结果。