比较HIVE中的两个数据表

时间:2016-06-08 15:30:57

标签: sql oracle hive

我必须找出两个表中的数据对于给定的view_date是否相同。如果我的SQL应该返回零,否则为非零。

Table1/Table2 columns:

Source
view_date
count
start_date
end_date

我尝试了以下方式:

SELECT *
FROM (
    SELECT count(*)
    FROM table1
    ) a
JOIN (
    SELECT count(*)
    FROM TABLE 2
    ) b
WHERE view_date = '05/08/2016'
    AND a.x != b.y;

但我没有得到预期的结果。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

这是一种计算每个表中唯一的行数的方法:

select count(*)
from (select source, count, start_date, end_date,
             min(which) as minwhich, max(which) as maxwhich
      from ((select source, count, start_date, end_date, 1 as which
             from table1 
             where viewdate = '2016-06-08'
            ) union all
            (select source, count, start_date, end_date, 2 as which
             from table2
             where viewdate = '2016-06-08'
            )
           ) t12
      group by source, count, start_date, end_date
      having minwhich = maxwhich
     ) t;

注意:如果行在表中的所有值中重复,则不会检查每个表中是否存在相同数量的重复项。

答案 1 :(得分:0)

要对2个表进行完全比较,您不仅需要确保行数匹配,还必须检查所有行的所有数据中的所有数据是否匹配!

这可能是一个复杂的问题(当我在Hortonworks工作时,对于一个项目,我们开发了3个不同的程序来试图解决这个问题)。最近我有机会开发出一个以优雅高效的方式解决这个问题的程序:https://github.com/bolcom/hive_compared_bq

该程序会显示网页上的差异(如果您不需要,可以跳过这些内容),并且还会给出返回值0/1,这是您目前想要的。