内置函数
1)显示所有内置函数列表
show functions;(默认有271个)
2)查看函数的基本使用
例如:
desc function funname;
desc function max;
3)查看函数的详细使用教程
例如:
desc function extended funname;
常用的内置函数:
数值操作
max min sum avg ------UDAF
ceil:向上取整
ceil(x) 大于等于参数的第一个整数
floor:向下取整
floor(x) 小于等于参数的第一个整数
round:四舍五入的
round(x[,d])参数1:需要四舍五入的数 参数2:小数位数
例:round(24.35456,2);
rand:求随机数 0-1
rand([seed])参数:随机数种子 种子一样 随机数固定,一般无参数
字符串操作
hive中的字符串 下标1开始
字符串 从右向左标记 -1开始
1)字符串切分
split:split(str,regex)参数1:要切分的字符串 参数2:分隔符
substr:substr(str,pos[,len])参数1:字符串 参数2:切分的位置 参数 3:截取长度
2)字符串查找 instr
instr(str,substr) 参数1:原始字符串 参数2:需要查找的子字符串
返回:子字符串在原始字符串中第一次出现的位置 不存在返回0
例:select instr(“dgdfg”,“df”);
3)字符串的大小写转换
ucase 大写
lcase 小写
upper 大写
lower 小写
ucase(str)
4)字符串去前后空格
trim(str) 去前后空格
ltrim(str) 去前空格
rtrim(str) 去后空格
5)字符串拼接
concat(str1,str2,…)将参数拼接为一个字符串
concat_ws(分隔符,str1,str2…)按照一定的分割符 拼接字符串
日期函数
1)获取当前系统时间戳
current_timestamp()
select current_timestamp(); 日期时间
current_date()
select current_date();获取当前系统法人日期
2)时间戳—日期
from_unixtime(unix_time,format) 参数1:时间戳 参数2:日期格式
例:
select from_unixtime(123467453,“yyyy-MM-dd hh:mm:ss”);
3)日期—时间戳
unix_timestamp(date[, pattern]) 参数1 日志 参数2 参数1的表达式
例:select unix_timestamp(“2019-5-20 17:27:56”,“yyyy-MM-dd hh:mm:ss”);
4)时间提取
year 年
month
day
hour
minute
second
select year(“2019-2-6”);
hive函数补充
if(判断,返回值1,返回值2)udf
nvl(需要判断的字段,参数null的返回值)udf
处理null值
getLong getInt getClass(参数,默认返回值)
explode(array|map) udtf
炸裂
数组:将数组的每一个元素 炸裂一行 数组有几个元素 一行 ==》 几行
map集合:将map集合的每一个元素 炸裂一行 两列
单独使用:参数
普通字段一个查询
id int info array。。。
select
id,lv.*
from test_array lateral view explode(work_add) lv;
case when
语法规则
1.语法一(类似于java中的switch-case 只能进行等值)
case 需要判断的字段
when 值1 then 返回值1
when 值2 then 返回值2
else 返回值3 end
例:stu_external中男返回1 女返回0
select sid,name,sex,case sex when “男” then 1 else 0 end sexid from stu_external;
2.语法二
case when
条件1 then 返回值1
条件2 then 返回值2
else 返回值 end
例:年龄小于18 0 ,18-20 1,>20 2
select name,age,case when age<18 then 0 when age>=18 and age<20 then 1 when age>-20 then 2 end from stu_external;
自定义函数
(1.在eclipse中建一个java项目,extends UDF类,写方法,打架包(项目上右键–》Export–》JAR file)–》导入虚拟机(cd jars–》alt+p)–》进入hive:add jar /home/joker-717/jars/架包名)
1)类继承 udf
2)重写 evaluate
返回值 evaluate(参数){
}
3)打jar包
4)上传到hive所在服务器
5)将jar包添加到hive的classpath下
add jar path;
list jars;
6)创建临时函数
craete temporary function funname as “”;