我有一个包含用户代理字符串(我将其解析为browser
、os
和device
列)和 cityid
的表。我要计算最流行的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
只是将我的表连接到另一个将id
's 映射到 city的表上name
,所以我可以在输出中看到实际name
的 s,而不是 city id
。
然后,名为的子查询t2
计算复合键(device
, browser
, os
, city
)的数量。外部查询将所有内容分组到name
窗口中并提取具有最大用户数的行。
我得到的错误是这样的:
失败:SemanticException [错误 10025]:第 1:7 行表达式不在 GROUP BY 键“设备”中
我明白这意味着什么。它说我需要包含device
到group by
中,但如果我这样做,那么它将不会计算我想要的。如何修复我的查询?
另外,我注意到我的一些 hive 查询在 mapreduce 上运行,但不在 tez 上运行。这是为什么?