1、函数分类
Hive函数对应的官方文档: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 原生分类标准: 内置函数(Hive官方写好的,咱们直接用即可) 和 用户自定义函数(UDF,UDAF,UDTF) 分类标准扩大化: 本来,UDF 、UDAF、UDTF这3个标准是针对用户自定义函数分类的; 但是,现在可以将这个分类标准扩大到hive中所有的函数,包括内置函数和自定义函数; 目前hive三大标准 UDF: 用户自定义函数user define function。特点:输入一条返回一条,也就是【一对一】的关系 UDAF: 用户自定义聚合函数user define aggregate function。特点:输入多条返回一条,也就是【多对一】的关系 UDTF: 用户自定义表数据生成函数user define table-generation function。特点:输入一条返回多条,也就是【一对多】的关系 查询所有hive函数名称: show functions; 查看某函数使用帮助文档: desc function [extended] 函数名; 注意: 加上extended关键字能查看详细信息示例
示例:
show tables; show databases; -- 查看Hive中有哪些函数列表 show functions; -- 查看函数的具体说明 describe function extended count; describe function extended avg;
2、复杂类型函数
hive复杂类型: array struct map array类型: 又叫数组类型,存储同类型的单数据的集合取值: 字段名[索引] 注意: 索引从0开始获取长度的函数: size(字段名) 常用判断是否包含某个数据的函数: array_contains(字段名,某数据) 常用对数组进行排序的函数: sort_array(数组) struct类型: 又叫结构类型,可以存储不同类型单数据的集合取值: 字段名.子字段名nmap类型: 又叫映射类型,存储键值对数据的映射(根据key找value)取值: 字段名[key]获取长度的函数: size(字段名) 常用 获取所有key的函数: map_keys() 常用 获取所有value的函数: map_values() 常用
示例:
-- 演示集合函数 select array('binzi','666','888'); select size(array('binzi','666','888')); select array_contains(array('binzi','666','888'),'binzi'); -- 复杂数据类型(补充sort_array) select array(4,2,3,5,1); -- 创建一个数组 select sort_array(array(4,2,3,5,1)); -- 只能升序排序 describe function extended sort_array; select map('a',1,'b',2,'c',3); select size(map('a',1,'b',2,'c',3)); select map_keys(map('a',1,'b',2,'c',3));-- ["a","b","c"] select map_values(map('a',1,'b',2,'c',3));-- [1,2,3]
3、数学函数
常用: round: round(字段名称[,小数的位数]),对数据进行四舍五入 ceil: 得到大于字段值的最小整数 floor: 得到小于字段值的最大整数 不常用: rand: 随机生成0-1的数据 pi: 生成Π的结果
示例:
select "hello world" as f; select 12123 as f; -- 复杂数据类型(补充sort_array) select array(4,2,3,5,1); -- 创建一个数组 select sort_array(array(4,2,3,5,1)); -- 只能升序排序 describe function extended sort_array; -- 数学函数 -- round(字段名称[,小数的位数]):对数据进行四舍五入 select round(3.1415926); select round(3.1415926,2); select round(3.140123,3); select age*1.2 from students; select round(age*id) from students; -- rand([seed]):随机生成0-1的数据。可以传递seed这个随机种子(了解) select rand(); select rand(10); describe function extended rand; -- ceil(字段):得到大于字段值的最小整数 select ceil(1.999999999); -- 2 select ceil(1.00000001); -- 2 -- floor(字段):得到小于字段值的最大整数 select floor(1.999999999); -- 1 select floor(0.999999999); -- 0 -- pi:生成Π的结果 select pi();