Hive的常用函数大全

关系运算

等值比较:A=B 如果表达式A和表达式B相等,返回true,否则返回false
不等值比较:A<>B 如果表达式A和表达式B不相等,返回true,否则返回false(若A和B有一个为null,则返回null)
小于/大于比较:A<B / A>B 如果表达式A小于/大于表达式B,返回true,否则返回false(若A和B有一个为null,则返回null)
小于等于/大于等于比较:A<=B / A>=B 如果表达式A小于或等于/大于或等于表达式B,返回true,否则返回false(若A和B有一个为null,则返回null)

上述的关系运算的方法适用于所有的基本数据类型。注意:常用的时间比较可以先to_date之后再比较。

空值判断:A is null 如果表达式A为null,则返回true,否则为false
非空判断:A is not null 如果表达式A不为null,则返回true,否则为false
LIKE比较:A like “%B_” 如果字符串A符合字符串B的正则表达式,则返回true,否则返回false(若A和B有一个为null,则返回null)注意:仅支持string类型

LIKE比较也有否定的写法:not A like “%B_”。同时LIKE比较多用于模糊查询,但是效率较低。
正则表达式中,“%”表示任意数量的字符,“_”表示任意单个字符。

数学运算

数学运算包括加法(+),减法(-),乘法(*),除法(/),取余(%),位与(&),位或(|),位异或(^),位取反(~)等操作。返回的结果类型为做运算的两个值类型的最小父类型。
需要注意的是,所有的数学运算的操作类型是所有的数值类型,在hive中,字符串的连接不能用"+"连接。
hive中的最高精度的数据类型是double,只精确到小时点后16位,在做除法运算时要特别注意。一般这样的操作最好通过round指定精度,例如:select round(5/3 , 2);

逻辑运算

AND :A and B 如果A和B均为true,则返回true,否则为false;A和B有一个为null,则返回null
OR:A or B 如果A和B有一个为true或A和B均为true,则返回true
NOT:not A 如果A为true,则返回false,A为false,则返回 true。注意:A为null,则返回true

数值计算

取整函数:round(double a,int b) 返回double a 的取小数点后b位的部分(遵循四舍五入),返回值为double类型;不写参数b则默认取整数部分,返回值为bigint类型
向下取整函数:floor(double a) 返回等于或小于该double变量的最大的整数,返回值为bigint类型
向上取整函数:ceil(double a) 返回等于或者大于该double变量的最小整数,返回值为bigint类型 ;另一种写法:ceiling(double a)
取随机数函数:rand(int seed) 返回一个0到1范围内的随机数。如果指定种子seed,则会得到一个稳定的随机数序列,返回值为double
对数函数:log(double a,double b) 返回以a为底b的对数,返回值为double
幂运算函数:pow(double a,double b) 返回a的p次幂,返回值为double;另一种写法:power(double a,double b)
开平方函数:sqrt(double a) 返回a的平方根,返回值为double
绝对值函数:abs(double a/ int a) 返回a的绝对值,返回值为double/int

日期函数

UNIX时间戳转日期函数:from_unixtime(bigint unixtime[, string format]) 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定的时间的秒数)到当前时区的时间格式,返回值为string
获取当前UNIX时间戳函数:unix_timestamp() 获取当前时区的UNIX时间戳,返回值为bigint
日期转UNIX时间戳函数:unix_timestamp(string date) 转换格式为“yyyy-MM-dd HH:mm:ss”的日期到UNIX时间戳。如果转化失败,则返回0
日期时间转日期函数:to_date(string times) 返回日期时间字段中的日期部分,返回值为string
日期转年函数:year(string date) 返回日期中的年,返回值为int
日期转月函数:moth(string date) 返回日期中的月,返回值为int
日期转天函数:day(string date) 返回日期中的天,返回值为int
日期转小时函数:hour(string date) 返回日期中的小时,返回值为int
日期转分钟函数:minute(string date) 返回日期中的分钟,返回值为int
日期转秒函数:second(string date) 返回日期中的秒,返回值为int
日期转周函数:weekofyear (string date) 返回日期在当前的周数,返回值为int
日期比较函数:datediff(string enddate,stringstartdate) 返回结束日期减去开始日期的天数,返回值为int
日期增加函数:date_add(string startdate,int days) 返回开始日期startdate增加days天后的日期,返回值为int
日期减去函数:date_sub(string startdate,int days) 返回开始日期startdate减少days后的日期,返回值为int

条件函数

if函数:if(boolean a,T b,T c) 当条件a为true时,返回b,否则返回c,返回值为T
非空查找函数:coalesce(T v1,T v2,T v3…) 返回参数中的第一个非空值,若都为null,则返回null,返回值为T
条件判断函数:case a when b then c [when d then e] else f end 如果a等于b则返回c,如果a等于d,则返回e,否则返回f

字符串函数

字符串长度函数:length(string a) 返回字符串a的长度,返回值为int
字符串反转函数:reverse(string a) 返回字符串a的反转结果,返回值为string
字符串连接函数:concat(string a,string b…) 返回输入字符串连接后的结果,支持任意个输入字符串,返回值为string
带分隔符字符串连接函数:concat_ws(string sep,string a,string b…) 返回输入字符串连接后的结果,sep表示各个字符间的分隔符,支持任意个字符串连接,返回值为string
字符串截取函数:substr(string a,int start,int len) 返回字符串a从strat位置开始,长度为len的字符串,返回值为string。和substring(string a,int start,int len)的用法一样
字符串转大写函数:upper(string a) 返回字符串a的大写格式,返回值为string。和ucase(string a)的用法一样
字符串转小写函数:lower(string a) 返回字符串a的小写格式,返回值为string。和lcase(string a)的用法一样
去空格函数:trim(string a) 去除字符串两边的空格,返回值为string
左边去空格函数:ltrim(string a) 去除字符串左边的空格,返回值为string
右边去空格函数:rtrim(string a) 去除字符串右边的空格,返回值为string
正则表达式替换:regexp_replace(string a,string b,string c) 将字符串a中符合java正则表达式b的部分替换为c。注意,在有些情况下要使用转义字符。返回值为string
正则表达式解析函数:regexp_extract(string subject,string pattern,int index) 将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符,返回值为string
URL解析函数:parse_url(string urlstr,string partToExtract[,string keyToExtract]) 返回URL中指定的部分,返回值为string。partToExtract的有效值为:HOST,PATH,QUERY,REF,PROTOCOL,AUTHORITY,FILE,USERINFO
json解析函数:get_json_object(string json_string,string path) 解析json的字符串json_string,返回path指定的内容,返回值为string。如果输入的json字符串无效则返回null。
空格字符串函数:space(int n) 返回长度为n的字符串,返回值为string
重复字符串函数:repeat(string a,int b) 将字符串a重复b次后返回,返回值为string
首字符ascii函数:ascii(string a) 返回字符串a的第一个字符串的ascii码,返回值为int
左补足函数:lpad(string a,int b,string pad) 将字符串a用字符串pad左补齐至b位,返回值为string
右补足函数:rpad(string a,int b,string pad) 将字符串a用字符串pad右补齐至b位,返回值为string
分割字符串函数:split(string a,string pat) 按照字符串pat分割字符串a,返回一个分割后的字符串数组,返回职位array[string]
集合查找函数:find_in_set(string a,string strlist) 返回字符串a在strlist中第一次出现的位置,strlist是用逗号分割的字符串(如:“ab,cd,ef”)。如果没有找到字符串a则返回0。返回值为int

集合统计函数

个数统计函数:count(*)/count(expr) count(*)统计检索出的行的个数,包括全空的行,也可以写成count(1);count(expr)返回指定字段expr的非空值的个数;若想返回字段expr不同的非空值的个数,可以和去重函数一起使用:count(distinct expr[,expr_.])
总和统计函数:sum(col) 统计结果集中col的相加的结果,返回值为double
平均值统计函数:avg(col) 统计结果集中col的平均值,返回值为double
最小值统计函数:min(col) 统计结果集中col字段的最小值,返回值为double
最大值统计函数:max(col) 统计结果集中col字段的最大值,返回值为double

复合类型操作

Map类型构建:map(k1,v1,k2,v2…) 根据输入的key和value对构建map类型,如{k1:v1,k2:v2…}。访问方式为:M[key]
Struct类型构建:struct(v1,v2,v3…) 根据输入的参数构建结构体struct类型 ,如{‘col1’:v1,‘col2’:v2,‘col3’:v3…} 。访问方式为:S.coln
array类型构建:array(v1,v2,v3…) 根据输入的参数构建数组array类型,如[v1,v2,v3…] 。访问方式为A[n]

在构建这些复合类型的时候一般会起一个别名,通过这个别名进行访问。

复杂类型长度统计函数

Map类型长度函数:size(Map<K,V>) 返回map类型的长度,返回值为int
array类型长度函数:size(Array) 返回Array类型的长度,返回值为int
类型转换函数:cast(expr as T) 将expr字段的类型转换为T

猜你喜欢

转载自blog.csdn.net/weixin_44319333/article/details/88887430