Hive(七)【内置函数】
一.系统内置函数
1.查看系统自带内置函数
show functions;
2.查看函数的具体用法
如查看upper函数
desc function extended upper;
二.常用内置函数
1.数学函数
round
round(DOUBLE a):返回对a四舍五入的BIGINT值
round(DOUBLE a, INT d):返回DOUBLE型d的保留n位小数的DOUBLE型的近似值
案例
0: jdbc:hive2://hadoop102:10000> select round(4.5),round(4.12345,2);
+------+-------+
| _c0 | _c1 |
+------+-------+
| 5 | 4.12 |
+------+-------+
2.字符函数
split
split(string str, string pat) 返回类型:array
解析:按照正则表达式pat来分割字符串str,并将分割后的数组字符串的形式返回。
案例
0: jdbc:hive2://hadoop102:10000> select split('aaa-bbb-ccc','-');
+----------------------+
| _c0 |
+----------------------+
| ["aaa","bbb","ccc"] |
+----------------------+
substring
substring(string A, int start, int len) 返回类型:string
解析:对于字符串A,从start位置开始截取长度为length的字符串并返回
案例
0: jdbc:hive2://hadoop102:10000> select substring('2020-06-29',1,7);
+----------+
| _c0 |
+----------+
| 2020-06 |
+----------+
concat
concat(string A, string B...) 返回类型:string
解析:将每个字符串拼接,也可以是sql查询的字段
案例
0: jdbc:hive2://hadoop102:10000> select concat('aaa','--','bbb','|','ccc');
+---------------+
| _c0 |
+---------------+
| aaa--bbb|ccc |
+---------------+
concat_ws
concat_ws(string SEP, string A, string B...)
解析:sep是分割符,其余字符串以这个分割符拼接
案例
0: jdbc:hive2://hadoop102:10000> select concat_ws('-','aaa','bbb','ccc');
+--------------+
| _c0 |
+--------------+
| aaa-bbb-ccc |
+--------------+
lower,upper
解析:lower将字符串转全部转为小写,upper将字符串转全部转为大写
案例
0: jdbc:hive2://hadoop102:10000> select lower('Hello World') ,upper('Hello World');
+--------------+--------------+
| _c0 | _c1 |
+--------------+--------------+
| hello world | HELLO WORLD |
+--------------+--------------+
trim
解析:去前后空格
length
解析:字符串长度,字符数
3.日期函数
to_date
解析:从一个字符串中取出为日期的部分
案例
0: jdbc:hive2://hadoop102:10000> select to_date('2020-06-29 20:34:01');
+-------------+
| _c0 |
+-------------+
| 2020-06-29 |
+-------------+
yaer、month、day
解析:从一个日期中取出相应的年、月、日
案例
0: jdbc:hive2://hadoop102:10000> select year('2020-06-29 20:34:01'),month('2020-06-29 20:34:01'),day('2020-06-29 20:34:01');
+-------+------+------+
| _c0 | _c1 | _c2 |
+-------+------+------+
| 2020 | 6 | 29 |
+-------+------+------+
4.条件函数
case...when...
语法格式:case A when B then C [when D then E]* [else F] end
解析:对于A来说,如果判断为B则返回C,如果判断为D则返回E(此处判断条件可为多个),如果以上都不是则返回F。注意,最后还有还有一个end结束符
案例
需求:求不同部门的男女各有多少人
原始数据 : emp_sex.txt
name dept_id sex
悟空 A 男
大海 A 男
宋宋 B 男
凤姐 A 女
婷姐 B 女
婷婷 B 女
建表
create table emp_sex(
name string,
dept_id string,
sex string
)
row format delimited fields terminated by '\t';
把原始数据导入表
load data local inpath '/opt/module/testdata/emp_sex.txt' into table emp_sex;
查看一下
select * from emp_sex;
name|dept_id|sex|
----|-------|---|
悟空 |A |男 |
大海 |A |男 |
宋宋 |B |男 |
凤姐 |A |女 |
婷姐 |B |女 |
婷婷 |B |女 |
实现:分组统计某个字段不同值得数量;
select
dept_id,
sum(case when sex='男' then 1 else 0 end) man_count,
sum(case when sex='女' then 1 else 0 end) woman_count
from emp_sex
group by dept_id;
nvl
语法:NVL( 字段值,value)
解析:给空字段赋值,如果字段值为空则赋值为value,否则字段值不变;若都为null那么返回null
案例
0: jdbc:hive2://hadoop102:10000> select nvl('aaa',1),nvl(null,1);
+------+------+
| _c0 | _c1 |
+------+------+
| aaa | 1 |
+------+------+
5.get_json_object函数
使用方式
get_json_object(json_txt, path): 从一个JSON字符串中取出指定路径对应的数据!
核心:path怎么写?
$: 代表根对象
. : 获取元素的属性
[] : 索引获取一个数组中子元素
案例
数据格式
[{"name":"大郎","sex":"男","age":"25"},{"name":"西门庆","sex":"男","age":"47"}]
取出第一个json对象
hive> select get_json_object('[{"name":"大郎","sex":"男","age":"25"},{"name":"西门庆","sex":"男","age":"47"}]','$[0]');
OK
{"name":"大郎","sex":"男","age":"25"}
Time taken: 0.175 seconds, Fetched: 1 row(s)
取出第一个json的age字段的值
hive> select get_json_object('[{"name":"大郎","sex":"男","age":"25"},{"name":"西门庆","sex":"男","age":"47"}]','$[0].age');
OK
25
Time taken: 0.172 seconds, Fetched: 1 row(s)
6.str_to_map
str_to_map(text, delimiter1, delimiter2)
将字符串切转化为map集合,delimiter1是每个entry分割符,delimiter2是entry的K-V分割符。
案例
将字符串'zhangsan=12,lisi=20,wangwu=30',转化为map集合。
hive (default)> select str_to_map('zhangsan=12,lisi=20,wangwu=30',',','=');
OK
_c0
{"zhangsan":"12","lisi":"20","wangwu":"30"}
Time taken: 3.248 seconds, Fetched: 1 row(s)
常用函数查询
常用日期函数
unix_timestamp:返回当前或指定时间的时间戳 select unix_timestamp(); select unix_timestamp('2008-08-08 08:08:08');
from_unixtime:将时间戳转为日期格式 select from_unixtime(1218182888);
current_date:当前日期 select current_date();
current_timestamp:当前的日期加时间 select current_timestamp();
to_date:抽取日期部分 select to_date('2008-08-08 08:08:08'); select to_date(current_timestamp());
year:获取年 select year(current_timestamp());
month:获取月 select month(current_timestamp());
day:获取日 select DAY(current_timestamp());
hour:获取时 select HOUR(current_timestamp());
minute:获取分 select minute(current_timestamp());
second:获取秒 select SECOND(current_timestamp());
weekofyear:当前时间是一年中的第几周 select weekofyear(current_timestamp()); select weekofyear('2020-01-08');
dayofmonth:当前时间是一个月中的第几天 select dayofmonth(current_timestamp()); select dayofmonth('2020-01-08');
months_between: 两个日期间的月份 select months_between('2020-07-29','2020-06-28');
add_months:日期加减月 select add_months('2020-06-28',1);
datediff:两个日期相差的天数 select datediff('2019-03-01','2019-02-01'); select datediff('2020-03-01','2020-02-01');
date_add:日期加天数 select date_add('2019-02-28',1); select date_add('2020-02-28',1);
date_sub:日期减天数 select date_sub('2019-03-01',1); select date_sub('2020-03-01',1);
last_day:日期的当月的最后一天 select last_day('2020-02-28'); select last_day('2019-02-28');
date_format() :格式化日期 日期格式:'yyyy-MM-dd hh:mm:ss' select date_format('2008-08-08 08:08:08','yyyy-MM-dd hh:mm:ss');
常用取整函数
round: 四舍五入 select round(4.5);
ceil: 向上取整 select ceil(4.5);
floor: 向下取整 select floor(4.5);
常用字符串操作函数
upper: 转大写 select upper('abcDEFg');
lower: 转小写 select lower('abcDEFg');
length: 长度 select length('abcDEFg');
trim: 前后去空格 select length(' abcDEFg '); select length(trim(' abcDEFg '));
lpad: 向左补齐,到指定长度 select lpad('abc',11,'*');
rpad: 向右补齐,到指定长度 select rpad('abc',11,'*');
substring: 剪切字符串 select substring('abcdefg',1,3); select rpad(substring('13843838438',1,3),11,'*');
regexp_replace: SELECT regexp_replace('100-200', '(\\d+)', 'num'); select regexp_replace('abc d e f',' ','');
使用正则表达式匹配目标字符串,匹配成功后替换!
集合操作
size: 集合中元素的个数
map_keys: 返回map中的key
map_values: 返回map中的value select size(friends),map_keys(children),map_values(children) from person;
array_contains: 判断array中是否包含某个元素 select array_contains(friends,'lili') from person;
sort_array: 将array中的元素排序 select sort_array(split('1,3,4,5,2,6,9',','));
select sort_array(split('a,d,g,b,c,f,e',','));
Hive(七)【内置函数】的更多相关文章
- [Hive_6] Hive 的内置函数应用
0. 说明 Hive 的内置函数的基本操作 | 时间函数 | String 函数 | 条件语句 | explode | split | substring 1. 基本操作 查看函数 show func ...
- hive的内置函数和自定义函数
一.内置函数 1.一般常用函数 .取整函数 round() 当传入第二个参数则为精度 bround() 银行家舍入法:为5时,前一位为偶则舍,奇则进. .向下取整 floor() .向上取整 ceil ...
- Hive学习之路 (九)Hive的内置函数
数学函数 Return Type Name (Signature) Description DOUBLE round(DOUBLE a) Returns the rounded BIGINT valu ...
- Hive的内置函数
定义: UDF(User-Defined-Function),用户自定义函数对数据进行处理. UDTF(User-Defined Table-Generating Functions) 用来解决 输入 ...
- hive中内置函数
查看函数的详细使用方法 desc function extended 函数名 例如: 1).desc function extended locate locate(substr, str[, pos ...
- Hive内置函数和自定义函数的使用
一.内置函数的使用 查看当前hive版本支持的所有内置函数 show function; 查看某个函数的使用方法及作用,比如查看upper函数 desc function upper; 查看upper ...
- hive学习笔记之七:内置函数
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- [Hive - Tutorial] Built In Operators and Functions 内置操作符与内置函数
Built-in Operators Relational Operators The following operators compare the passed operands and gene ...
- [转] Hive 内置函数
原文见:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 1.内置运算符1.1关系运算符 运算符 类型 说明 A ...
随机推荐
- Red Hat Enterprise Linux (RHEL) 9 更新了什么,即 Rocky Linux 9 和 AlmaLinux 9 展望
请访问原文链接:https://sysin.org/blog/rhel-9-vision/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www.sysin.or ...
- robot_framewok自动化测试--(9)连接并操作 MySql 数据库
连接并操作 MySql 数据库 1.mysql数据库 1.1安装mysql数据库 请参考我的另一篇文章:MYSQL5.7下载安装图文教程 1.2.准备测试数据 请参考我的另一篇文章:Mysql基础教程 ...
- Python打包成exe,文件太大问题解决办法
Python打包成exe,文件太大问题解决办法 原因 解决办法 具体步骤 情况一:初次打包 情况二:再次打包 原因 由于使用pyinstaller打包.py文件时,会把很多已安装的无关库同时打包进去, ...
- oxidized备份华为HRP防火墙配置失败问题
Oxidized备份华为防火墙配置Last Status红色,备份失败,查看oxidized日志(默认是~/.config/oxidized/logs/oxidized.log)能看到报错日志: WA ...
- RabbitMQ保证消息的顺序性
当我们的系统中引入了MQ之后,不得不考虑的一个问题是如何保证消息的顺序性,这是一个至关重要的事情,如果顺序错乱了,就会导致数据的不一致. 比如:业务场景是这样的:我们需要根据mysql的b ...
- ofd文件电子签章实现方法
前言 文档处理一般经过三个环节:流.版.签:流式软件负责编辑,如:office.wps等.版式软件负责文档定型,保证显示样式不跑偏:版式文件格式有两种:pdf.ofd.签章软件负责对版式文档签章.签章 ...
- 5.0jemter(英文版)录制脚本,进行压力测试
压力测试的目的:找到瓶颈.优化速率 1.jemter,Test Plan-->>Add-->>Threds(users)-->>Thred Group创建线程组 2 ...
- 菜鸡的Java笔记 实践 - java 数组操作
讲解一个继承的实现思路 要求定义一个数组操作类(Array类),在这个类里面可以进行整型数组的操作,由外部传入数组的大小 ,并且要求实现数据的保存以及数据的 ...
- pg_probackup
[1] https://postgrespro.com/docs/enterprise/13/app-pgprobackup PITR依赖continuous WAL archiving: Makin ...
- Dapr-Actor构建块
前言: 前篇-绑定 文章对Dapr的绑定构建块进行了解,本篇继续对 Actor 构建块进行了解学习. 一.Actor简介: Actors 为最低级别的"计算单元". 换句话说,您将 ...