Запрос Hadoop Hive: Multi-join
как я могу сделать подвыборы в Hive? Думаю, я совершаю очевидную ошибку, которая для меня не так очевидна...
ошибка, которую я получаю:FAILED: Parse Error: line 4:8 cannot recognize input 'SELECT' in expression specification
вот мои три исходные таблицы:
aaa_hit -> [SESSION_KEY, HIT_KEY, URL]
aaa_event-> [SESSION_KEY,HIT_KEY,EVENT_ID]
aaa_session->[SESSION_KEY,REMOTE_ADDRESS]
...и то, что я хочу сделать, это вставить результат в таблицу результат такой:
result -> [url, num_url, event_id, num_event_id, remote_address, num_remote_address]
...где столбец 1-URL, столбец 3-верхнее 1 "Событие" на URL, а столбец 5-верхний 1 REMOTE_ADDRESS для посещения этого URL. (Даже столбцы "граф"с предыдущего столбца.)
Soooooo... что я сделал не так?
INSERT OVERWRITE TABLE result2
SELECT url,
COUNT(url) AS access_url,
(SELECT events.event_id as evt,
COUNT(events.event_id) as access_evt
FROM aaa_event events
LEFT OUTER JOIN aaa_hit hits
ON ( events.hit_key = hit_key )
ORDER BY access_evt DESC LIMIT 1),
(SELECT sessions.remote_address as remote_address,
COUNT(sessions.remote_address) as access_addr
FROM aaa_session sessions
RIGHT OUTER JOIN aaa_hit hits
ON ( sessions.session_key = session_key )
ORDER BY access_addr DESC LIMIT 1)
FROM aaa_hit
ORDER BY access_url DESC;
большое спасибо :)
2 ответов
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries
Hive поддерживает подзапросы только в предложение from.
вы не можете использовать подзапрос, как "столбец" в Hive.
чтобы обойти это, вы захотите использовать этот подзапрос в предложении FROM и JOIN
к нему. (ниже не будет работать, но это идея)
SELECT url,
COUNT(url) AS access_url,
t2.col1, t2.col2 ...
FROM aaa_hit
JOIN (SELECT events.event_id as evt,
COUNT(events.event_id) as access_evt
FROM aaa_event events
LEFT OUTER JOIN aaa_hit hits
ON ( events.hit_key = hit_key )
ORDER BY access_evt DESC LIMIT 1),
(SELECT sessions.remote_address as remote_address,
COUNT(sessions.remote_address) as access_addr
FROM aaa_session sessions
RIGHT OUTER JOIN aaa_hit hits
ON ( sessions.session_key = session_key )
ORDER BY access_addr DESC LIMIT 1) t2
ON (aaa_hit.THING = t2.THING)
проверить https://cwiki.apache.org/confluence/display/Hive/LanguageManual + присоединяется для получения дополнительной информации об использовании присоединяется в Hive.
У вас нет операции GroupBy, Count является агрегацией. Только count (*) работает без предложения GroupBy.
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+GroupBy