全网最详细的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、操作步骤
系列历史文章
大数据Hive(十二):Hive综合案例!!!
大数据Hive(十一):Hive调优
大数据Hive(十):Hive的数据存储格式
大数据Hive(九):Hive的数据压缩
大数据Hive(八):Hive自定义函数
大数据Hive(七):Hive的开窗函数
大数据Hive(六):Hive的表生成函数
大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)
大数据Hive(四):Hive查询语法
大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)
大数据Hive(二):Hive的三种安装模式和MySQL搭配使用
大数据Hive(一):Hive基本概念
前言
大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习。
有对大数据感兴趣的可以关注微信公众号:三帮大数据
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.726548596434
hive>select rand(100);
0.726548596434
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)
返回值:doubleint
说明:返回数值a的绝对值
举例:
hive>select abs(-3.9);
3.9
hive>select abs(10.9);
10.9
二、字符串函数
1、字符串长度函数:length
语法: length(string A)
返回值: int
说明:返回字符串A的长度
举例:
hive>selectlength('abcedfg');
7
2、字符串反转函数:reverse
语法:reverse(string A)
返回值: string
说明:返回字符串A的反转结果
举例:
hive>select reverse("abcedfg");
gfdecba
3、字符串连接函数:concat
语法: concat(string A, string B…)
返回值: string
说明:返回输入字符串连接后的结果,支持任意个输入字符串
举例:
hive>selectconcat('hello','world');
helloworld
4、字符串连接函数-带分隔符:concat_ws
语法: concat_ws(string SEP, string A, string B…)
返回值: string
说明:返回输入字符串连接后的结果,SEP表示各个字符串间的分隔符
举例:
hive>selectconcat_ws(',','abc','def','gh');
abc,def,gh
5、字符串截取函数:substr,substring
语法: substr(string A, int start),substring(string A, int start)
返回值: string
说明:返回字符串A从start位置到结尾的字符串
举例:
hive>selectsubstr('abcde',3);
cde
hive>selectsubstring('abcde',3);
cde
hive>selectsubstr('abcde',-1);
e
6、字符串截取函数:substr,substring
语法: substr(string A, int start, int len),substring(string A, intstart, int len)
返回值: string
说明:返回字符串A从start位置开始,长度为len的字符串
举例:
hive>selectsubstr('abcde',3,2);
cd
hive>selectsubstring('abcde',3,2);
cd
hive>selectsubstring('abcde',-2,2);
de
7、字符串转大写函数:lower,ucase
语法:lower(string A) ucase(string A)
返回值: string
说明:返回字符串A的大写格式
举例:
hive>selectlower('abSEd');
ABSED
hive>selectucase('abSEd');
ABSED
8、字符串转小写函数:lower,lcase
语法:lower(string A) lcase(string A)
返回值: string
说明:返回字符串A的小写格式
举例:
hive>selectlower('abSEd');
absed
hive>selectlcase('abSEd');
absed
9、去空格函数:trim
语法: trim(string A)
返回值: string
说明:去除字符串两边的空格
举例:
hive>selecttrim(' abc ');
abc
10、左边去空格函数:ltrim
语法:ltrim(string A)
返回值: string
说明:去除字符串左边的空格
举例:
hive>selectltrim(' abc ');
abc
11、右边去空格函数:rtrim
语法: rtrim(string A)
返回值: string
说明:去除字符串右边的空格
举例:
hive>selectrtrim(' abc ');
abc
12、正则表达式替换函数:regexp_replace
语法: regexp_replace(string A, string B, string C)
返回值: string
说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。
举例:
hive>selectregexp_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>selectparse_url('/path1/p.php?k1=v1&k2=v2#Ref1','HOST');
facebook.com
hive>selectparse_url('/path1/p.php?k1=v1&k2=v2#Ref1','PATH');
/path1/p.php
hive>selectparse_url('/path1/p.php?k1=v1&k2=v2#Ref1','QUERY','k1');
v1
14、分割字符串函数: split
语法: split(string str, stringpat)
返回值: array
说明:按照pat字符串分割str,会返回分割后的字符串数组
举例:
hive>selectsplit('abtcdtef','t');
["ab","cd","ef"]
三、日期函数
1、获取当前UNIX时间戳函数:unix_timestamp
语法:unix_timestamp()
返回值: bigint
说明:获得当前时区的UNIX时间戳
举例:
hive>selectunix_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');
-08-22 15:06:06
3、日期转UNIX时间戳函数:unix_timestamp
语法: unix_timestamp(string date)
返回值:bigint
说明:转换格式为"yyyy-MM-ddHH:mm:ss"的日期到UNIX时间戳。如果转化失败,则返回0。
举例:
hive>selectunix_timestamp('-12-07 13:01:03');
1323234063
4、指定格式日期转UNIX时间戳函数:unix_timestamp
语法: unix_timestamp(string date, string pattern)
返回值: bigint
说明:转换pattern格式的日期到UNIX时间戳。如果转化失败,则返回0。
举例:
hive>selectunix_timestamp('1207 13:01:03','yyyyMMddHH:mm:ss');
1323234063
5、日期时间转日期函数:to_date
语法: to_date(string timestamp)
返回值: string
说明:返回日期时间字段中的日期部分。
举例:
hive>selectto_date('-12-08 10:03:01');
-12-08
6、日期转年函数: year
语法:year(string date)
返回值:int
说明:返回日期中的年。
举例:
hive>selectyear('-12-08 10:03:01');
hive>selectyear('-12-08');
7、日期转月函数: month
语法: month (string date)
返回值:int
说明:返回日期中的月份。
举例:
hive>selectmonth('-12-08 10:03:01');
12
hive>selectmonth('-08-08');
8
8、日期转天函数: day
语法:day (string date)
返回值:int
说明:返回日期中的天。
举例:
hive>selectday('-12-08 10:03:01');
8
hive>selectday('-12-24');
24
同样的,还有 hour,minute,second函数,分别是获取小时,分钟和秒,使用方式和以上类似,这里就不再讲述。
9、日期转周函数:weekofyear
语法:weekofyear (string date)
返回值: int
说明:返回日期在当前的周数。
举例:
hive>selectweekofyear('-12-08 10:03:01');
49
10、日期比较函数: datediff
语法:datediff(string enddate, string startdate)
返回值:int
说明:返回结束日期减去开始日期的天数。
举例:
hive>selectdatediff('-12-08','-05-09');
213
11、日期增加函数: date_add
语法: date_add(string startdate, int days)
返回值: string
说明:返回开始日期startdate增加days天后的日期。
举例:
hive>selectdate_add('-12-08',10);
-12-18
12、日期减少函数: date_sub
语法: date_sub (string startdate, int days)
返回值: string
说明:返回开始日期startdate减少days天后的日期。
举例:
hive>selectdate_sub('-12-08',10);
-11-28
13、date_format函数
0: jdbc:hive2://node3:10000> select date_format('-1-1', 'yyyy-MM-dd');
+-------------+--+
| _c0 |
+-------------+--+
| -01-01 |
+-------------+--+
四、条件函数
1、if函数: if
语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
返回值:T
说明:当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull
举例:
hive>selectif(1=2,100,200);
200
hive>selectif(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>selectcase100when 50then 'tom'when 100then 'mary'else'tim'end;
mary
hive>selectcase200when 50then 'tom'when 100then '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>selectcasewhen 1=2then 'tom'when 2=2then 'mary'else'tim'end;
mary
hive>selectcasewhen 1=1then 'tom'when 2=2then 'mary'else'tim'end;
tom
select sid,casewhen sscore>=60then '及格'when sscore<60then '不及格'else'其他'end from score
五、转换函数
类似于java中的强转转换函数
公式:cast(表达式 as 数据类型)
cast函数,可以将"0607"这样类型的时间数据转化成int类型数据。
select cast(12.35as int);
select cast('0607'as int)
select cast('-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)建表
createtableemp(deptno int,ename string)rowformatdelimited fields terminated by'\t';
2)插入数据
load datalocalinpath "/export/data/hivedatas/emp.txt"intotableemp;
3)转换
selectdeptno,concat_ws("|",collect_set(ename))asems fromemp groupbydeptno;
行转列,COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。
4)结果查看
📢博客主页:https://lansonli.📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 Lansonli 原创,首发于 CSDN博客🙉📢大数据系列文章会每天更新,停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨