我有两个表,每个表大小为1TB,被认为包含相同的数据 但是,当我以相同的方式使用它们时,结果会有所不同。
所以,我想按记录比较他们,以找出差异。
我目前的解决方案是一个丑陋的解决方案:
我通过相同的密钥对它们进行排序,将它们输出到本地磁盘并将它们与diff
有人可以建议一个更优雅的方法来实现这个目标吗?
答案 0 :(得分:1)
它是同一数据的两个副本吗?如果是这样,你可以加入表格并选择差异吗?
快速举例:
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