Hive_函数

目录

2 字符串函数

2.1 字符串函数

2.2 字符串处理

3 时间函数

3.1 时间获取

3.2 时间转化

3.3 时间处理

5 窗口函数

5.1 排序

5.2 聚合

6 逻辑函数

6.1 条件判断

 7 其它函数

8 自定义UDF函数


2 字符串函数

2.1 字符串函数

(1) 获取字符串的长度

-- 返回字符串的长度,要求参数必须是UTF-8编码,否则返回-1
length(string str)

(2) 解析json

-- param1:需要解析的json字段;param2:遇到数组就用 [0,1,2...] 0,1,2是数组对应的元素,遇到jsonObject直接用 ".key"取出想要获取的value.
-- 例[{"name":"王二","sex":"男","age":"25"},{"name":"李狗嗨","sex":"男","age":"47"}]:SELECT get_json_object(xjson,"$.[0].age") FROM person;
get_json_object(param1,"$.param2")

2.2 字符串处理

 (1) 字符串拼接

-- concat
-- 将多个字段拼接成字符串
-- 如有任何一个参数为NULL,则返回值为NULL
concat(str1,str2,…)

-- concat_ws
-- 将多个字段用分割符拼接成字符串
-- 如果分隔符为NULL,则结果为NULL.函数会忽略任何分隔符参数后的NULL值.但不会忽略''
concat_ws(separator,str1,str2,…)

-- wm_concat
-- 将多个字段用分割符拼接成字符串,返回一条记录,可配合分组函数使用
wm_concat(分隔符,字段)

(2) 截取字符串

-- 返回字符串A从下标start位置开始,长度为len的字符串;substring(string A,int start,int len)作用相同
substr(string A,int start,int len)

(3) 拆分字符串

-- 按照pat字符串分割str,会返回分割后的字符串数组
split(string str, string pat)

3 时间函数

3.1 时间获取

(1) 获取当前时间的时间戳

unix_timestamp()

3.2 时间转化

(1) 时间转时间戳

-- 把时间格式转换成时间戳,得到参数对应的时间戳,参数date要满足'yyyy-MM-dd' HH:mm:ss'或'yyyy-MM-dd';
unix_timestamp(datatime)

(2) 时间戳转时间

-- tt为10位数的时间戳,把时间戳转换成时间格式
from_unixtime(tt)
from_unixtime(tt,'yyyy-MM-dd')

(3) 格式化时间

-- 根据format字符串格式化date值
date_format(datatime,format)

3.3 时间处理

(1) 计算时间差

-- 计算两个时间的差值,并转换成指定的单位
datediff(end_datetime,start_datetime,datepart)

(2) 修改时间

-- 按照指定的单位和幅度修改时间
dateadd(datetime,delta,datepart)

5 窗口函数

5.1 排序

-- row_number
/* 按照partition by后的列对所有行分组,对于每一组,根据order by后的列,给每一行分配一个序号
,从1开始.排序相同时序号不会重复 */
row_number() over(partition by col_list1 order by col_list2)

-- rank
/* 按照partition by后的列对所有行分组,对于每一组,根据order by后的列,给每一行分配一个序号
,从1开始.对相同的数值,输出相同的序号,下一个序号跳过 */
rank() over(partition by col_list1 order by col_list2)

-- dense_rank
/* 按照partition by后的列对所有行分组,对于每一组,根据order by后的列,给每一行分配一个序号
,从1开始.对相同的数值,输出相同的序号,下一个序号不会跳过 */
dense_rank() over(partition by col_list1 order by col_list2)

5.2 聚合

 (1) 求和

-- 按照partition by后的列对所有行分组,每组聚合.
-- 如使用了order by,则只取截止到当前行的数据来聚合
sum(列名) over(partition by col_list1 [order by col_list2 asc/desc])

(2) 求平均值

-- 按照partition by后的列对所有行分组,每组聚合.
-- 如使用了order by,则只取截止到当前行的数据来聚合
avg(列名) over(partition by col_list1 [order by col_list2 asc/desc])

(3) 计数

-- 按照partition by后的列对所有行分组,每组聚合.
-- 如使用了order by,则只取截止到当前行的数据来聚合
count(*) over(partition by col_list1 [order by col_list2 asc/desc])
count(1) over(partition by col_list1 [order by col_list2 asc/desc])
count([distinct] 列名) over(partition by col_list1 [order by col_list2 asc/desc])

(4) 求最大值

-- 按照partition by后的列对所有行分组,每组聚合.
-- 如使用了order by,则只取截止到当前行的数据来聚合
max(列名) over(partition by col_list1 [order by col_list2 asc/desc])

(5) 求最小值

-- 按照partition by后的列对所有行分组,每组聚合.
-- 如使用了order by,则只取截止到当前行的数据来聚合
min(列名) over(partition by col_list1 [order by col_list2 asc/desc])

6 逻辑函数

6.1 条件判断

(1) if

if(表达式,结果1,结果2)

 (2) nvl

-- 如果字段值为null,则返回 值1,否则返回 字段值
nvl(字段,值1)

(3) case when

-- 表达式1成立时,返回 值1;表达式1不成立 且 表达式2成立时,返回 值2;否则返回 值3
-- 不加else子句时,如果when后的表达式都不成立,则返回null
case    when 表达式1 then 值1
        when 表达式2 then 值2
        ...
        else 值3
end

 7 其它函数

(1) 查看支持的函数

show functions;

 (2) 数据类型转换

-- cast:数据类型转换
cast(字段名 as 转换的类型)

-- to_char:将布尔型、整型或者浮点型数值转为对应的字符串
to_char(字段名)

8 自定义UDF函数

    ①继承UDF或者UDAF或者UDTF,重写evaluate方法;

    ②将写好的类打包为jar,如LowerUDF.jar;

    ③进入到Hive shell环境中,输入命令add jar /home/hadoop/LowerUDF.jar注册该jar文件

    ④为该类起一个别名,create temporary function lower_udf as 'UDF.lowerUDF';


版权声明:本文为weixin_43875878原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。