HIVE中出现ParseException line 1:22 missing ALL at ‘select‘ near ‘<EOF>‘的解决办法

本文介绍了在Hive中使用UnionAll替代Union的方法,并通过添加一层Distinct实现了查询结果的去重。展示了如何解决Hive不支持Union操作的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在以前无论是使用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

这样就可以实现两个结果集的并集并去重的目的了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值