Hive中除了視窗函式外的常用函式:casewhen,行轉列,列轉行
技術標籤:hive
一、關於使用函式的一些小方法
- 顯示系統自帶所有函式
show functions; - 描述指定函式的作用
desc function 函式名; - 描述函式的詳情資訊(一般是都是有例子的)
desc function extended 函式名;
二、函式NVL,相當於mysql中的lfnull
格式:NVL(列表名,用來替換null的值)
三、case when
格式:
case 列表名 when 表中的一個值 then 替代他的值 else 另外一個值 end
總體類似於三元運算子
如一列性別的資料均為男女,可以改寫為
sum(case sex when ‘男’ then 1 else 0 end) male_count,
用來分別計算男女數目
四,行轉列,連線多列變成一列
concat
1,select concat(empno,’-’,ename,’-’,sal,’-’,deptno) from emp; 可以自己設定連線符
2,CONCAT_WS(separator, str1, str2,…):它是一個特殊形式的 CONCAT()。第一個引數剩餘引數間的分隔符。分隔符可以是與剩餘引數一樣的字串。如果分隔符是 NULL,返回值也將為 NULL。這個函式會跳過分隔符引數後的任何 NULL 和空字串。分隔符將被加到被連線的字串之間;
3,collect_set(對結果集去重):函式只接受基本資料型別,它的主要作用是將某欄位的值進行去重彙總,產生array型別欄位。
collect_list(不對結果集去重):函式只接受基本資料型別,它的主要作用是將某欄位的值進行不去重彙總,產生array型別欄位。
注,是對某欄位
可以通過collect_set或者collect_list產生string陣列來配合concat_ws 使用
當我們對一個東西分組時,只能計算它的聚合函式
如,我們對部門分組,可以通過count(*)直接計算部門總人數,這時可以通過collect對分組後的一個部門將其資料轉化為一個數組
四,列轉行
Split(str, separator):將字串按照後面的分隔符切割,轉換成字元array。
EXPLODE(col):將hive一列中複雜的array或者map結構拆分成多行。
比如一個數據:懸疑,動作,科幻,劇情
我們可以通過split將其轉化為陣列,再將陣列變成行
explode(split(category,","))
變成
lateral view首先為原始表的每行呼叫UDTF,UDTF會把一行拆分成一或者多行,lateral view再把結果組合,產生一個支援別名表的虛擬表。