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
我正在研究两个应该相等的 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