Hive会将常用的逻辑封装成函数给用户进行使用,类似于Java中的函数。
好处:避免用户反复写逻辑,可以直接拿来使用。
重点:用户需要知道函数叫什么,能做什么。
Hive提供了大量的内置函数,按照其特点可大致分为如下几类:单行函数、聚合函数、炸裂函数、窗口函数。
以下命令可用于查询所有内置函数的相关信息。
show functions;
desc function upper;
desc function extended upper;
单行函数的特点是一进一出,即输入一行,输出一行。
单行函数按照功能可分为如下几类: 日期函数、字符串函数、集合函数、数学函数、流程控制函数等。
案例实操:查询出所有员工的薪水后加1显示
select sal + 1 from emp;
select round(3.3);
select ceil(3.1) ;
select floor(4.8);
语法一:substring(string A, int start)
返回值:string
说明:返回字符串A从start位置到结尾的字符串
语法二:substring(string A, int start, int len)
返回值:string
说明:返回字符串A从start位置开始,长度为len的字符串
说明:获取第二个字符以后的所有字符:
说明:获取倒数第三个字符以后的所有字符
select substring("atguigu",-3);
说明:从第3个字符开始,向后获取2个字符
select substring("atguigu",3,2);
语法:replace(string A, string B, string C)
返回值:string
说明:将字符串A中的子字符串B替换为C
select replace('atguigu', 'a', 'A')
语法:regexp_replace(string A, string B, string C)
返回值:string
说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符。
select regexp_replace('100-200', '(\\d+)', 'num')
语法:字符串 regexp 正则表达式
返回值:boolean
说明:若字符串符合正则表达式,则返回true,否则返回false。
说明:正则匹配成功,输出true
select 'dfsaaaa' regexp 'dfsa+'
说明:正则匹配失败,输出false
select 'dfsaaaa' regexp 'dfsb+';
语法:repeat(string A, int n)
返回值:string
说明:将字符串A重复n遍。
select repeat('123', 3);
语法:split(string str, string pat)
返回值:array
说明:按照正则表达式pat匹配到的内容分割str,分割后的字符串,以数组的形式返回。
语法:nvl(A,B)
说明:若A的值不为null,则返回A,否则返回B。
select nvl(null,1);
语法:concat(string A, string B, string C, ……)
返回:string
说明:将A,B,C……等字符拼接为一个字符串
select concat('beijing','-','shanghai','-','shenzhen');
语法:concat_ws(string A, string…| array(string))
返回值:string
说明:使用分隔符A拼接多个字符串,或者一个数组的所有元素。
语法:get_json_object(string json_string, string path)
返回值:string
说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。
获取json数组里面的json具体数据
select get_json_object('[{"name":"大海海","sex":"男","age":"25"},{"name":"小宋宋","sex":"男","age":"47"}]','$.[0].name');
获取json数组里面的数据
select get_json_object('[{"name":"大海海","sex":"男","age":"25"},{"name":"小宋宋","sex":"男","age":"47"}]','$.[0]');
语法:unix_timestamp()
返回值:bigint
说明:-前面是日期后面是指,日期传进来的具体格式
select unix_timestamp('2022/08/08 08-08-08','yyyy/MM/dd HH-mm-ss');
语法:from_unixtime(bigint unixtime[, string format])
返回值:string
select from_unixtime(1659946088);
select current_date;
select current_timestamp;
语法:month (string date)
返回值:int
select month('2022-08-08 08:08:08');
语法:day (string date)
返回值:int
select day('2022-08-08 08:08:08')
语法:hour (string date)
返回值:int
select hour('2022-08-08 08:08:08');
语法:datediff(string enddate, string startdate)
返回值:int
select datediff('2021-08-08','2022-10-09');
语法:date_add(string startdate, int days)
返回值:string
说明:返回开始日期 startdate 增加 days 天后的日期
select date_add('2022-08-08',2);
语法:date_sub (string startdate, int days)
返回值:string
说明:返回开始日期startdate减少days天后的日期。
select date_sub('2022-08-08',2);
select date_format('2022-08-08','yyyy年-MM月-dd日')
语法一:case when a then b [when c then d]* [else e] end
返回值:T
说明:如果a为true,则返回b;如果c为true,则返回d;否则返回 e
select case when 1=2 then 'tom' when 2=2 then 'mary' else 'tim' end from location;
语法二: case a when b then c [when d then e]* [else f] end
返回值: T
说明:如果a等于b,那么返回c;如果a等于d,那么返回e;否则返回f
select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end from location;
语法:if(boolean testCondition, T valueTrue, T valueFalseOrNull)
返回值:T
说明:当条件testCondition为true时,返回valueTrue;否则返回valueFalseOrNull
条件满足,输出正确
select if(10 > 5,'正确','错误');
条件满足,输出错误
select if(10 < 5,'正确','错误');
select size(array('beijing','shenzhen','shanghai')) from location;
语法:map (key1, value1, key2, value2, …)
说明:根据输入的key和value对构建map类型
select map('xiaohai',1,'dahai',2);
select map_keys(map('xiaohai',1,'dahai',2));
select map_values(map('xiaohai',1,'dahai',2));
语法:array(val1, val2, …)
说明:根据输入的参数构建数组array类
select array('1','2','3','4');
select array_contains(array('a','b','c','d'),'a');
select sort_array(array('a','d','c'));
语法:struct(val1, val2, val3, …)
说明:根据输入的参数构建结构体struct类
select struct('name','age','weight');
select named_struct('name','xiaosong','age',18,'weight',80);
select
sex,
collect_list(job)
from
employee
group by
sex
select
sex,
collect_set(job)
from
employee
group by
sex
参考以下文章:
原文链接:https://blog.csdn.net/m0_52606060/article/details/129150481
原文链接:https://blog.csdn.net/m0_52606060/article/details/129132985
参考以下文章:
原文链接:https://blog.csdn.net/m0_52606060/article/details/134826464