我有两个表,每个表大小为1tb,并且被认为包含相同的数据。但是,当我以同样的方式使用它们时,结果会有所不同。所以,我想一个记录一个记录地比较一下,看看有什么不同。我目前的解决方案很难看:我按同一个键对它们进行排序,将它们输出到本地磁盘并与之进行比较 diff 有人能提出一个更优雅的方法来实现这一点吗?
diff
ycl3bljg1#
您可以尝试使用任何散列函数对表1的行进行散列,然后运行表2以查看是否有尚未散列的条目。理论上,我想这是最有效的解决办法。您可以使用minhash/lsh哈希函数进行扩展。
mhd8tkvw2#
正如jay所提到的,使用hash()是一种比连接表更有效、更可靠的解决方案(例如,在重复键时会遇到一些困难)。您可以看看这个python程序,它处理配置单元表的这种比较,并在网页中显示可能出现的差异:https://github.com/bolcom/hive_compared_bq
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
3条答案
按热度按时间ycl3bljg1#
您可以尝试使用任何散列函数对表1的行进行散列,然后运行表2以查看是否有尚未散列的条目。理论上,我想这是最有效的解决办法。
您可以使用minhash/lsh哈希函数进行扩展。
mhd8tkvw2#
正如jay所提到的,使用hash()是一种比连接表更有效、更可靠的解决方案(例如,在重复键时会遇到一些困难)。
您可以看看这个python程序,它处理配置单元表的这种比较,并在网页中显示可能出现的差异:https://github.com/bolcom/hive_compared_bq
vq8itlhq3#
是相同数据的两个副本吗?如果是这样的话,你能把这些表连接起来并找出它们之间的区别吗?
sqlfiddle公司
快速示例: