我需要比较两个外部表(A和A')之间的数据与相同的列,我实际上做了一些sql脚本来做到这一点但是效率不高且不够健壮。有一种方法可以使用UDAF或外部工具吗?
这里有一个示例:
表A
+----+----+----+
| C1 | C2 | C3 |
+----+----+----+
| 01 | A | 02 |
| 02 | B | 03 |
| 03 | C | 04 |
+----+----+----+
表A'
+----+----+----+
| C1 | C2 | C3 |
+----+----+----+
| 01 | B | 02 |
| 02 | B | 03 |
| 04 | D | 04 |
+----+----+----+
输出
+------+------+------+------+------+------+
| C1 | C2 | C3 | C1' | C2' | C3' |
+------+------+------+------+------+------+
| 01 | A | 02 | 01 | B | 02 |
| 03 | C | 04 | null | null | null |
| null | null | null | 04 | D | 04 |
+------+------+------+------+------+------+
答案 0 :(得分:1)
有一种比较数据的新工具。 DiffTool(https://dataq.io/)是一个基于UI的数据比较工具,可以跨RDBMS,Hadoop(Hive)或文本文件(CSV& JSON)等数据源使用。 DiffTool根据键比较数据集,其中一些功能包括:
使用自定义过滤器控制数据量, 使用SQL表达式转换列, 使用分布式架构进行扩展的能力, 并通过丰富的可视化直观地分析结果
答案 1 :(得分:0)
您必须为此编写自定义MR程序。我们已经遇到过这些问题。您必须编写自定义MR程序是自定义UDF。构建方法中没有解决此问题的方法。
答案 2 :(得分:0)
如果比较id b / w来自表A和表A'的行基于连接条件(在本例中我认为是第一列C1),则可以将其作为UDF执行。
方法:
select UDF_FUNCTION(a.c1,a.c2.a.c3, A'.c2,a'.c3) from A JOIN A' ON (A.c1=a'.c1)
在UDF中,您可以根据需要比较值,并返回数组或分隔文本。
你是什么意思
一些sql脚本要做到这一点,但效率不高且不够健全