hive中對子查詢如in,exists等支援

2022-05-07 06:12:12 字數 1883 閱讀 1766

案例情況:同事使用公司資料探查跑一段**,部分**如下,報錯,顯示不支援in內的子查詢。但是直接用虛擬機器去跑的話**沒有任何報錯,也出結果,很奇怪。

select  t1.sign_code    as

bus_src

,t1.organization_no

,t3.loan_amts

,t4.restsum

,null

asc1

,null

asc2

,null

asc3

,t5.draft_cnt

,t5.draft_amt

,t5.draft_amt

asdraft_balance

,null

asc4

from

fdm_sor.sor_evt_tbl_fb_cust t1

where t1.fb_cust_code in

(select e.cust_code from fdm_sor.sor_evt_tbl_fb_credit e where e.company_code=

'5103')

and t1.fb_cust_code in

(select e.fb_cust_code from fdm_sor.sor_evt_tbl_fb_loan e where current_settle_flag !=

1)

hive對子查詢的支援很有限。它只允許子查詢出現在select語句的from子句中。

如果發現hive不支援你寫的子查詢,可以看看能不能把它寫成連線操作。

例如,乙個in子查詢可以寫成乙個半連線或連線。

如下,使用join去替換in內的子查詢

select   t1.sign_code    as

bus_src

,t1.organization_no

,t1.loan_amts

,t1.restsum

,null

asc1

,null

asc2

,null

asc3

,t1.draft_cnt

,t1.draft_amt

,t1.draft_amt

asdraft_balance

,null

asc4

from

fdm_sor.sor_evt_tbl_fb_cust t1

inner

join

( select e.cust_code as fb_cust_code from fdm_sor.sor_evt_tbl_fb_credit e where e.company_code=

'5103

') a11

on t1.fb_cust_code =

a11.fb_cust_code

inner

join

(select e.fb_cust_code from fdm_sor.sor_evt_tbl_fb_loan e where current_settle_flag !=

1) c11

on t1.fb_cust_code = c11.fb_cust_code

既然該子查詢在虛擬機器跑的通的話,那就說明hive肯定是支援in內的查詢的,但是為什麼用web介面的探查去跑會報錯呢。

在hive的官網說,hive在0.13版本以後開始支援更多的子查詢,如in ,not in的子查詢。

如果我們用的hive不支援如in,exists,not in等子查詢,很可能是0.13版本之前的舊版本。

從HIVE中中查詢

從hive資料庫查詢文件 by ymd 拼接sql語句 string sql select from doc file where contains name wildcard 拼接名稱查詢語句 if stringutils.isnoneempty unstructuredbean.getname ...

hive查詢中的排序總結

四個排序總結 order by 全域性排序 reduce啟動個數為乙個 sort by 區內排序和distrbute by 結合使用 reduce個數為多個 distribute by 同上reduce個數為多個 cluster by 當distribute by 和 sort by相同時 使用。r...

grails框架中查詢聚合函式,如條數,總額

def query if params.tradedonedateend 先以商戶編號為準 if params.batchbizid else 使用in的時候,傳遞引數為乙個結果集,而非乙個逗號分割的字串 if cmcustomer.size 0 else if params.tradetype m...