Hive QL - 在另一个表中使用键的子集行

时间:2015-01-08 14:28:38

标签: hadoop hive

我希望使用TableB中显示的键对TableA的所有行进行子集化。

表A -

Idn   X  Y ...
 12   *  *
 13   *  *
 14   *  *

表B -

Idn   A B C ...
 12   * * *
 12   * * *
 14   * * *

我想选择TableA中的所有元素,其中键出现在TableB中。

以下SQL查询在Hive中不起作用 -

select * from TableA where Idn in (select distinct Idn from TableB) a;

我还有其他办法吗?

可以在一个查询中完成吗?

请注意,这两个表在Idn中都不一定是唯一的。

1 个答案:

答案 0 :(得分:1)

SEMI JOIN之类的东西应该这样做:

SELECT * FROM TableA LEFT SEMI JOIN TableB on (TableA.Idn = TableB.Idn)

LEFT SEMI JOIN以有效的方式实现不相关的IN / EXISTS子查询语义。从Hive 0.13开始,使用子查询支持IN / NOT IN / EXISTS / NOT EXISTS运算符,因此大多数JOIN不再需要手动执行。使用LEFT SEMI JOIN的限制是右侧表只应在连接条件(ON子句)中引用,而不能在WHERE-或SELECT子句等中引用。