2015-06-10 4 views
4

Минус-запрос, похоже, не работает в HIVE.Минус-запрос в HIVE

Пробовал например:

select x from abc 
minus 
select x from bcd ; 

я это делаю неправильно или минус запрос не определен для энцефалопатии? Если да, есть ли другой способ получить результат для этого?

ответ

11

Не установлено, что 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 

EDIT: Per комментариев ниже, NOT EXISTS не поддерживается.

+0

ЛЕВЫЕ РЕГИСТРИРУЙТЕСЬ один работает, но НЕ СУЩЕСТВУЕТ один раз не поддерживается энцефалопатией, кажется – Macopare

+0

@Macopare Спасибо за обратную связь. Я не слишком часто использую «НЕ СУЩЕСТВУЮЩИЕ», поэтому я этого не знал. –

3

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 
Смежные вопросы