7

Hiveでサブ選択を行うにはどうすればよいですか?私にはそれほど明白ではない本当に明白な間違いを犯しているかもしれないと思います...

私が受け取っているエラー:FAILED: Parse Error: line 4:8 cannot recognize input 'SELECT' in expression specification

これが私の3つのソーステーブルです。

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はURLごとの上位1つの「イベント」、列5はそのURLにアクセスするための上位1つのREMOTE_ADDRESSです。(列も前の列の「カウント」です。)

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;

どうもありがとう :)

4

2 に答える 2

10

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)

HiveでのJOINの使用の詳細については、https: //cwiki.apache.org/confluence/display/Hive/LanguageManual+Joinsを確認してください。

于 2011-06-17T22:16:17.270 に答える
0

GroupBy操作はありません。Countは集計です。count(*)のみがGroupBy句なしで機能します。

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+GroupBy

于 2018-02-19T11:01:18.573 に答える