如何从Hive中具有相同列的两个表中获得行差异



我所期望的是类似于Diff检查器。我有两个表:表1和表2。它们都有相同的列。表1有版本1的数据,表2有版本2的数据。我需要找到版本2与版本1相比有变化的地方。如果输出中只显示随数据变化的列,可能会很有帮助。

尝试使用

SELECT * FROM Table-1 UNION ALL SELECT * FROM Table-2

数据是巨大的,它需要几个小时来运行,而且我必须检查diff手动张贴这个。我相信应该有一种有效的方法来做到这一点。

表1:

<表类>id名称邮件tbody><<tr>1person1person1@mail.com2person2person2@mail.com

为了得到您想要的输出,您可以在匹配id但不同于nameemail的条件下使用self join。然后从每个表中取出union列。

select b.*
from t1 a
join t2 b on a.id=b.id and (a.email<>b.email or a.name<>b.name)
union 
select a.*
from t1 a
join t2 b on a.id=b.id and (a.email<>b.email or a.name<>b.name);

如果我是你,我会把它们并排比较

select a.id, 
a.name as v1_name, 
b.name as v2_name, 
a.email as v1_email, 
b.email as v2_email
from t1 a
left join t2 b on a.id=b.id
where a.name<>b.name or a.email<>b.email;

相关内容

  • 没有找到相关文章

最新更新