Hive常用函式

2021-09-10 03:17:03 字數 3177 閱讀 7159

if判斷

select if(1=1,「yes」,「no!」); //返回yes

語法 :

case [expression]

when condition1 then result1

when condition2 then result2

else result

end

例子 :

case a

when 1 then "one"

when 2 then "two"

else "other"

end

連線字串

concat(string a, string b…) 連線多個字串,合併為乙個字串,可以接受任意數量的輸入字串

concat_ws(string sep, string a, string b…) 連線多個字串,字串之間以指定的分隔符分開。

返回無重覆記錄,返回的是乙個陣列 , 可以實現列轉行(配合concat)

空值轉換函式

nvl(expr1,expr2)將查詢的null值轉換為指定值

如果expr1為null , 則返回expr2 , 否則返回expr1

和nvl類似(都是處理null值的方法) , 返回第乙個非null的值

select coalesce(null,2,3,4); //返回2

將陣列/集合轉換為單獨的多行

select split("a,b,c,d",",");

ok["a","b","c","d"]]

select explode(split("a,b,c,d",","));oka

bcd

概念

lateral view 其實就是用來實現類似explode這種udtf函式聯合使用的

lateral view會將udtf生成的結果放到乙個虛擬表中 , 然後這個虛擬表會和輸入行的主鍵來進行join來達到udtf外的select欄位的目的

語法lateralview: lateral view udtf(expression) tablealias as columnalias (『,』 columnalias)*

fromclause: from basetable (lateralview)*

可以在兩個地方用lateral view : 在udtf前面使用 , 在from base table 後面使用

例項

select reneger,reason,test_id

from a lateral view explode(split("1,2,3",",")) temp as test_id;

lateral view 與 explode等udtf就是天生好搭檔 , explode將複雜結構的一行拆成多行 , 再用lateral view 做聚合

lateral view通常和udtf一起出現,為了解決udtf不允許再select欄位的問題。

multiple lateral view可以實現類似笛卡爾乘積。

outer關鍵字可以把不輸出的udtf的空結果,輸出成null,防止丟失資料。

instr(string str , string substr )

查詢字串str中子字串substr出現的位置 , 如果查詢失敗返回0 , 如果任意乙個引數為null , 將返回null , 位置從1開始

select instr("nihao","hao");ok3

select instr("nihao","hao22");

ok0

**

都是實現分組排序的方法

語法 : row_number() over (partition by column_a order by column_b asc/desc) rn

row_number可以替換為rank , dense_rank

資料

id name sal

1 a 10

2 a 12

3 b 13

4 b 12

5 a 14

6 a 15

7 a 13

8 b 11

9 a 16

10 b 17

11 a 14

語句select id,

name,

sal,

rank()over(partition by name order by sal desc ) rp,

dense_rank() over(partition by name order by sal desc ) drp,

row_number()over(partition by name order by sal desc) rmp

from f_test

結果10 b 17 1 1 1

3 b 13 2 2 2

4 b 12 3 3 3

8 b 11 4 4 4

9 a 16 1 1 1

6 a 15 2 2 2

11 a 14 3 3 3

5 a 14 3 3 4

7 a 13 5 4 5

2 a 12 6 5 6

1 a 10 7 6 7

ank() 排序相同時會重複,總數不會變

dense_rank()排序相同時會重複,總數會減少

row_number() 會根據順序計算

用於將分組資料按照順序切分成n片,返回當前切片值

select * from (

select id,

name,

sal,

ntile(2) over(partition by name order by sal desc ) rn

from f_test

) t where t.rn=1

煩1!!!

hive常用函式

hive常用函式 1 檢視函式用法 desc function 函式名 desc function extended 函式名 2 獲取array陣列長度 size函式 select size collect list field from table select size split hello ...

Hive常用函式

常用日期函式 unix timestamp 返回當前或指定時間的時間戳 from unixtime 將時間戳轉為日期格式 current date 當前日期 current timestamp 當前的日期加時間 to date 抽取日期部分 year 獲取年 month 獲取月 day 獲取日 ho...

hive常用函式

一 型別 1 udf user defined function 一進一出 select upper dd from emp 2 udaf user defined aggregation function 聚集函式,多進一出 類似於 count max min 3 udtf user define...