比较具有相同模式的两个配置单元表中的记录

时间:2018-02-06 09:03:44

标签: sql hive

我在配置单元中有两个具有确切模式的表。这两个表都没有行数。我需要比较两个表之间的各个列记录。 如果特定记录值不匹配,则应将整行作为输出抛出。这些表有大约358列和数百万条记录。

2 个答案:

答案 0 :(得分:4)

这是你可以做的:

使用唯一键加入两个表(我相信你必须在ur表中有唯一的标识符) 使用hive中使用哈希函数组合的所有列的哈希值来计算差异.query将如下所示:

从tab1中选择*加入标签2 b 使用a.id = b.id. hash(a.col1,a.col2 ....)<> hash(b.col1,b.col2 ...);

答案 1 :(得分:1)

例如,我有相同的表格结构(tbl1tbl2),其值不同(department_id = 4),

select * from tbl1;

+---------------------+-----------------------+--+
| tbl1.department_id  | tbl1.department_name  |
+---------------------+-----------------------+--+
| 2                   | Fitness               |
| 3                   | Footwear              |
| 4                   | Apparel               |
| 5                   | Golf                  |
| 6                   | Outdoors              |
| 7                   | Fan Shop              |
+---------------------+-----------------------+--+

select * from tbl2 where department_id = 4;

+---------------------+-----------------------+--+
| tbl2.department_id  | tbl2.department_name  |
+---------------------+-----------------------+--+
| 4                   | Hive                  |
+---------------------+-----------------------+--+

我能做到,

select department_id, department_name, count(*)
from (
  select * from tbl1
    union all
  select * from tbl2 ) both
group by department_id, department_name
having count(*) = 1     //if count(*) is 2 -> rows of tbl1,tbl2 are identical.

获取

+----------------+------------------+------+--+
| department_id  | department_name  | _c2  |
+----------------+------------------+------+--+
| 4              | Apparel          | 1    |
| 4              | Hive             | 1    |
+----------------+------------------+------+--+

您可能需要测试彼此缺少的行等。