Hive QL - 子集行与另一个 table 中的键

Hive QL - Subset rows with keys in another table

我想用表 B 中出现的键对表 A 的所有行进行子集化。

表A -

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

表B -

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

我想 select 表 A 中的所有元素,其键出现在表 B 中。

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

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

还有其他方法吗?

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

请注意,table 在 Idn 中都不需要是唯一的。

类似 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 的限制是右侧 table 只能在连接条件(ON 子句)中引用,而不能在 WHERE- 或 SELECT 子句等中引用