在公司用Hive實現個規則的時候,遇到了要查詢某個字段是否在另一張表中,大概情況就是
A表:
id | value1 | value2 |
---|---|---|
1 | 100 | 0 |
2 | 101 | 1 |
3 | 102 | 1 |
B表:
value1 |
---|
100 |
102 |
104 |
我要查詢A表中當value2為0的時候直接輸出0,為1的時候,判斷value1是否在B表的value1中,如果在那么便輸出0,不在便輸出1,拿到第一反映是:
select
case
when value2 = 0 then 0
when value2 = 1 then
case
when value1 in (select value1 from B) then 0
else 1
end
end as value3
from A
結果Hive就報錯了
Error: Error while compiling statement: FAILED: SemanticException Line 0:-1 Unsupported SubQuery Expression 'value1': Currently SubQuery expressions are only allowed as Where Clause predicates
.
大概意思就是:目前的子查詢表達式只允許為Where條件謂詞
。
於是我們就必須將其改為使用left join
來解決。
select
case
when a.value2 = 0 then 0
when a.value2 = 1 then
case when
b.value1 is not null then 0
else 1
END
END as value3
from A a
left join
B b
on a.value1 = b.value1;
大功告成,對了,使用的Hive版本為1.1.0