在HIVE中减法查询
问题描述:
减法查询似乎不适用于HIVE。在HIVE中减法查询
尝试前:
select x from abc
minus
select x from bcd ;
我这样做不对或减去查询没有为HIVE定义?如果是这样,是否有任何其他方式来得到这个结果?
答
HQL不支持MINUS
运营商。看到这个相关的,虽然有点老,资源:
http://www.quora.com/Apache-Hive/What-are-the-biggest-feature-gaps-between-HiveQL-and-SQL
你想做的事可以用LEFT JOIN
或NOT EXISTS
做什么:
SELECT x
FROM abc
LEFT JOIN bcd
ON abc.x = bcd.x
WHERE bcd.x IS NULL
编辑:每下面的评论,NOT EXISTS
不支持的。
SELECT x
FROM abc
WHERE NOT EXISTS (SELECT x FROM bcd)
答
答
HQL不支持减号,但您始终可以使用Patrick Tucci解决方案,当您的选择列表只包含几个字段时,它可以正常工作。在我的情况下,我想找到整个表(30+个字段)和备份副本之间的差异,以查找不同的记录。这里是我的解决方案:
select <all-my-fields>, count(*)
from (
select <all-my-fields> from mytable
union all
select <all-the-fields> from mybackuptable
) merged_data
group by <all-my-fields>
having count(*) = 1
现在这不是一个完全地“减”,因为单从记录将mybackuptable的结果是我想要的东西出现。为了让一个完整的“减”相当于我已经添加了这一点:
select <all-my-fields>
from (
select max(source) source, <all-my-fields>, count(*)
from (
select 1 source, <all-my-fields> from mytable
union all
select 2, source, <all-the-fields> from mybackuptable
) merged_data
group by <all-my-fields>
having count(*) = 1
) minus_data
where source = 1
的LEFT JOIN一件作品,但不会再EXISTS一个由HIVE似乎 – Macopare
@Macopare感谢您的反馈意见是不支持。我不太常用'NOT EXISTS',所以我不知道。 –