Databricks,比较两个表以查看缺少哪些记录

Databricks, comparing two tables to see which records are missing

我正在研究两个应该相等的 table。我 运行 这个查询是为了查看 table B 中缺少哪些记录反对 table A(我们有一个 3 列键):

select * 
from tableA A 
left join TableB B 
   on A.joinField1 = B.joinField1 
  and A.joinField2 = B.joinField2 
  and A.joinField3 = B.joinField3 
where B.joinField1 is null 
   or B.joinField2 is null 
   or B.joinField3 is null 

这样,如果 A 中的记录在 B 中丢失,它会在此查询中被过滤(基于键)。 出于某种原因,当我随机选择其中一条丢失的记录并直接在 table B 中查找(使用简单的 select,在键上过滤)时,它出现了。 为什么我的查询在实际匹配时包含它们?没有空值和字段格式匹配。

我们可以为此使用 EXCEPT 命令。 EXCEPT 和 EXCEPT ALL return 在一个关系中找到但在另一个关系中找不到的行。 EXCEPT(或者 EXCEPT DISTINCT)只接受不同的行,而 EXCEPT ALL 不从结果行中删除重复项。请注意,MINUS 是 EXCEPT 的别名。您可以参考 link