我们在以前无论是使用MYSQL 还是DB2等关系型数据库中都会常常使用Union或者Union all来做两个查询的并集或者并集的去重操作,虽然有影响查询性能,但是还是相当的方便的。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
在hive想同样使用union对两个数据集进行去重查询,在执行操作后,发现是日志报错了:错误如下:
ParseException line 1:22 missing ALL at 'select' near '<EOF>'
错误很显然就是告诉我们少了一个 ALL的关键字,难道不支持UNION 的操作,后来查询了一下相关材料,好像目前的版本是不支持UNION 的操作的,必须要使用UNION ALL的操作,但是又想要达到去重的效果,临时升级版本可能不太现实,该如何做呢?
比如:
select column1,column2 from tbl1
union
select column1,column2 from tbl2
报错:ParseException line 1:22 missing ALL at 'select' near '<EOF>'
所以我们要在当前版本上添加一个ALL 就变成这样了:
select column1,column2 from tbl1
union all
select column1,column2 from tbl2
上述语句能查询出来结果集:但是是包含很多重复的数据的,我们又想把这些数据去重,该如何做呢?
我们直接在套一层,然后再使用一个distinct来去重就能达到目的了。
如下所示:
select distinct.* from
(select column1,column2 from tbl1
union all
select column1,column2 from tbl2) as t
这样就可以实现两个结果集的并集并去重的目的了。。。