hive常用的函数和udf开发
hive的udf开发
继承udf这个类,方法重载evaluate
1. add jar /opt/udftest.jar
2. create temporary function 功能名as “主类路径”;
使用python脚本transform开发:
1. add FILE weekday_mapper.py;
2. SELECT TRANSFORM (要转化的字段)USIN ‘python 脚本’ AS (生成的字段名)FROM t_rating;
数据:
{"movie":"3664","rate":"4","timeStamp":"961685303","uid":"5225"}
新建一张表加载进去数据
create table temp(line string);
脚本:
#!/bin/python
import sys
import datetime
import json
for line in sys.stdin:
if line!='\n':
result=json.loads(line.strip())
movie=result['movie']
rate=result['rate']
uid=result['uid']
weekday =datetime.datetime.fromtimestamp(float(result['timeStamp'])).isoweekday()
print('\t'.join([movie,rate,str(weekday),uid]))
使用脚本:
add FILE weekday.py;
select transform (line) using 'python weekday.py' as (movie,rate,wek,id) from temp;
常用的函数:
1. row_number() over(partition by fields order by fields):
用于对返回的字段结果进行分组排序,并编号
例如:
```
select id,name,dt,rank from (select id,name,dt,row_number() over(partition by country order by dt) as rank from person) as tmp where tmp.rank<3;
```
结果:

2. 日期函数:
• 日期比较函数 : datediff
语法: datediff(string enddate, string startdate)
返回值: int
说明: 返回结束日期减去开始日期的天数。
举例:
hive> select datediff(‘2012-12-08’,‘2012-05-09’) from dual;
213
• 日期增加函数 : date_add
语法: date_add(string startdate, int days)
返回值: string
说明: 返回开始日期startdate增加days天后的日期。
举例:
hive> select date_add(‘2012-12-08’,10) from dual;
2012-12-18
• 日期减少函数 : date_sub
语法: date_sub (string startdate, int days)
返回值: string
说明: 返回开始日期startdate减少days天后的日期。
举例:
hive> select date_sub(‘2012-12-08’,10) from dual;
2012-11-28
3. 条件函数
case when then end
select *,
case
when salary < 5000 then "低等收入"
when salary>= 5000 and salary < 10000 then "中等收入"
when salary > 10000 then "高等收入"
end as level,
case sex
when "female" then 1
when "male" then 0
end as flag
from employee
4.字符串函数:
- 字符串长度函数:length
- 字符串反转函数:reverse
- 字符串连接函数:concat
- 带分隔符字符串连接函数:concat_ws
- 字符串截取函数:substr,substring
- 字符串截取函数: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
- 字符串长度函数: length
语法: length(string A)
返回值: int
说明:返回字符串A的长度
举例:
hive> select length(‘abcedfg’) from dual;