我在配置单元中有两个具有确切模式的表。这两个表都没有行数。我需要比较两个表之间的各个列记录。 如果特定记录值不匹配,则应将整行作为输出抛出。这些表有大约358列和数百万条记录。
答案 0 :(得分:4)
这是你可以做的:
使用唯一键加入两个表(我相信你必须在ur表中有唯一的标识符) 使用hive中使用哈希函数组合的所有列的哈希值来计算差异.query将如下所示:
从tab1中选择*加入标签2 b 使用a.id = b.id. hash(a.col1,a.col2 ....)<> hash(b.col1,b.col2 ...);
答案 1 :(得分:1)
例如,我有相同的表格结构(tbl1
,tbl2
),其值不同(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 |
+----------------+------------------+------+--+
您可能需要测试彼此缺少的行等。