一.系统内置函数

1.查看系统自带内置函数

show functions;

2.查看函数的具体用法

如查看upper函数

  1. desc function extended upper;

二.常用内置函数

1.数学函数

round

round(DOUBLE a):返回对a四舍五入的BIGINT值

round(DOUBLE a, INT d):返回DOUBLE型d的保留n位小数的DOUBLE型的近似值

案例

  1. 0: jdbc:hive2://hadoop102:10000> select round(4.5),round(4.12345,2);
  2. +------+-------+
  3. | _c0 | _c1 |
  4. +------+-------+
  5. | 5 | 4.12 |
  6. +------+-------+

2.字符函数

split

split(string str, string pat) 返回类型:array

解析:按照正则表达式pat来分割字符串str,并将分割后的数组字符串的形式返回。

案例

  1. 0: jdbc:hive2://hadoop102:10000> select split('aaa-bbb-ccc','-');
  2. +----------------------+
  3. | _c0 |
  4. +----------------------+
  5. | ["aaa","bbb","ccc"] |
  6. +----------------------+

substring

substring(string A, int start, int len) 返回类型:string

解析:对于字符串A,从start位置开始截取长度为length的字符串并返回

案例

  1. 0: jdbc:hive2://hadoop102:10000> select substring('2020-06-29',1,7);
  2. +----------+
  3. | _c0 |
  4. +----------+
  5. | 2020-06 |
  6. +----------+
concat

concat(string A, string B...) 返回类型:string

解析:将每个字符串拼接,也可以是sql查询的字段

案例

  1. 0: jdbc:hive2://hadoop102:10000> select concat('aaa','--','bbb','|','ccc');
  2. +---------------+
  3. | _c0 |
  4. +---------------+
  5. | aaa--bbb|ccc |
  6. +---------------+
concat_ws

concat_ws(string SEP, string A, string B...)

解析:sep是分割符,其余字符串以这个分割符拼接

案例

  1. 0: jdbc:hive2://hadoop102:10000> select concat_ws('-','aaa','bbb','ccc');
  2. +--------------+
  3. | _c0 |
  4. +--------------+
  5. | aaa-bbb-ccc |
  6. +--------------+
lower,upper

解析:lower将字符串转全部转为小写,upper将字符串转全部转为大写

案例

  1. 0: jdbc:hive2://hadoop102:10000> select lower('Hello World') ,upper('Hello World');
  2. +--------------+--------------+
  3. | _c0 | _c1 |
  4. +--------------+--------------+
  5. | hello world | HELLO WORLD |
  6. +--------------+--------------+
trim

解析:去前后空格

length

解析:字符串长度,字符数

3.日期函数

to_date

解析:从一个字符串中取出为日期的部分

案例

  1. 0: jdbc:hive2://hadoop102:10000> select to_date('2020-06-29 20:34:01');
  2. +-------------+
  3. | _c0 |
  4. +-------------+
  5. | 2020-06-29 |
  6. +-------------+
yaer、month、day

解析:从一个日期中取出相应的年、月、日

案例

  1. 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');
  2. +-------+------+------+
  3. | _c0 | _c1 | _c2 |
  4. +-------+------+------+
  5. | 2020 | 6 | 29 |
  6. +-------+------+------+

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

  1. name dept_id sex
  2. 悟空 A
  3. 大海 A
  4. 宋宋 B
  5. 凤姐 A
  6. 婷姐 B
  7. 婷婷 B

建表

  1. create table emp_sex(
  2. name string,
  3. dept_id string,
  4. sex string
  5. )
  6. row format delimited fields terminated by '\t';

把原始数据导入表

  1. load data local inpath '/opt/module/testdata/emp_sex.txt' into table emp_sex;

查看一下

  1. select * from emp_sex;
  1. name|dept_id|sex|
  2. ----|-------|---|
  3. 悟空 |A |男 |
  4. 大海 |A |男 |
  5. 宋宋 |B |男 |
  6. 凤姐 |A |女 |
  7. 婷姐 |B |女 |
  8. 婷婷 |B |女 |

实现:分组统计某个字段不同值得数量;

  1. select
  2. dept_id,
  3. sum(case when sex='男' then 1 else 0 end) man_count,
  4. sum(case when sex='女' then 1 else 0 end) woman_count
  5. from emp_sex
  6. group by dept_id;
nvl

语法:NVL( 字段值,value)

解析:给空字段赋值,如果字段值为空则赋值为value,否则字段值不变;若都为null那么返回null

案例

  1. 0: jdbc:hive2://hadoop102:10000> select nvl('aaa',1),nvl(null,1);
  2. +------+------+
  3. | _c0 | _c1 |
  4. +------+------+
  5. | aaa | 1 |
  6. +------+------+

5.get_json_object函数

使用方式

  1. get_json_object(json_txt, path): 从一个JSON字符串中取出指定路径对应的数据!
  2. 核心:path怎么写?
  3. $: 代表根对象
  4. . : 获取元素的属性
  5. [] : 索引获取一个数组中子元素

案例

数据格式

  1. [{"name":"大郎","sex":"男","age":"25"},{"name":"西门庆","sex":"男","age":"47"}]

取出第一个json对象

  1. hive> select get_json_object('[{"name":"大郎","sex":"男","age":"25"},{"name":"西门庆","sex":"男","age":"47"}]','$[0]');
  2. OK
  3. {"name":"大郎","sex":"男","age":"25"}
  4. Time taken: 0.175 seconds, Fetched: 1 row(s)

取出第一个json的age字段的值

  1. hive> select get_json_object('[{"name":"大郎","sex":"男","age":"25"},{"name":"西门庆","sex":"男","age":"47"}]','$[0].age');
  2. OK
  3. 25
  4. 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集合。

  1. hive (default)> select str_to_map('zhangsan=12,lisi=20,wangwu=30',',','=');
  2. OK
  3. _c0
  4. {"zhangsan":"12","lisi":"20","wangwu":"30"}
  5. Time taken: 3.248 seconds, Fetched: 1 row(s)

常用函数查询


  1. 常用日期函数
  2. unix_timestamp:返回当前或指定时间的时间戳 select unix_timestamp(); select unix_timestamp('2008-08-08 08:08:08');
  3. from_unixtime:将时间戳转为日期格式 select from_unixtime(1218182888);
  4. current_date:当前日期 select current_date();
  5. current_timestamp:当前的日期加时间 select current_timestamp();
  6. to_date:抽取日期部分 select to_date('2008-08-08 08:08:08'); select to_date(current_timestamp());
  7. year:获取年 select year(current_timestamp());
  8. month:获取月 select month(current_timestamp());
  9. day:获取日 select DAY(current_timestamp());
  10. hour:获取时 select HOUR(current_timestamp());
  11. minute:获取分 select minute(current_timestamp());
  12. second:获取秒 select SECOND(current_timestamp());
  13. weekofyear:当前时间是一年中的第几周 select weekofyear(current_timestamp()); select weekofyear('2020-01-08');
  14. dayofmonth:当前时间是一个月中的第几天 select dayofmonth(current_timestamp()); select dayofmonth('2020-01-08');
  15. months_between 两个日期间的月份 select months_between('2020-07-29','2020-06-28');
  16. add_months:日期加减月 select add_months('2020-06-28',1);
  17. datediff:两个日期相差的天数 select datediff('2019-03-01','2019-02-01'); select datediff('2020-03-01','2020-02-01');
  18. date_add:日期加天数 select date_add('2019-02-28',1); select date_add('2020-02-28',1);
  19. date_sub:日期减天数 select date_sub('2019-03-01',1); select date_sub('2020-03-01',1);
  20. last_day:日期的当月的最后一天 select last_day('2020-02-28'); select last_day('2019-02-28');
  21. date_format() :格式化日期 日期格式:'yyyy-MM-dd hh:mm:ss' select date_format('2008-08-08 08:08:08','yyyy-MM-dd hh:mm:ss');
  22. 常用取整函数
  23. round 四舍五入 select round(4.5);
  24. ceil 向上取整 select ceil(4.5);
  25. floor 向下取整 select floor(4.5);
  26. 常用字符串操作函数
  27. upper 转大写 select upper('abcDEFg');
  28. lower 转小写 select lower('abcDEFg');
  29. length 长度 select length('abcDEFg');
  30. trim 前后去空格 select length(' abcDEFg '); select length(trim(' abcDEFg '));
  31. lpad 向左补齐,到指定长度 select lpad('abc',11,'*');
  32. rpad 向右补齐,到指定长度 select rpad('abc',11,'*');
  33. substring: 剪切字符串 select substring('abcdefg',1,3); select rpad(substring('13843838438',1,3),11,'*');
  34. regexp_replace SELECT regexp_replace('100-200', '(\\d+)', 'num'); select regexp_replace('abc d e f',' ','');
  35. 使用正则表达式匹配目标字符串,匹配成功后替换!
  36. 集合操作
  37. size 集合中元素的个数
  38. map_keys 返回map中的key
  39. map_values: 返回map中的value select size(friends),map_keys(children),map_values(children) from person;
  40. array_contains: 判断array中是否包含某个元素 select array_contains(friends,'lili') from person;
  41. sort_array array中的元素排序 select sort_array(split('1,3,4,5,2,6,9',','));
  42. select sort_array(split('a,d,g,b,c,f,e',','));

Hive(七)【内置函数】的更多相关文章

  1. [Hive_6] Hive 的内置函数应用

    0. 说明 Hive 的内置函数的基本操作 | 时间函数 | String 函数 | 条件语句 | explode | split | substring 1. 基本操作 查看函数 show func ...

  2. hive的内置函数和自定义函数

    一.内置函数 1.一般常用函数 .取整函数 round() 当传入第二个参数则为精度 bround() 银行家舍入法:为5时,前一位为偶则舍,奇则进. .向下取整 floor() .向上取整 ceil ...

  3. Hive学习之路 (九)Hive的内置函数

    数学函数 Return Type Name (Signature) Description DOUBLE round(DOUBLE a) Returns the rounded BIGINT valu ...

  4. Hive的内置函数

    定义: UDF(User-Defined-Function),用户自定义函数对数据进行处理. UDTF(User-Defined Table-Generating Functions) 用来解决 输入 ...

  5. hive中内置函数

    查看函数的详细使用方法 desc function extended 函数名 例如: 1).desc function extended locate locate(substr, str[, pos ...

  6. Hive内置函数和自定义函数的使用

    一.内置函数的使用 查看当前hive版本支持的所有内置函数 show function; 查看某个函数的使用方法及作用,比如查看upper函数 desc function upper; 查看upper ...

  7. hive学习笔记之七:内置函数

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. [Hive - Tutorial] Built In Operators and Functions 内置操作符与内置函数

    Built-in Operators Relational Operators The following operators compare the passed operands and gene ...

  9. [转] Hive 内置函数

    原文见:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 1.内置运算符1.1关系运算符 运算符 类型 说明 A ...

随机推荐

  1. (转载)关于Linux C函数strtok的使用要点

    今天遇到了处理字符串的问题,比如分割问题,但是一时间想不起来什么方法,也不想手写一个类似java String中的split函数,于是百度了一下,发现了strtok这个好用的方法,以此作为总结. st ...

  2. Docker 搭建 Jenkins 持续集成自动化构建环境

    1.Docker镜像拉取 Jenkins 环境命令 docker pull jenkins/jenkins:lts 查看下拉取的镜像 docker images 2.通过容器编排方式构建 Jenkin ...

  3. AC-DCN ESXi

    传统IT架构中的网络,根据业务需求部署上线以后,如果业务需求发生变动,重新修改相应网络设备(路由器.交换机.防火墙)上的配置是一件非常繁琐的事情.在互联网/移动互联网瞬息万变的业务环境下,网络的高稳定 ...

  4. K8s 离线集群部署(二进制包无dashboard)

    https://www.cnblogs.com/cocowool/p/install_k8s_offline.html https://www.jianshu.com/p/073577bdec98 h ...

  5. Windows内核中的CPU架构-6-中断门(32-Bit Interrupt Gate)

    Windows内核中的CPU架构-6-中断门(32-Bit Interrupt Gate) 中断门和调用门类似,也是一种系统段.同样的它也可以用来提权. 中断门: 虽然中断门的段描述符如下: 但是中断 ...

  6. SpringBoot 全局异常拦截捕获处理

    一.全局异常处理 //Result定义全局数据返回对象 package com.xiaobing.demo001.domain; public class Result { private Integ ...

  7. PTA 7-3 畅通工程之最低成本建设问题 (30分)

    PTA 7-3 畅通工程之最低成本建设问题 (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括 ...

  8. c++学习笔记7(面向对象的程序设计)

    面向对象的程序=类+类+....+类 设计程序的过程,就是设计类的过程 实例 对象的内存分配 对象间的运算 使用类的成员变量和成员函数

  9. 问题 G: 心急的C小加

    题目描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否 ...

  10. 团队作业3--需求改进&系统

    需求改进&系统设计 这个作业属于哪个课程 软件工程 这个作业要求在哪里 作业要求 这个作业的目标 需求改进&系统设计 目录 需求改进&系统设计 需求&原型改进 针对课堂 ...