如何编写子查询并在Hive中使用"In"子句

use*_*856 17 hadoop hive

我怎样才能在Hive中使用In子句我想在Hive中编写类似的东西从y中选择x,其中yz in(从y中选择不同的z)顺序x; 但是我没有找到任何方法这样做..我在Hive 0.7中尝试了In子句它抛出了错误,我尝试了Find_in_Set ..使用find_in_set(yz,subquery)..但是工作失败了.

我想在Hive上做这个.如果有人知道如何在Hive中这样做,请帮助我..

感谢和问候,Atul

www*_*www 36

您可以使用半连接(https://cwiki.apache.org/Hive/languagemanual-joins.html):

LEFT SEMI JOIN以有效的方式实现相关的IN/EXISTS子查询语义.由于Hive当前不支持IN/EXISTS子查询,因此您可以使用LEFT SEMI JOIN重写查询.使用LEFT SEMI JOIN的限制是右侧表只应在连接条件(ON子句)中引用,而不能在WHERE-或SELECT子句中引用.

SELECT a.key, a.value
  FROM a
  WHERE a.key in
   (SELECT b.key
    FROM B);
Run Code Online (Sandbox Code Playgroud)

可以改写为:

   SELECT a.key, a.val
   FROM a LEFT SEMI JOIN b on (a.key = b.key)
Run Code Online (Sandbox Code Playgroud)


小智 18

Hive 0.13现在支持WHERE子句中的IN/EXISTS ..问题https://issues.apache.org/jira/browse/HIVE-784已经解决了4年后:)


Lui*_* R. 7

根据https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select:

"Hive不支持WHERE子句中的IN,EXISTS或子查询."

您可能需要查看:https: //issues.apache.org/jira/browse/HIVE-801

https://issues.apache.org/jira/browse/HIVE-1799

  • Hive现在支持0.13 (14认同)