У меня есть таблица со строками агента пользователя (которую я разбираю в столбцы 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;
Итак, самый внутренний подзапрос,aliased t
просто присоединяет мою таблицу к другой таблице, которая отображает id
в город name
s, поэтому я могу видеть фактические name
s вместо city id
в выходных данных.
Затем подзапрос с именем t2
подсчитывает количество составных ключей (device
, browser
, os
, city
).А внешний запрос группирует все в name
окнах и извлекает строку с максимальным количеством пользователей.
Я получаю следующую ошибку:
FAILED: SemanticException [Ошибка 10025]: Строка 1: 7 Выражение отсутствует в ключе GROUP BY 'устройство'
Я понимаю, что это значит.Он говорит, что мне нужно включить device
в group by
, но если я это сделаю, то он не будет вычислять то, что я хочу.Как мне исправить мой запрос?
Кроме того, я заметил, что некоторые из моих запросов к кустам выполняются на mapreduce, но не на tez.Почему это?