2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)
全網最詳細的Hive文章系列,強烈建議收藏加關注!
后面更新文章都會列出歷史文章目錄,幫助大家回顧知識重點。
目錄
系列歷史文章
前言
Hive的內置函數
一、數學函數
1、 取整函數: round
2、指定精度取整函數: round
3、向下取整函數: floor
4、向上取整函數: ceil
5、取隨機數函數: rand
6、冪運算函數: pow
7、絕對值函數: abs
二、字符串函數
1、字符串長度函數:length
2、字符串反轉函數:reverse
3、字符串連接函數:concat
4、字符串連接函數-帶分隔符:concat_ws
5、字符串截取函數:substr,substring
6、字符串截取函數:substr,substring
7、?字符串轉大寫函數:lower,ucase
8、字符串轉小寫函數:lower,lcase
9、去空格函數:trim
10、?左邊去空格函數:ltrim
11、右邊去空格函數:rtrim
12、正則表達式替換函數:regexp_replace
13、URL解析函數:parse_url
14、分割字符串函數: split
三、日期函數
1、獲取當前UNIX時間戳函數:unix_timestamp
2、UNIX時間戳轉日期函數:from_unixtime
3、日期轉UNIX時間戳函數:unix_timestamp
4、指定格式日期轉UNIX時間戳函數:unix_timestamp
5、日期時間轉日期函數:to_date
6、日期轉年函數: year
7、日期轉月函數: month
8、日期轉天函數: day
9、日期轉周函數:weekofyear
10、日期比較函數: datediff
11、日期增加函數: date_add
12、日期減少函數: date_sub
13、date_format函數
四、條件函數
1、if函數: if
2、條件判斷函數:CASE
3、條件判斷函數:CASE
五、???????轉換函數
六、Hive的行轉列
1、介紹
???????2、測試數據
???????3、操作步驟
系列歷史文章
2021年大數據Hive(十二):Hive綜合案例!!!???????
2021年大數據Hive(十一):Hive調優???????
2021年大數據Hive(十):Hive的數據存儲格式
2021年大數據Hive(九):Hive的數據壓縮???????
2021年大數據Hive(八):Hive自定義函數
2021年大數據Hive(七):Hive的開窗函數
2021年大數據Hive(六):Hive的表生成函數
2021年大數據Hive(五):Hive的內置函數(數學、字符串、日期、條件、轉換、行轉列)
2021年大數據Hive(四):Hive查詢語法
2021年大數據Hive(三):手把手教你如何吃透Hive數據庫和表操作(學會秒變數倉大佬)
2021年大數據Hive(二):Hive的三種安裝模式和MySQL搭配使用
2021年大數據Hive(一):Hive基本概念
前言
?2021大數據領域優質創作博客,帶你從入門到精通,該博客每天更新,逐漸完善大數據各個知識體系的文章,幫助大家更高效學習。
有對大數據感興趣的可以關注微信公眾號:三幫大數據
Hive函數
Hive的函數分為三類: 聚合函數、內置函數,表生成函數,聚合函數之前已經學習過了,接下來學習內置函數和表生成函數.
Hive的內置函數
一、數學函數
1、 取整函數: round
語法:?round(double a)
返回值: BIGINT
說明:返回double類型的整數值部分(遵循四舍五入)
舉例:
hive>?select round(3.1415926);
3
2、指定精度取整函數: round
語法:?round(double a, int d)
返回值: DOUBLE
說明:返回指定精度d的double類型
舉例:
hive>?select round(3.1415926,4);
3.1416
3、向下取整函數: floor
語法: floor(double a)
返回值: BIGINT
說明:返回等于或者小于該double變量的最大的整數
舉例:
hive>?select floor(3.1415926);
3
4、向上取整函數: ceil
語法: ceil(double a)
返回值: BIGINT
說明:返回等于或者大于該double變量的最小的整數
舉例:
hive>?select ceil(3.1415926)?;
4
5、取隨機數函數: rand
語法:?rand(),rand(int seed)
返回值:?double
說明:返回一個0到1范圍內的隨機數。如果指定種子seed,則會返回固定的隨機數
舉例:
hive>?select rand();
0.5577432776034763
hive>?select rand();
0.6638336467363424
hive>?select rand(100);
0.7220096548596434
hive>?select rand(100);
0.7220096548596434
6、冪運算函數: pow
語法: pow(double a, double p)
返回值: double
說明:返回a的p次冪
舉例:
hive>?select pow(2,4)?;
16.0
7、絕對值函數: abs
語法:?abs(double a)??abs(int a)
返回值:?double???????int
說明:返回數值a的絕對值
舉例:
hive>?select abs(-3.9);
3.9
hive>?select abs(10.9);
10.9?
二、字符串函數
1、字符串長度函數:length
語法: length(string A)
返回值: int
說明:返回字符串A的長度
舉例:
hive>?select?length('abcedfg');
7
2、字符串反轉函數:reverse
語法:?reverse(string A)
返回值: string
說明:返回字符串A的反轉結果
舉例:
hive>?select reverse("abcedfg");
gfdecba
3、字符串連接函數:concat
語法: concat(string A, string B…)
返回值: string
說明:返回輸入字符串連接后的結果,支持任意個輸入字符串
舉例:
hive>?select?concat('hello','world');
helloworld
4、字符串連接函數-帶分隔符:concat_ws
語法: concat_ws(string SEP, string A, string B…)
返回值: string
說明:返回輸入字符串連接后的結果,SEP表示各個字符串間的分隔符
舉例:
hive>?select?concat_ws(',','abc','def','gh');
abc,def,gh
5、字符串截取函數:substr,substring
語法: substr(string A, int start),substring(string A, int start)
返回值: string
說明:返回字符串A從start位置到結尾的字符串
舉例:
hive>?select?substr('abcde',3);
cde
hive>?select?substring('abcde',3);
cde
hive>select?substr('abcde',-1);
e
6、字符串截取函數:substr,substring
語法: substr(string A, int start, int len),substring(string A, intstart, int len)
返回值: string
說明:返回字符串A從start位置開始,長度為len的字符串
舉例:
hive>?select?substr('abcde',3,2);
cd
hive>?select?substring('abcde',3,2);
cd
hive>select?substring('abcde',-2,2);
de
7、?字符串轉大寫函數:lower,ucase
語法:?lower(string A) ucase(string A)
返回值: string
說明:返回字符串A的大寫格式
舉例:
hive>?select?lower('abSEd');
ABSED
hive>?select?ucase('abSEd');
ABSED
8、字符串轉小寫函數:lower,lcase
語法:?lower(string A) lcase(string A)
返回值: string
說明:返回字符串A的小寫格式
舉例:
??????hive>?select?lower('abSEd');
absed
hive>?select?lcase('abSEd');
absed
9、去空格函數:trim
語法: trim(string A)
返回值: string
說明:去除字符串兩邊的空格
舉例:
hive>?select?trim(' abc ');
abc
10、?左邊去空格函數:ltrim
語法:?ltrim(string A)
返回值: string
說明:去除字符串左邊的空格
舉例:
hive>?select?ltrim(' abc ');
abc
11、右邊去空格函數:rtrim
語法: rtrim(string A)
返回值: string
說明:去除字符串右邊的空格
舉例:
hive>?select?rtrim(' abc ');
abc
12、正則表達式替換函數:regexp_replace
語法: regexp_replace(string A, string B, string C)
返回值: string
說明:將字符串A中的符合java正則表達式B的部分替換為C。注意,在有些情況下要使用轉義字符,類似oracle中的regexp_replace函數。
舉例:
hive>?select?regexp_replace('foobar',?'oo|ar',?'');
fb
13、URL解析函數:parse_url
語法: parse_url(string urlString, string partToExtract [, stringkeyToExtract])
返回值:?string
說明:返回URL中指定的部分。partToExtract的有效值為:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO.
舉例:
hive>?select?parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1',?'HOST');
facebook.com
hive>?select?parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1',?'PATH');
/path1/p.php
hive>?select?parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1',?'QUERY','k1');
v1
14、分割字符串函數: split
語法: split(string str, stringpat)
返回值: array
說明:按照pat字符串分割str,會返回分割后的字符串數組
舉例:
hive>?select?split('abtcdtef','t');
["ab","cd","ef"]
三、日期函數
1、獲取當前UNIX時間戳函數:unix_timestamp
語法:?unix_timestamp()
返回值: bigint
說明:獲得當前時區的UNIX時間戳
舉例:
hive>?select?unix_timestamp();
1323309615
2、UNIX時間戳轉日期函數:from_unixtime
語法: from_unixtime(bigint unixtime[, string format])
返回值: string
說明:轉化UNIX時間戳(從1970-01-01 00:00:00 UTC到指定時間的秒數)到當前時區的時間格式
舉例:
hive>select from_unixtime(1598079966,'yyyy-MM-dd HH:mm:ss');
2020-08-22 15:06:06
3、日期轉UNIX時間戳函數:unix_timestamp
語法: unix_timestamp(string date)
返回值:?bigint
說明:轉換格式為"yyyy-MM-ddHH:mm:ss"的日期到UNIX時間戳。如果轉化失敗,則返回0。
舉例:
hive>?select?unix_timestamp('2011-12-07 13:01:03');
1323234063
4、指定格式日期轉UNIX時間戳函數:unix_timestamp
語法: unix_timestamp(string date, string pattern)
返回值: bigint
說明:轉換pattern格式的日期到UNIX時間戳。如果轉化失敗,則返回0。
舉例:
hive>?select?unix_timestamp('20111207 13:01:03','yyyyMMddHH:mm:ss');
1323234063
5、日期時間轉日期函數:to_date
語法: to_date(string timestamp)
返回值: string
說明:返回日期時間字段中的日期部分。
舉例:
hive>?select?to_date('2011-12-08 10:03:01');
2011-12-08
6、日期轉年函數: year
語法:?year(string date)
返回值:?int
說明:返回日期中的年。
舉例:
hive>?select?year('2011-12-08 10:03:01');
2011
hive>?select?year('2012-12-08');
2012
7、日期轉月函數: month
語法: month (string date)
返回值:?int
說明:返回日期中的月份。
舉例:
hive>?select?month('2011-12-08 10:03:01');
12
hive>?select?month('2011-08-08');
8
???????8、日期轉天函數: day
語法:?day (string date)
返回值:?int
說明:返回日期中的天。
舉例:
hive>?select?day('2011-12-08 10:03:01');
8
hive>?select?day('2011-12-24');
24
同樣的,還有 hour,minute,second函數,分別是獲取小時,分鐘和秒,使用方式和以上類似,這里就不再講述。
???????9、日期轉周函數:weekofyear
語法:?weekofyear (string date)
返回值: int
說明:返回日期在當前的周數。
舉例:
hive>?select?weekofyear('2011-12-08 10:03:01');
49
???????10、日期比較函數: datediff
語法:?datediff(string enddate, string startdate)
返回值:?int
說明:返回結束日期減去開始日期的天數。
舉例:
hive>?select?datediff('2012-12-08','2012-05-09');
213
???????11、日期增加函數: date_add
語法: date_add(string startdate, int days)
返回值: string
說明:返回開始日期startdate增加days天后的日期。
舉例:
hive>?select?date_add('2012-12-08',10);
2012-12-18
???????12、日期減少函數: date_sub
語法: date_sub (string startdate, int days)
返回值: string
說明:返回開始日期startdate減少days天后的日期。
舉例:???????
hive>?select?date_sub('2012-12-08',10);
2012-11-28
???????13、date_format函數
0: jdbc:hive2://node3:10000> select date_format('2019-1-1', 'yyyy-MM-dd');
+-------------+--+
| ????_c0 ????|
+-------------+--+
| 2019-01-01 ?|
+-------------+--+
四、條件函數
1、if函數: if
語法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
返回值:?T
說明:?當條件testCondition為TRUE時,返回valueTrue;否則返回valueFalseOrNull
舉例:
hive>?select if(1=2,100,200)?;
200
hive>?select if(1=1,100,200)?;
100
????????
2、條件判斷函數:CASE
語法:?CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
返回值: T
說明:如果a等于b,那么返回c;如果a等于d,那么返回e;否則返回f
舉例:
hive>?select case?100?when 50?then 'tom'?when 100?then 'mary'else?'tim'?end ;
mary
hive>?select case?200?when 50?then 'tom'?when 100?then 'mary'else?'tim'?end ;
tim
???????3、條件判斷函數:CASE
語法: CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END
返回值:?T
說明:如果a為TRUE,則返回b;如果c為TRUE,則返回d;否則返回e
舉例:
hive>?select case?when 1=2?then 'tom'?when 2=2?then 'mary'?else'tim'?end ;
mary
hive>?select case?when 1=1?then 'tom'?when 2=2?then 'mary'?else'tim'?end ;
tom
?select sid ?,case?when sscore>=60?then '及格'?when sscore<60?then '不及格'?else?'其他'?end ?from score
五、???????轉換函數
???????類似于java中的強轉轉換函數
公式:cast(表達式 as 數據類型)
cast函數,可以將"20190607"這樣類型的時間數據轉化成int類型數據。
select cast(12.35?as int);
select cast('20190607'?as int)
select cast('2020-12-05'?as date);
六、Hive的行轉列
1、介紹
1)行轉列是指多行數據轉換為一個列的字段。
2)Hive行轉列用到的函數:
concat(str1,str2,...) ?--字段或字符串拼接
concat_ws(sep, str1,str2) --以分隔符拼接每個字符串
collect_set(col)?--將某字段的值進行去重匯總,產生array類型字段
???????2、測試數據
?字段: deptno ? ename
20 ?SMITH ??
30 ALLEN ??
30 WARD ???
20 ?JONES ??
30 MARTIN ?
30 BLAKE ??
10 CLARK ??
20 ?SCOTT ??
10 KING ???
30 ?TURNER ?
20 ?ADAMS ??
30 ?JAMES ??
20 FORD ???
10 ?MILLER ?
?
???????3、操作步驟
1)建表
create?table?emp(deptno int,ename string)?row?format?delimited fields terminated by?'\t';
2)插入數據
load data?local?inpath "/export/data/hivedatas/emp.txt"?into?table?emp;
3)轉換
select?deptno,concat_ws("|",collect_set(ename))?as?ems from?emp group?by?deptno;
行轉列,COLLECT_SET(col):函數只接受基本數據類型,它的主要作用是將某字段的值進行去重匯總,產生array類型字段。
4)結果查看
- 📢博客主頁:https://lansonli.blog.csdn.net
- 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
- 📢本文由 Lansonli 原創,首發于 CSDN博客🙉
- 📢大數據系列文章會每天更新,停下休息的時候不要忘了別人還在奔跑,希望大家抓緊時間學習,全力奔赴更美好的生活?
總結
以上是生活随笔為你收集整理的2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据Hive(四):Hive
- 下一篇: 2021年大数据Hive(七):Hive