Hive查詢函式的總結和案例(一)

2021-09-11 18:25:50 字數 2303 閱讀 9920

nvl(value, default_value):如果value為null,則nvl函式返回default_value(可以為常量,也可以為某個字段)的值,否則返回value的值,如果兩個引數都為null,則返回null。此函式很簡單,此處不寫例子。

case when有如下兩種形式:

case 字段

when 條件值1 then 值1

when 條件值2 then 值2

…else 預設值 end

或:case

when 字段=『條件值1』 then 值1

when 字段=『條件值2』 then 值2

…else 預設值 end

if的格式:if(表示式1,表示式2,表示式3)

如果表示式1為true,則返回表示式2的值;如果表示式1位false,則返回表示式3的值。

有如下表:

create table emp(

name string,

dept_id string,

*** string);

求出不同部門男女各多少人:

select

dept_id,

sum(case *** when '男' then 1 else 0 end) male_count,

sum(case *** when '女' then 1 else 0 end) female_count

from emp

group by dept_id;

或:select

dept_id,

sum(case when ***='男' then 1 else 0 end) male_count,

sum(case when ***='女' then 1 else 0 end) female_count

from emp

group by dept_id;

除了使用sum(case),還可以使用sum(if())達到同樣的效果

select

dept_id,

sum(if(***='男', 1, 0)) male_count,

sum(if(***='女', 1, 0)) female_count

from emp

group by dept_id;

concat(str1/col1, str2/col2…):返回任意個字串連線後的結果。

concat_ws(separator, str1, str2…):和concat作用一樣,不同的是以指定分隔符separator連線起來。如果分隔符是null,返回值也是null,這個函式還會跳過分隔符引數後的任何null和空字串。

collect_set(col):將字段的所有值進行去重彙總,產生array型別字段。

collect_list(col):作用和collect_set類似,只是不會去重。

有如下表:

create table person_info(name string, constellation string, blood_type string);
把星座和血型一樣的人歸類到一起:

select

concat_ws('|',collect_list(tmp.name)),

tmp.cons_blood

from(

select

name,

concat(constellation,',',blood_type) cons_blood

from person_info

) tmp

group by tmp.cons_blood;

explode(col):將一列中複雜的array或map結構拆分成多行。

lateral view:用於和explode,split等使用者自定義表生成函式(udtf)一起使用,能夠將一列資料拆分成多行資料後。用在from字句之後,且可以有多個lateral view:lateral view udtf(expression) tablealias as columnalias

有如下表:

create table movie_info(movie string, category array);
將電影分類中的陣列資料展開:

select movie,category_name

from movie_info lateral view explode(category) tmp_table as category_name;

Hive查詢表的優化總結

一 小表join大表 1 小表在左邊 但是新版本已經沒區別 2 開啟mapjoin 3 先過濾再join 二 大表join大表 1 空key過濾 2 空key處理 3 先過濾再join 三 group by 設定引數,使之執行兩個 mr job 第乙個mr job中,map的輸出結果會隨機分布到re...

hive查詢中的排序總結

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

Hive以及常用函式介紹和總結

hive是基於hadoop的乙個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為mapreduce任務進行執行。其優點是學習成本低,可以通過類sql語句快速實現簡單的mapreduce統計,不必開發專門的mapreduce應用,十分適合資料倉...