我在配置单元中有 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/