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應用,十分適合資料倉...