LanguageManual SubQueries の「Subqueries in the WHERE Clause」を読むと、WHERE の IN 句でもサブクエリが使えそうに書いているんだけど、どうも Treasure Data ではうまくいかずに悩んでいた。
このドキュメントだと Hive 0.13 で対応したような書き方なので、TD での Hive のバージョンは違うのかな。。。
いろいろググった結果、「ほぼやけくそHive Hacks」に
Hiveではサブクエリを持つINメソッドは使えないため、LEFT SEMI JOINを使用して同等の処理を実現する。
SQL
SELCT a.id, a.name FROM movie_a WHERE a.id IN (SELECT b.movieid FROM score b);HiveQL
SELECT a.id, a.name FROM movie_a LEFT SEMI JOIN score b ON a.id = b.movie_id;
のように書かれていたので、こっち方面を試してみよう。
【追記】
「Hive Built-in Operators」に「supported by Hive 0.10.0 (CDH 4.3.1)」と書かれていた。