Как написать подзапрос в select statement в улье

Я пытаюсь сделать выбор с подзапросами с помощью hive.

В таблице foos есть следующие столбцы:

foo1,
foo2,
foo3_input

Я хочу, чтобы я

select foo1, foo2, foo3 from foos;

Я буду выполнять

select foo1, foo2, foo3_input from foos;

для каждого foo3 в строке Я хотел бы выполнить следующий запрос

foo3 = select bar1 from bars where (foo3_input) between val1 and val2;

Есть ли способ построить этот запрос?

Ответ 1

Вершина версии 0.13.0

select
    a.foo1, 
    a.foo2,
    b.bar1
from foos a, bars b
where a.foo3_input between b.val1, b.val2;

Ответ 2

select
    a.foo1, 
    a.foo2,
    b.bar1
from
(
    (select foo1, foo2, foo3_input from foos) a
    left outer join
    (select bar1, foo3_input from bars ) b
    on a.foo3_input = b.foo3_input
 )tmp
 where b.foo3_input between a.foo1, a.foo2
 ;

[править]

select
    a.foo1, 
    a.foo2,
    b.bar1
from
(
    (select foo1, foo2, foo3_input from foos) a
    full outer join
    (select bar1, val1, var2 from bars ) b

 )tmp
 where a.foo3_input between b.val1, b.val2
 ;

Ответ 3

"Hive не поддерживает IN, EXISTS или подзапросы в предложении WHERE". См. Это https://issues.apache.org/jira/browse/HIVE-1799

См. это для предложения where в улье https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries#LanguageManualSubQueries-SubqueriesintheWHEREClause