hive内置函数
数字函数
取整函数
round
语法:round(double num)
返回值:BIGINT
该函数返回num的整数部分,遵循四舍五入
select round(2.35)
2
round还可以进行指定精度
语法:round(double num, int i)
返回值:DOUBLE
返回精度为i 的double
select round(2.35, 1)
2.4
floor
该函数用于向下取整
语法:floor(double num)
返回值:BIGINT
返回小于等于num的最大的整数
select round(2.35)
2
ceil
该函数用于向上取整
语法:ceil(double num)
返回值:BIGINT
返回大于等于num的最小整数
select ceil(2.35)
3
取随机数
语法:rand(int seed)
返回值:DOUBLE
返回一个0到1之间的随机数,如果指定seed,会返回一个稳定的随机数
hive (default)> select rand();
0.9263688016367634
hive (default)> select rand();
0.14751369361344724
hive (default)> select rand(100);
0.7220096548596434
hive (default)> select rand(100);
0.7220096548596434
幂运算
语法:pow(double a, double p)
返回值:DOUBLE
返回a的p次幂
hive (default)> select pow(2, 3);
8.0
绝对值
语法:abs(double a) abs(int a)
返回值:DOUBLE INT
返回a的绝对值
hive (default)> select abs(-12.34);
12.34
hive (default)> select abs(-12);
12
字符串函数
length
语法:length(string s)
返回值:INT
返回字符串A的长度
hive (default)> select length('asd');
3
reverse
语法:reverse(string s)
返回值:string
返回字符串s的反转效果
hive (default)> select reverse('asd');
dsa
concat
语法:concat(string a, string b, …)
返回值:string
返回输入的若干字符数按连接后的结果
hive (default)> select concat('hel', 'lo');
hello
hive (default)> select concat('hel', 'lo', 'world');
helloworld
concat_ws
语法:concat_ws(string SEP, string a, string b)
返回值:string
返回输入字符串连接后的结果,SEP表示字符串间的分隔符
hive (default)> select concat_ws(',', 'he','llo' ,'world');
he,llo,world
substr/substring
语法:substr(string a, int start), substring(string a, int start)
返回值:string
返回a从start位置到结尾的字符串
hive (default)> select substr('hello', 2);
ello
hive (default)> select substring('hello', 2);
ello
upper, ucase
语法:upper(string a), ucase(string a)
返回值:string
返回a的大写形式
hive (default)> select upper('asd');
ASD
hive (default)> select ucase('asd');
ASD
lower,lcase
语法:lower(string a), lcase(string a)
返回值:string
返回a的小写形式
hive (default)> select lower('ASD');
asd
hive (default)> select lcase('ASD');
asd
trim
语法:trim(string a)
返回值:string
去除a两边的空格
hive (default)> select trim(' a s d ');
a s d
ltrim
语法:ltrim(string a)
返回值:string
去除a左面的空格
hive (default)> select ltrim(' a s d ');
a s d
rtrim
语法:ltrim(string a)
返回值:string
去除a右面的空格
hive (default)> select rtrim(' a s d ');
a s d
regexp_replace
正则表达式替换函数
语法:regexp_replace(string a, string b, string c)
返回值:string
将a中符合java正则表达式b的部分替换成c
hive (default)> select regexp_replace('football', 'foot', 'basket');
basketball
parse_url
URL解析函数
语法:parse_url(string url,string partToExtract)
返回值:string
hive (default)> select parse_url('https://blog.csdn.net/weixin_62759952/article/details/128889221?spm=1001.2014.3001.5501', 'HOST');
blog.csdn.net
hive (default)> select parse_url('https://blog.csdn.net/weixin_62759952/article/details/128889221?spm=1001.2014.3001.5501', 'PATH');
/weixin_62759952/article/details/128889221
split
语法:split(string s, string a)
返回值:array
按照字符串a来分割字符串s,返回分割后的字符串数组
hive (default)> select split('asdasdasd', 's');
["a","da","da","d"]
日期函数
获取当前时间戳
语法:unix_timestamp()
返回值:bigint
获得当前时区的UNIX时间戳
hive (default)> select unix_timestamp();
1675746126
时间戳转日期函数
语法:from_unixtime(bigint unixtime, string format)
返回值:string
转换unix时间戳到当前时区的时间格式
hive (default)> select from_unixtime(1675746126, 'yyyy-MM-dd HH:mm:ss');
2023-02-07 05:02:06
日期转UNIX时间戳
语法:unixtimestamp(string date, string pattern)
返回值:bigint
转换pattern格式的日期到UNIX时间戳,如果转换失败,返回0
hive (default)> select unix_timestamp('2023-02-07 05:02:06', 'yyyy-MM-dd HH:mm:ss');
1675746126
日期时间转日期函数
语法:to_date(string time)
返回值:string
返回time中的日期部分
hive (default)> select to_date('2023-02-07 05:02:06');
2023-02-07
日期转年函数
语法:year(string date)
返回值:int
返回日期中的年
hive (default)> select year('2023-02-07 05:02:06');
2023
日期转月函数
语法:month(string date)
返回值:int
返回日期中的月份
hive (default)> select month('2023-02-07 05:02:06');
2
日期转天函数
语法:day(string date)
返回值:int
返回日期中的天
hive (default)> select day('2023-02-07 05:02:06');
7
类似的还有hour、minute、second函数用来获取小时、分钟、秒
日期转周函数
语法:weekofday(string date)
返回值:int
返回日期当前所在的周
hive (default)> select weekofyear('2023-02-07 05:02:06');
6
日期比较函数
语法:datediff(string date1, string date2)
返回值:int
返回date1减去date2的天数
hive (default)> select datediff('2023-02-07', '2023-02-05');
2
日期增加函数
语法:date_add(string date, int day)
返回值:string
返回date加day天后的日期
hive (default)> select date_add('2023-02-07', 2);
2023-02-09
日期减少函数
语法:datesub(string date, int day)
返回值:string
返回date减去day天后的日期
hive (default)> select date_sub('2023-02-07', 2);
2023-02-05
日期转换函数
语法:data_format(string date, string format)
返回值:string
将date转换成format格式的日期
hive (default)> select date_format('2023-02-07', 'yyyy');
2023
条件函数
if
语法:if(boolean test, T TrueValue, T FalseValue)
返回值:T
当test为true,返回TrueValue,否则返回FalseValue
hive (default)> select if(1=1, 100, 200);
100
hive (default)> select if(1=2, 100, 200);
200
case
第一种用法
语法:case a when b then c else d end
返回值:T
如果a等于b返回c,否则返回d
hive (default)> select case 100 when 20 then 20 when 50 then 50 when 100 then 100 else 200 end;
100
hive (default)> select case 100 when 20 then 20 else 200 end;
200
第二种用法
语法:case when a then b else c end
返回值:T
如果a为true返回b否则返回c
hive (default)> select case when 1=2 then 1 when 1=1 then 2 else 3 end;
2
转换函数
语法:cast(字段 as 数据类型)
hive (default)> select cast(12.21 as int);
12
hive (default)> select cast('123' as int);
123
hive (default)> select cast('2023-2-7' as date);
2023-02-07
行转列
将多行数据转换成一个列
行转列用到的函数:
concat(str1, str2) 字符串拼接
concat_ws(s, str1, str2) 用分割符进行字符串拼接
collect_set(col) 根据某个值进行去重,产生array类型字段
en a then b else c end
返回值:T
如果a为true返回b否则返回c
hive (default)> select case when 1=2 then 1 when 1=1 then 2 else 3 end;
2
转换函数
语法:cast(字段 as 数据类型)
hive (default)> select cast(12.21 as int);
12
hive (default)> select cast('123' as int);
123
hive (default)> select cast('2023-2-7' as date);
2023-02-07
行转列
将多行数据转换成一个列
行转列用到的函数:
concat(str1, str2) 字符串拼接
concat_ws(s, str1, str2) 用分割符进行字符串拼接
collect_set(col) 根据某个值进行去重,产生array类型字段