Sql 比较具有相同架构的两个配置单元表中的记录

Sql 比较具有相同架构的两个配置单元表中的记录,sql,hive,Sql,Hive,我在配置单元中有两个具有精确模式的表。两个表都没有精确的行数。我需要比较两个表之间的单个列记录。 如果特定记录值不匹配,则应将整行作为输出抛出。这些表大约有358列和数百万条记录。您可以这样做: 使用唯一键连接两个表(我认为您的表中必须有唯一标识符) 使用配置单元中使用哈希函数组合的所有列的哈希值来计算差异。查询如下所示: select * from tab1 a join tab2 b using a.id=b.id where hash(a.col1,a.col2....)<>

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

您可以这样做:

使用唯一键连接两个表(我认为您的表中必须有唯一标识符) 使用配置单元中使用哈希函数组合的所有列的哈希值来计算差异。查询如下所示:

select * from tab1 a join tab2 b
using  a.id=b.id
where hash(a.col1,a.col2....)<>hash(b.col1,b.col2...);
从选项卡1 a选择*连接选项卡2 b
使用a.id=b.id
其中hash(a.col1,a.col2…)hash(b.col1,b.col2…);

例如,我有相同的表结构(
tbl1
tbl2
)和不同的值(
department\u id=4

我能做到

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    |
+----------------+------------------+------+--+

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

Spark有一个比Hive更好的解决方案。@Bala谢谢,但不幸的是,我们的群集中没有安装Spark,我们只有Hive选项only@Bala只是想知道你建议的火花解决方案是什么
+----------------+------------------+------+--+
| department_id  | department_name  | _c2  |
+----------------+------------------+------+--+
| 4              | Apparel          | 1    |
| 4              | Hive             | 1    |
+----------------+------------------+------+--+