hive的内置函数和自定义函数
一、内置函数
1.一般常用函数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.取整函数 round() 当传入第二个参数则为精度 bround() 银行家舍入法:为5时,前一位为偶则舍,奇则进。 2.向下取整 floor() 3.向上取整 ceil/ceiling() 4.生成随机数 rand () 范围[0,1),传入种子时生成稳定随机数 5.自然指数函数 exp () e的n次方 log10 () 10为底的对数函数 ln() e为底的对数函数 log(base,v)base为底的函数 6.幂函数 pow/power (base,exponent) 7.根函数 aqrt() 开平发 cbrt() 开立方 8.绝对值函数 abs() 9.进制转换 bin() 转二进制 hex() 转十六进制 unhex() 反转十六进制 conv(v,from,to) 进制转换函数 10时间函数 unix_timestamp() 获取时间 from_unixtime(ut,formats) ut转为日期字符串 unix_timestamp(timestr,fs) 日期转化ut to_data(timestr) 返回日期部分 year(timestr) 返回指定部分,其他类似 datediff(endDate,startD) 日期比较函数(返回日期之间的天数) date_add(startDate,days) 日期增加,返回当前日期计算后的日期字符串 date_sub(startDate,days) 日期减少
2.字符串常用函数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1.取长度 length() 2.反转 reverse() 3.字符串连接函数 concat(strS) 无分隔符连接 concat_ws(separator,strS) 分隔符连接 4.字符串截取 substr/substring(str,index) 为正截取至此,为负截取后index个 ~~~~(str,index,length) 从index截取length个字符,正左负右 5.大小写转换 upper/ucase () lower/lcase () 6.去空格函数 trim() 两边去空格 ltrim() 左边去空格 rtrim() 右边去空格 7.正则表达式 regexp_replace(str,rge,replace) 替换字符串 regexp_extract(str,reg,index) 查找匹配字符,0返回全部,1返回第一个括号里的 8.URL解析函数 parse_url (str,’{extractPart}’[,’{extractKey}’]) 选项有:[HOST,PATH,QUERY,REF,PROTOCOL,FILE,AUTHORITY,USERINFO] select parse_url('http://facebook.com/path/p1.php?query=1', 'HOST') from dual;---facebook.com 9.json函数 get_json_object(jsonstr,'$.name') 10.字符串生成和补足函数 space(n) 空字符串 repeat(str,n) 重复字符串 lpad(str,legth,addstr) 左补足 split(str,splitstr) 字符串分割
二、自定义函数
自定义函数加载步骤 -> 只对当前会话有效 (1)新建项目 - JavaProject (2)将hive-exec-1.2.2.jar添加至构建路径中 (3)新建包 -> 新建类(继承UDF) (4)新建方法evaluate -> 指定返回值类型和参数列表 (5)导出项目 -> jar包(只需要包含src下的内容) (6)上传jar包至Linux系统 (7)打开Hive会话 (8)加载jar包:add jar /home/bigdata/udf.jar; -> 将jar包添加至构建路径(类的搜索加载路径) (9)将jar包中的类进行函数的命名 create temporary function sub as 'com.sand.udf.SubString'; (10)show functions; -> 验证是否添加成功
三、创建虚表
为了方便测试,可仿照oracle创建dual表 1.新建一个dual表 create table dual(dummy string); 2.创建仅包含X的文件 echo X >/home/hadoop/dual.txt 3.上传数据 load data local inpath '/home/hadoop/dual.txt' overwrite into table dual; 4.测试 select 1+1 from dual ; 返回2则成功