sql - 比较 HIVE 中的两个表

标签 sql hadoop hive nosql

我在配置单元中有 3 个表:

  • Control_table,带有已知数据
  • New_table,有数据要检查
  • Result_table,将new_table和control_table中不同值的记录插入到的表

所有三个表都有相同的列名(出于安全原因我不会实际显示)和列数,它们是:

c1, c2, c3, c4, c5, c6, c7

其中 c1 作为主键。

现在我需要将 HIVE 的 SQL 查询放在一起,以比较两个表(control_table 和 new_table)和具有不同值的行,以将其移动到结果表中。现在结果表的列数与 new_table 或 control_table 相同。如果可能的话,我只想填充实际上不同的列。

所以这方面的例子是:

Control_table:  c1  | c2 | c3 | c4 | c5 | c6 | c7 |

With a values:  11  | 22 | 33 | 44 | 55 | 66 | 77 |

New_table:   c1 | c2 | c3 | c4 | c5 | c6 | c7 |

With values: 11 | 21 | 33 | 44 | 54 | 66 | 87 |

比较它们并将结果插入到 result_table 中,因此结果表如下所示:

Result_table:  c1 | c2 | c3 | c4 | c5 | c6 | c7 |

With values:   11 | 21 | -- | -- | 54 | -- | 87 |

因此只会填充具有实际值差异的列。

现在我对 SQL 很陌生,我尝试了几种方法并试图在这里提出问题,但从来没有得到好的答案,这里是我之前的答案的链接,其中也有 sql 的示例:

How to compare two tables and return rows with difference with HIVE

P.S.:这可能是不可能的,我不确定,因为我以前没有使用 NoSQL 的经验。

最佳答案

根据您的目的修改以下内容:

SELECT nt.c1,
       CASE WHEN ct.c2 <> nt.c2 THEN '--' ELSE  nt.c2 END,
       CASE WHEN ct.c3 <> nt.c2 THEN '--' ELSE  nt.c3 END
FROM 
New_table nt
JOIN Control_table ct ON nt.c1 = ct.c1
WHERE
ct.c2 <> nt.c2 OR ct.c3 <> nt.c3

关于sql - 比较 HIVE 中的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26399990/

相关文章:

sql - 从具有复合主键的表中选择过滤记录

c++ - 在 C++ 中为 SQL 转义字符串

mysql - 显示 SQL DB 中的数据

mysql - Select from Different Tables Where 两个子句

apache-spark - 如何避免 Lambda 架构中的代码冗余?

c# - 通过 .net SDK : All MapReduce jobs run with 1 reducer 配置的 HDInsight 集群

hadoop - 无法在kerberized集群上提交oozie作业

hadoop - 在 hive 或 Pig 中创建序列号

hadoop - 查询以查找hiveQL中不包括前5%的行的平均值

java - Hive UA解析器UDF提供IOException