2014-12-22 11 views
11

Próbuję dokonać wyboru z sub-zapytań przy użyciu gałęzi.Jak napisać podzapytanie w oświadczeniu select w ulu

W tabeli Foos mają następujące kolumny:

foo1, 
foo2, 
foo3_input 

co chcę

select foo1, foo2, foo3 from foos; 

Czy to, co będę wykonywać

select foo1, foo2, foo3_input from foos; 

dla każdego foo3 w rzędzie chciałbym wykonać następujące zapytanie

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

Czy istnieje sposób możliwe do skonstruowania tej kwerendy?

Odpowiedz

0

Hive wersja 0.13.0

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

"Hive nie obsługuje IN, EXISTS ani podzapytań w klauzuli WHERE." Zobacz ten https://issues.apache.org/jira/browse/HIVE-1799

Patrz na to, gdzie klauzula ula https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries#LanguageManualSubQueries-SubqueriesintheWHEREClause

+0

Dzięki za linki! Czy możesz podać mi jakieś pomysły na rozwiązanie powyższego problemu? – brisk

3
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 
; 

[edytuj]

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 
; 
+0

Dzięki za odpowiedź @ JimmyZhang. foo3_input nie należy do tabeli słupków. – brisk

+0

Czy możesz pokazać mi strukturę prętów stołowych? @brisk –

+0

W tabeli słupków znajdują się następujące kolumny: bar1, bar2, val1, val2 – brisk