Hive 比较配置单元中两个分区的数据

Hive 比较配置单元中两个分区的数据,hive,hql,md5,Hive,Hql,Md5,我在hive的每个分区中有900万条记录,我有两个分区。该表有20列。现在,我想根据id列比较分区之间的数据集。考虑到拥有900万条记录的自连接会产生性能问题,这是最好的方法。您可以尝试SMB连接吗?它主要类似于合并两个排序列表。但是,在这种情况下,您需要再创建两个表 另一个选择是编写一个UDF来做同样的事情——这将是项目本身。第一个选项更简单。您是否尝试过自连接,但失败了?我不认为这应该是一个问题,只要您正确指定连接条件。900万行实际上对蜂巢来说并不是那么多。它可以通过使用连接条件作为red

我在hive的每个分区中有900万条记录,我有两个分区。该表有20列。现在,我想根据id列比较分区之间的数据集。考虑到拥有900万条记录的自连接会产生性能问题,这是最好的方法。

您可以尝试SMB连接吗?它主要类似于合并两个排序列表。但是,在这种情况下,您需要再创建两个表


另一个选择是编写一个UDF来做同样的事情——这将是项目本身。第一个选项更简单。

您是否尝试过自连接,但失败了?我不认为这应该是一个问题,只要您正确指定连接条件。900万行实际上对蜂巢来说并不是那么多。它可以通过使用连接条件作为reduce键来处理大型连接,因此它实际上不做完整的笛卡尔积

select a.foo, b.foo
from my_table a
full outer join my_table b
on a.id <=> b.id
where a.partition = 'x' and b.partition = 'y'

要对两个表进行完全比较或比较同一表的两个分区,我的经验表明,使用某些校验和机制比连接表更有效、更可靠,这会带来性能问题,如您所述,并且在重复键时也会带来一些困难

您可以看看这个Python程序,它处理配置单元表的比较,比较所有行和列,并在网页中显示可能出现的差异:


在本例中,您将使用该程序指定要比较的两个表相同,并使用-source where和-destination where来指示要比较的分区。-group by column选项对于指定id列也很有用。

两个分区中的id是否相同?我不认为9m记录的自连接是Hive的问题。。。