hive只掃瞄一遍表實現查詢不同條件的資料

2022-06-12 09:15:07 字數 938 閱讀 5950

工作中有一張型別資訊表,有時候需要不同的型別資訊需要多次掃瞄這張表,表很大的時候影響效率。

優化前:

select t1.fa_id,t2.srch_char_val,t3.srch_char_val from

(select fa_id from

cisadm_ods.ods_cis_ci_fa_df ) t1

left

join

(select

*from cisadm_ods.ods_cis_ci_fa_char_df where trim(char_type_cd)=

"aaaa") t2

on t1.fa_id=

t2.fa_id

left

join

(select

*from cisadm_ods.ods_cis_ci_fa_char_df where trim(char_type_cd)=

"bbbb") t3

on t1.fa_id=t3.fa_id

優化後:

使用collect_set(if())這種方式對值進行條件聚合,然後把值從set中取出

select

fa_id

,collect_set(

if(trim(char_type_cd) = "wxsfcg",srch_char_val,null))[0]

,collect_set(

if(trim(char_type_cd) = "zylx",srch_char_val,null))[0]

from

cisadm_ods.ods_cis_ci_fa_char_df

where trim(char_type_cd) in

("wxsfcg","zylx")

group

by fa_id

Java還要再學一遍基礎(十四)實現斐波那契數列

費波那契數列 義大利語 successione di fibonacci 又譯為 費波拿契數 斐波那契數列 費氏數列 分割數列。指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以 遞迴的方法定義 f 0 0,f 1 1,f n f n 1 f n 2 n ...

求第一次只出現一次的字元(只要求遍歷一遍)

解決思路 1 使用雜湊表,hash 256 遍歷一遍字串,得到每個字元出現的次數。2 設定乙個order陣列,記錄字元出現的次序,然後遍歷次序陣列,在hash表中找出它出現的次數,如果為1,那就找到符合要求的字元了。比如字串為 abccaffdde 那麼存放在order陣列的字元就為order 如下...

力扣演算法題1(學完雜湊表再來寫一遍)

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...