关系运算
等值比较: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 |
集合统计函数
扫描二维码关注公众号,回复:
6003475 查看本文章
个数统计函数: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 |