Hive - 比较表之间的数据

时间:2014-07-11 13:01:05

标签: hadoop hive

我需要比较两个外部表(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   |
+------+------+------+------+------+------+

3 个答案:

答案 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脚本要做到这一点,但效率不高且不够健全