比较两个表具有完全相同内容的最快方法

时间:2013-11-20 13:32:54

标签: sql hadoop hive

我有两个表,每个表大小为1TB,被认为包含相同的数据 但是,当我以相同的方式使用它们时,结果会有所不同。

所以,我想按记录比较他们,以找出差异。


我目前的解决方案是一个丑陋的解决方案:
我通过相同的密钥对它们进行排序,将它们输出到本地磁盘并将它们与diff

进行比较

有人可以建议一个更优雅的方法来实现这个目标吗?

3 个答案:

答案 0 :(得分:1)

它是同一数据的两个副本吗?如果是这样,你可以加入表格并选择差异吗?

SQLFiddle

快速举例:

create table atable (
  id int,
  field1 int,
  field2 varchar(16)
  )

create table btable (
  id int,
  field1 int,
  field2 varchar(16)
  )

select * from atable as a
join btable as b on a.id = b.id
where a.field1 != b.field1
or a.field2 != b.field2

答案 1 :(得分:0)

您可以尝试使用任何哈希函数对表1的行进行哈希处理,然后运行table2以查看是否存在任何尚未哈希的条目。从理论上讲,这是我猜的最有效的解决方案。

您可以使用minhash / LSH哈希函数进行扩展。

答案 2 :(得分:0)

如Jay所说,使用Hash()是一种比连接表更有效和可靠的解决方案(例如,当重复键时会给出一些困难)。

您可以查看这个处理Hive表比较的Python程序,并在网页中显示可能出现的差异:https://github.com/bolcom/hive_compared_bq