關於Hive中case when不准使用子查詢的解決方法


在公司用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM