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

How to get the difference in row from two table having same column in Hive

我期待的与差异检查器类似。我有两个 table:Table-1 和 Table-2。它们都有相同的列。 Table-1 有版本 1 数据,Table-2 有版本 2 数据。与版本 1 相比,我需要找到我的版本 2 发生变化的地方。也许仅显示与数据一起发生变化的列的输出会非常有用。

尝试使用

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

数据量很大,运行需要几个小时,而且我必须手动检查差异post。我相信应该有一种有效的方法来做到这一点。

Table 1:

id name email
1 person1 person1@mail.com
2 person2 person2@mail.com

Table 2:

id name email
1 person4 person4@mail.com
2 person2 person2@mail.com

预期输出:

name 字段在 table 2 中更改。所以我想要类似下面的输出,这应该有助于理解列名称和电子邮件中 ​​id 1 的值已更改。

id name email
1 person1 person1@mail.com
1 person4 person4@mail.com

为了得到你想要的输出,你可以在匹配id但不同nameemail的条件下使用self join。然后 union 列来自每个 table.

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;

DEMO