2014-12-22 11 views
11

Sto tentando di eseguire una selezione con sottoquery utilizzando l'hive.Come scrivere sottoquery nell'istruzione select nell'hive

In tabella foos hanno le seguenti colonne:

foo1, 
foo2, 
foo3_input 

è quello che voglio

select foo1, foo2, foo3 from foos; 

è ciò che io eseguirò

select foo1, foo2, foo3_input from foos; 

per ogni foo3 fila desidero eseguire la seguente query

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

Esiste un modo possibile costruire questa ricerca?

risposta

0

Hive versione 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 non supporta IN, EXISTS o sottoquery nella clausola WHERE." Vai a questa https://issues.apache.org/jira/browse/HIVE-1799

vedere questo per cui la clausola in alveare https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries#LanguageManualSubQueries-SubqueriesintheWHEREClause

+0

Grazie per i link! Puoi darmi qualche idea per risolvere il problema precedente? – 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 
; 

[modifica]

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

Grazie per la tua risposta @JimmyZhang. foo3_input non appartiene alla tabella delle barre. – brisk

+0

Potresti mostrarmi la struttura delle barre da tavolo? @brisk –

+0

Nella tabella delle barre sono presenti le seguenti colonne bar1, bar2, val1, val2 – brisk

Problemi correlati