我有一个带有用户代理字符串的表(我将其解析为 browser
, os
,和 device
列)和城市 id
的。我想计算最流行的 browser
, os
以及 device
对于每个 city
.
以下是我的尝试:
select device os, browser, name, MAX(hits) as pop from
(select uap.device, uap.os, uap.browser, name, COUNT(*) as hits
from (select * from browserdata join citydata on cityid=id) t
lateral view ParseUserAgentUDTF(UserAgent) uap as device, os, browser
GROUP BY uap.device, uap.os, uap.browser, name) t2
GROUP BY name;
所以,最里面的子查询,别名 t
只需将我的表连接到另一个Map id
去城市的路怎么走 name
s、 所以我可以看到真实的 name
s、 而不是城市 id
在输出中。
然后,名为 t2
统计复合键的数量( device
, browser
, os
, city
). 外部查询将所有内容分组 name
并提取具有最大用户数的行。
我得到的错误是:
失败:semanticexception[错误10025]:行1:7表达式不在按键“device”分组的组中
我明白这意味着什么。上面说我需要包括 device
进入 group by
,但如果我这么做了,那就不是在计算我想要什么。如何修复查询?
另外,我注意到我的一些配置单元查询在mapreduce上运行,但在tez上不运行。为什么?
2条答案
按热度按时间56lgkhnf1#
这是可行的,但我想知道是否有一种方法来优化它。。。
iqxoj9l92#
使用分析函数可以消除不必要的连接: