在 impala 中找出 table a 是否是 table b 的子集的最佳方法是什么?

What are the best way to find out in impala if table a is a subset of table b?

我在 Impala 中有两个基于 parquet 的外部表,想知道一个是否是另一个的子集,获得它的最佳方法是什么?

两个表schema相同,有十几个甚至上百个字段

谢谢。

假设 table 中都没有重复项,那么如果计数来自:

,则 A 将是 B 的子集
select count(*)
from B;

与来自以下的计数相同:

select count(*)
from ((select * from a) union
      (select * from b)
     ) ab;

也就是说,将 A 的行添加到 B 并消除重复项不会再添加任何行。

这不是 严格的 子集关系,因为 "A" 可能等同于 "B"。对于严格的子集关系,添加条件:

select count(*)
from A

严格小于B的计数。

这假设 AB 中的类型和列是兼容的——如果您询问一个是另一个的子集,这是一个合理的假设。