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 子句等中引用
我想用表 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 子句等中引用