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

ix0qys7i  于 2021-06-04  发布在  Hadoop
关注(0)|答案(3)|浏览(324)

我有两个表,每个表大小为1tb,并且被认为包含相同的数据。
但是,当我以同样的方式使用它们时,结果会有所不同。
所以,我想一个记录一个记录地比较一下,看看有什么不同。
我目前的解决方案很难看:
我按同一个键对它们进行排序,将它们输出到本地磁盘并与之进行比较 diff 有人能提出一个更优雅的方法来实现这一点吗?

ycl3bljg

ycl3bljg1#

您可以尝试使用任何散列函数对表1的行进行散列,然后运行表2以查看是否有尚未散列的条目。理论上,我想这是最有效的解决办法。
您可以使用minhash/lsh哈希函数进行扩展。

mhd8tkvw

mhd8tkvw2#

正如jay所提到的,使用hash()是一种比连接表更有效、更可靠的解决方案(例如,在重复键时会遇到一些困难)。
您可以看看这个python程序,它处理配置单元表的这种比较,并在网页中显示可能出现的差异:https://github.com/bolcom/hive_compared_bq

vq8itlhq

vq8itlhq3#

是相同数据的两个副本吗?如果是这样的话,你能把这些表连接起来并找出它们之间的区别吗?
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

相关问题