Hive函数
文章目录
- Hive函数
- 查看函数
- 函数
- 关系运算
- 数学运算
- 加法操作 +
- 减法操作 -
- 乘法操作 *
- 除法操作 /
- 取余操作 %
- 位与操作 &
- 位或操作 |
- 位异或操作 ^
- 位取反操作 ~
- 逻辑运算
- 逻辑与操作 AND
- 逻辑或操作 OR
- 逻辑非操作 NOT
- 数值计算
- 取整函数 round
- 指定精度取整函数 round
- 向下取整函数 floor
- 向上取整函数 ceil
- 向上取整函数 ceiling
- 取随机数函数 rand
- 自然指数函数 exp
- 以10为底对数函数 log10
- 以2为底对数函数 log2
- 对数函数 log
- 幂运算函数 pow
- 幂运算函数 power
- 开平方函数 sqrt
- 二进制函数 bin
- 十六进制函数 hex
- 反转十六进制函数 unhex
- 进制转换函数 conv
- 绝对值函数 abs
- 正取余函数 pmod
- 正弦函数 sin
- 反正弦函数 asin
- 余弦函数 cos
- 反余弦函数 acos
- positive函数 positive
- negative函数 negative
- 日期函数
- 当前时间戳函数 unix_timestamp
- 时间戳转日期函数 from_unixtime
- 指定格式日期转UNIX时间戳函数 unix_timestamp
- 日期时间转日期函数 to_date
- 日期转年函数 year
- 日期转月函数 month
- 日期转天函数 day
- 日期转小时函数 hour
- 日期转分钟函数 minute
- 日期转秒函数 second
- 日期转周函数 weekofyear
- 日期比较函数 datediff
- 日期增加函数 date_add
- 日期减少函数 date_sub
- 条件函数
- If函数 if
- 非空查找函数 COALESCE
- 条件判断函数 CASE
- 字符串函数
- 字符串长度函数 length
- 字符串反转函数 reverse
- 字符串连接函数 concat
- 带分隔符字符串连接函数 concat_ws
- 字符串截取函数 substr,substring
- 字符串转大写函数 upper,ucase
- 字符串转小写函数 lower,lcase
- 去空格函数 trim
- 左边去空格函数 ltrim
- 右边去空格函数 rtrim
- 正则表达式替换函数 regexp_replace
- 正则表达式解析函数 regexp_extract
- URL解析函数 parse_url
- json解析函数 get_json_object
- 空格字符串函数 space
- 重复字符串函数 repeat
- 首字符ascii函数 ascii
- 左补足函数 lpad
- 右补足函数 rpad
- 分割字符串函数 split
- 集合查找函数 find_in_set
- 集合统计函数
- 个数统计函数 count
- 总和统计函数 sum
- 平均值统计函数 avg
- 最小值统计函数 min
- 最大值统计函数 max
- 复合类型
- Map类型构建 map
- Struct类型构建 struct
- array类型构建 array
- 复杂类型
- array类型访问: A[n]
- map类型访问: M[key]
- struct类型访问: S.x
- Map类型长度函数: size(Map<k .V>)
- Array类型长度函数: size(Array<T>)
- 类型转换函数 cast
查看函数
查看当下可用的所有函数
show functions ;
查看函数的使用方式
describe function extended func_name;
函数
关系运算
运算符 | 描述 |
= | 等值比较 |
<> | 不等值比较 |
< | 小于比较 |
<= | 小于等于比较 |
> | 大于比较 |
>= | 大于等于比较 |
IS NULL | 空值判断 |
IS NOT NULL | 非空判断 |
LIKE | LIKE比较 |
RLIKE | JAVA的LIKE比较 |
REGEXP | RLIKE类似 |
数学运算
加法操作 +
select 1 + 1;
2
减法操作 -
select 1-1;
0
乘法操作 *
select 1*2;
2
除法操作 /
注意:hive中最高精度的数据类型是double,只精确到小数点后16位
select 1/2;
0.5
取余操作 %
select 5%2;
1
位与操作 &
select 9 & 8;
8
位或操作 |
select 4 | 2;
6
位异或操作 ^
select 2 ^ 3;
1
位取反操作 ~
select ~1;
-2
逻辑运算
逻辑与操作 AND
select 1 from t_window where 1=1 and 2=2;
1
逻辑或操作 OR
select 1 from t_window where 1=2 or 2=2;
1
逻辑非操作 NOT
select 1 from t_window where not 1=2;
1
数值计算
取整函数 round
语法: round(double a)
select round(3.1415926);
3
指定精度取整函数 round
语法: round(double a, int d)
select round(3.1415926,4);
3.1416
向下取整函数 floor
语法: floor(double a)
select floor(3.1415926)
3
向上取整函数 ceil
语法: ceil(double a)
select ceil(3.1415926)
4
向上取整函数 ceiling
语法: ceiling(double a)与ceil功能相同
select ceiling(3.1415926)
4
取随机数函数 rand
语法: rand(),rand(int seed)
指定seed,则会等到一个稳定的随机数序列
select rand();
0.26216557605661295
select rand(100);
0.7220096548596434
自然指数函数 exp
语法: exp(double a)
select exp(2);
7.38905609893065
select ln(7.38905609893065);
2
以10为底对数函数 log10
语法: log10(double a)
select log10(100);
2
以2为底对数函数 log2
语法: log2(double a)
select log2(8);
3
对数函数 log
语法: log(double base, double a)
select log(4,256);
4
幂运算函数 pow
语法: pow(double a, double p)
select pow(2,4);
16
幂运算函数 power
语法: power(double a, double p)
说明: 返回a的p次幂,与pow功能相同
select power(2,4);
16
开平方函数 sqrt
语法: sqrt(double a)
select sqrt(16);
4
二进制函数 bin
语法: bin(BIGINT a)
select bin(3);
11
十六进制函数 hex
语法: hex(BIGINT a)
说明: 如果变量是int类型,那么返回a的十六进制表示;如果变量是string类型,则返回该字符串的十六进制表示
select hex(17);
11
select hex('abc')
616263
反转十六进制函数 unhex
语法: unhex(string a)
说明: 返回该十六进制字符串所代码的字符串
select unhex('616263');
abc
进制转换函数 conv
语法: conv(BIGINT num, int from_base, int to_base)
说明: 将数值num从from_base进制转化到to_base进制
select conv(17,10,16);
11
绝对值函数 abs
语法: abs(double a) abs(int a)
说明: 返回数值a的绝对值
select abs(-3.8);
3.8
正取余函数 pmod
语法: pmod(int a, int b),pmod(double a, double b)
说明: 返回正的a除以b的余数
select pmod(5,4);
1
select pmod(-5,4);
-1
正弦函数 sin
语法: sin(double a)
select sin(0.5);
0.479425538604203
反正弦函数 asin
语法: asin(double a)
select asin(0.479425538604203);
0.5
余弦函数 cos
语法: cos(double a)
select cos(0.5);
0.8775825618903728
反余弦函数 acos
语法: acos(double a)
select acos(0.8775825618903728);
0.5
positive函数 positive
语法: positive(int a), positive(double a)
说明: 返回a
select positive(-1);
-1
negative函数 negative
语法: negative(int a), negative(double a)
说明: 返回-a
select negative(-1);
1
日期函数
当前时间戳函数 unix_timestamp
语法: unix_timestamp()
说明: 获得当前时区的UNIX时间戳
select unix_timestamp();
1677547165
时间戳转日期函数 from_unixtime
语法: from_unixtime(bigint unixtime[, string format])
说明: 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式
select from_unixtime(1677547165,'yyyy-MM-dd');
2023-02-28
指定格式日期转UNIX时间戳函数 unix_timestamp
语法: unix_timestamp(string date, string pattern)
说明: 转换pattern格式的日期到UNIX时间戳。如果转化失败,则返回0。
select unix_timestamp('20230228 09:36:30','yyyyMMdd HH:mm:ss');
1677576990
日期时间转日期函数 to_date
语法: to_date(string timestamp)
说明: 返回日期时间字段中的日期部分
select to_date('2023-02-28 09:36:30');
2023-02-28
日期转年函数 year
语法: year(string date)
说明: 返回日期中的年
select year('2023-02-28 09:36:30');
2023
日期转月函数 month
语法: month (string date)
说明: 返回日期中的月份。
select month('2023-02-28 09:36:30');
2
日期转天函数 day
语法: day (string date)
说明: 返回日期中的天
select day('2023-02-28 09:36:30');
28
日期转小时函数 hour
语法: hour (string date)
说明: 返回日期中的小时
select hour('2023-02-28 09:36:30');
9
日期转分钟函数 minute
语法: minute (string date)
说明: 返回日期中的分钟
select minute('2023-02-28 09:36:30');
36
日期转秒函数 second
语法: second (string date)
说明: 返回日期中的秒
select second('2023-02-28 09:36:30');
30
日期转周函数 weekofyear
语法: weekofyear (string date)
说明: 返回日期在当前的周数
select weekofyear('2023-02-28 09:36:30');
9
日期比较函数 datediff
语法: datediff(string enddate, string startdate)
说明: 返回结束日期减去开始日期的天数
select datediff('2023-12-08','2023-05-09')
213
日期增加函数 date_add
语法: date_add(string startdate, int days)
说明: 返回开始日期startdate增加days天后的日期
select date_add('2023-02-28',10);
2023-03-10
日期减少函数 date_sub
语法: date_sub (string startdate, int days)
说明: 返回开始日期startdate减少days天后的日期
select date_sub('2023-02-28',10);
2023-02-18
条件函数
If函数 if
语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
说明: 当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull
select if(1=1,100,200);
100
select if(1=2,100,200);
200
非空查找函数 COALESCE
语法: COALESCE(T v1, T v2, …)
说明: 返回参数中的第一个非空值;如果所有值都为NULL,那么返回NULL
select COALESCE(null,'100','50');
100
条件判断函数 CASE
语法: CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
说明:如果a等于b,那么返回c;如果a等于d,那么返回e;否则返回f
Select case 1 when 1 then 'one' when 2 then 'two' else 'null' end;
one
Select case 2 when 1 then 'one' when 2 then 'two' else 'null' end;
two
Select case 3 when 1 then 'one' when 2 then 'two' else 'null' end;
null
字符串函数
字符串长度函数 length
语法: length(string A)
说明:返回字符串A的长度
select length('abcedfg');
7
字符串反转函数 reverse
语法: reverse(string A)
说明:返回字符串A的反转结果
select reverse('abcedfg');
gfdecba
字符串连接函数 concat
语法: concat(string A, string B…)
说明:返回输入字符串连接后的结果,支持任意个输入字符串
select concat('abc','def','g');
abcdefg
带分隔符字符串连接函数 concat_ws
语法: concat_ws(string SEP, string A, string B…)
说明:返回输入字符串连接后的结果,SEP表示各个字符串间的分隔符
select concat_ws('-','abc','def','gh');
abc-def-gh
字符串截取函数 substr,substring
语法: substr(string A, int start),substring(string A, int start)
说明:返回字符串A从start位置到结尾的字符串
select substr('abcde',3);
cde
select substring('abcde',3);
cde
select substr('abcde',-1);
e
select substr('abcde',3,2);
cd
select substring('abcde',3,2);
cd
select substring('abcde',-2,2);
de
字符串转大写函数 upper,ucase
语法: upper(string A) ucase(string A)
说明:返回字符串A的大写格式
select upper('abCd');
ABSED
select ucase('abCd');
ABSED
字符串转小写函数 lower,lcase
语法: lower(string A) lcase(string A)
说明:返回字符串A的小写格式
select lower('abCd') from iteblog;
abcd
select lcase('abCd') from iteblog;
abcd
去空格函数 trim
语法: trim(string A)
说明:去除字符串两边的空格
select trim(' abc ');
abc
左边去空格函数 ltrim
语法: ltrim(string A)
说明:去除字符串左边的空格
select ltrim(' abc ');
abc
右边去空格函数 rtrim
语法: rtrim(string A)
说明:去除字符串右边的空格
select rtrim(' abc ');
abc
正则表达式替换函数 regexp_replace
语法: regexp_replace(string A, string B, string C)
说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数
select regexp_replace('hadoop', 'ha|oop', '');
d
正则表达式解析函数 regexp_extract
语法: regexp_extract(string subject, string pattern, int index)
说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符注意:在有些情况下要使用转义字符,下面的等号要用双竖线转义,这是java正则表达式的规则
select regexp_extract('hadoop', 'ha(.*?)(p)', 1);
oop
select regexp_extract('hadoop', 'ha(.*?)(p)', 2);
p
URL解析函数 parse_url
语法: parse_url(string urlString, string partToExtract [, string keyToExtract])
说明:返回URL中指定的部分。partToExtract的有效值为:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO.
select parse_url('https://www.baidu.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST');
www.baidu.com
json解析函数 get_json_object
语法: get_json_object(string json_string, string path)
说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL
select get_json_object('{"store":
{"fruit":\[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],
"bicycle":{"price":19.95,"color":"red"}},
"email":"amy@only_for_json_udf_test.net",
"owner":"amy"}
','$.owner');
amy
空格字符串函数 space
语法: space(int n)
说明:返回长度为n的字符串
select length(space(10));
10
重复字符串函数 repeat
语法: repeat(string str, int n)
说明:返回重复n次后的str字符串
select repeat('abc',5);
abcabcabcabcabc
首字符ascii函数 ascii
语法: ascii(string str)
说明:返回字符串str第一个字符的ascii码
select ascii('abcde');
97
左补足函数 lpad
语法: lpad(string str, int len, string pad)
说明:将str进行用pad进行左补足到len位
select lpad('abc',10,'td');
tdtdtdtabc
右补足函数 rpad
语法: rpad(string str, int len, string pad)
说明:将str进行用pad进行右补足到len位
select rpad('abc',10,'td');
abctdtdtdt
分割字符串函数 split
语法: split(string str, string pat)
说明: 按照pat字符串分割str,会返回分割后的字符串数组
select split('abtcdtef','t');
["ab","cd","ef"]
集合查找函数 find_in_set
语法: find_in_set(string str, string strList)
说明: 返回str在strlist第一次出现的位置,strlist是用逗号分割的字符串。如果没有找该str字符,则返回0
select find_in_set('ab','ef,ab,de');
2
集合统计函数
个数统计函数 count
语法: count(), count(expr), count(DISTINCT expr[, expr_.])
说明: count()统计检索出的行的个数,包括NULL值的行;count(expr)返回指定字段的非空值的个数;count(DISTINCT expr[, expr_.])返回指定字段的不同的非空值的个数
select count(*) from t_window;
10
总和统计函数 sum
语法: sum(col), sum(DISTINCT col)
说明: sum(col)统计结果集中col的相加的结果;sum(DISTINCT col)统计结果中col不同值相加的结果
select sum(cost) from t_window;
100
平均值统计函数 avg
语法: avg(col), avg(DISTINCT col)
说明: avg(col)统计结果集中col的平均值;avg(DISTINCT col)统计结果中col不同值相加的平均值
select avg(cost) from t_window;
10
最小值统计函数 min
语法: min(col)
说明: 统计结果集中col字段的最小值
select min(cost) from t_window;
8
最大值统计函数 max
语法: max(col)
说明: 统计结果集中col字段的最大值
select max(t) from t_window;
15
复合类型
Map类型构建 map
语法: map (key1, value1, key2, value2, …)
说明:根据输入的key和value对构建map类型
Create table t_window as select map('100','tom','200','mary') as t from t_window;
describe t_window;
t map<string ,string>
select t from t_window;
{"100":"tom","200":"mary"}
Struct类型构建 struct
语法: struct(val1, val2, val3, …)
说明:根据输入的参数构建结构体struct类型
create table t_window as select struct('tom','mary','tim') as t from t_window;
describe t_window;
t struct<col1:string ,col2:string,col3:string>
select t from t_window;
{"col1":"tom","col2":"mary","col3":"tim"}
array类型构建 array
语法: array(val1, val2, …)
说明:根据输入的参数构建数组array类型
create table t_window as select array("tom","mary","tim") as t from t_window;
describe t_window;
t array<string>
select t from t_window;
["tom","mary","tim"]
复杂类型
array类型访问: A[n]
语法: A[n]
操作类型: A为array类型,n为int类型
说明:返回数组A中的第n个变量值。数组的起始下标为0。比如,A是个值为[‘foo’, ‘bar’]的数组类型,那么A[0]将返回’foo’,而A[1]将返回’bar’
create table t_window as select array("tom","mary","tim") as t from t_window;
select t[0],t[1],t[2] from t_window;
tom mary tim
map类型访问: M[key]
语法: M[key]
操作类型: M为map类型,key为map中的key值
说明:返回map类型M中,key值为指定值的value值。比如,M是值为{‘f’ -> ‘foo’, ‘b’ -> ‘bar’, ‘all’ -> ‘foobar’}的map类型,那么M[‘all’]将会返回’foobar’
Create table t_window as select map('100','tom','200','mary') as t from t_window;
select t['200'],t['100'] from t_window;
mary tom
struct类型访问: S.x
语法: S.x
操作类型: S为struct类型
说明:返回结构体S中的x字段。比如,对于结构体struct foobar {int foo, int bar},foobar.foo返回结构体中的foo字段
create table t_window as select struct('tom','mary','tim') as t from t_window;
describe t_window;
t struct<col1:string ,col2:string,col3:string>
select t.col1,t.col3 from t_window;
tom tim
Map类型长度函数: size(Map<k .V>)
语法: size(Map<k .V>)
说明: 返回map类型的长度
select size(map('100','tom','101','mary')) from t_window;
2
Array类型长度函数: size(Array)
语法: size(Array)
说明: 返回array类型的长度
select size(array('100','101','102','103')) from t_window;
4
类型转换函数 cast
语法: cast(expr as )
返回值: Expected “=” to follow “type”
说明: 返回转换后的数据类型
select cast(1 as bigint) from t_window;
1