【Python大数据笔记_day09_hive函数和调优】

hive函数

函数分类标准[重点]

原生分类标准:  内置函数 和 用户定义函数(UDF,UDAF,UDTF)
​
分类标准扩大化:  本来,UDF 、UDAF、UDTF这3个标准是针对用户自定义函数分类的; 但是,现在可以将这个分类标准扩大到hive中所有的函数,包括内置函数和自定义函数;
​
目前hive三大标准
UDF:(User-Defined-Function)普通函数:  特点是一进一出(输入一行数据输出一行数据)        举例: split
UDAF:(User-Defined Aggregation Function)聚合函数: 特点是多进一出(输入多行输出一行)   举例: count sum max  min  avg
UDTF:(User-Defined Table-Generating Functions)表生成函数:  特点是一进多出(输入一行输出多行)   举例: explode
​
查询所有hive函数名称:  show functions;
查看某函数使用帮助文档: desc function [extended] 函数名;         注意: 加上extended关键字能查看详细信息示例
-- 查看所有函数
show functions;
​
-- 分类标准扩大化
-- UDF: 普通函数 特点: 一进一出  举例: split()
-- 查看官方示例
describe function extended split;
-- 演示官方示例
SELECT split('oneAtwoBthreeCfour', '[ABC]'); -- ["one","two","three","four"]
​
-- UDAF: 聚合函数 特点: 多进一出 举例: sum() count() avg() max()  min()
-- 查看官方示例
describe function extended count;
/*
count(*): 不忽略null值统计个数
count(字段名): 忽略null值统计个数
count(常量): 举例 : count(1)  count(2)  ...
count(distinct 字段名): 忽略null值并且去重统计个数
*/
​
-- UDTF: 表生成函数 特点: 一进多哦出 举例: explode()
-- 查看官方示例
describe function extended explode;
/*
将数组a的元素分成多行,或将映射的元素分成多行和多列
数组: array[元素1,元素2,元素3...]   array(10,20,30)能够构造出数组[10,20,30]
映射: map{k1:v1,k2:v2...}  map('a',10,'b',20,'c',30)构造出映射{'a':10,'b':20,'c':30}
*/
-- 演示炸裂函数
select explode(array(10,20,30));
select explode(map('a',10,'b',20,'c',30));

复杂类型函数

hive复杂类型:   array  struct  map
​
array类型: 又叫数组类型,存储同类型的单数据的集合
     取值: 字段名[索引]   注意: 索引从0开始
     获取长度的函数: size(字段名)       常用
     判断是否包含某个数据的函数: array_contains(字段名,某数据)   常用
     对数组进行排序的函数: sort_array(数组)
​
struct类型: 又叫结构类型,可以存储不同类型单数据的集合
     取值: 字段名.子字段名n
    
map类型: 又叫映射类型,存储键值对数据的映射(根据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');
select sort_array(array(3,1,5,2,4)); -- [1,2,3,4,5]
​
​
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]

字符串函数

字符串常见的函数:
concat: 字符串紧凑拼接到一起生成新字符串
concat_ws: 字符串用指定分隔符拼接到一起生成新字符串        常用 
length: 获取字符串长度             常用 
lower: 把字符串中的字母全部变成小写
upper: 把字符串中的字母全部变成大写
trim: 把字符串两端的空白去除         常用 
​
拓展字符串函数
substr: 截取字符串         常用 
replace: 替换字符串        常用 
regexp_replace: 正则替换字符串
parse_url: 解析url(统一资源定位符)  组成: 协议/主机地址:端口号/资源路径?查询参数
get_json_object: 获取json对象解析对应数据
-- 1.字符串相关函数
-- 演示字符串常见的函数
-- concat: 字符串紧凑拼接到一起生成新字符串
select concat('binzi', '666', '888'); -- 'binzi666888'
-- concat_ws: 字符串用指定分隔符拼接到一起生成新字符串
select concat_ws('-', 'binzi', '666', '888'); -- 'binzi-666-888'
-- length: 获取字符串长度
select length('binzi-666'); -- 9
-- lower: 把字符串中的字母全部变成小写
select lower('BINZI-666'); -- 'binzi-666'
-- upper: 把字符串中的字母全部变成大写
select upper('binzi-666'); -- 'BINZI-666'
-- trim: 把字符串两端的空白去除
select '   binzi 666  '; -- '   binzi 666   '
select trim('   binzi 666  ');-- 'binzi 666'
​
​
​
​
-- substr(字符串,开始索引,截取长度): 截取字符串,截取长度如果不写默认到结尾
-- substring(字符串,开始索引,截取长度): 截取字符串
-- 注意: 正索引从1开始正着数  负索引从-1开始倒着数
select substr('binzi666',1,2); -- 'bi'
select substr('binzi666',1); -- -- 'binzi666'
select substr('binzi666',-4);--'i666'
​
-- 已知'2023-05-21'要求分别截取年月日
select substr('2023-05-21',1,4); -- 结果2023
select substr('2023-05-21',1,7); -- 结果2023-05
select substr('2023-05-21',6,2); -- 结果05
select substr('2023-05-21',-2,2); -- 结果21
-- current_date经常用于截取日期中的年月
select `current_date`();
select substr(`current_date`(),1,7);
​
​
​
​
-- replace(大字符串,敏感词,替换后的内容):替换字符串
select replace('你TMD哦','TMD','挺萌的');
select replace('binzi-666', '666', 'num');
​
--正则表达式替换函数:regexp_replace(str, regexp, rep)
select regexp_replace('binzi-666', '\\d+', 'num');
--正则表达式解析函数:regexp_extract(str, regexp, idx)
-- 正则中()代表分组,自动从1开始生成编号,提取正则匹配到的指定组内容
select regexp_extract('binzi-666-888', '(\\d+)-(\\d+)', 1);
select regexp_extract('binzi-666-888', '(\\d+)-(\\d+)', 2);
​
​
--URL解析函数:parse_url 注意要想一次解析出多个 可以使用parse_url_tuple这个UDTF函数
-- URL: 统一资源定位符 也就是咱们常说的网址   组成: 协议/主机地址:端口号/资源路径?查询参数
select parse_url('http://www.itcast.cn/path/binzi.html?user=binzi&pwd=123', 'HOST'); -- www.itcast.cn
select parse_url('http://www.itcast.cn/path/binzi.html?user=binzi&pwd=123', 'PATH'); -- /path/binzi.html
select parse_url('http://www.itcast.cn/path/binzi.html?user=binzi&pwd=123', 'QUERY'); -- user=binzi&pwd=123
select parse_url('http://www.itcast.cn/path/binzi.html?user=binzi&pwd=123', 'QUERY', 'user'); -- binzi
select parse_url('http://www.itcast.cn/path/binzi.html?user=binzi&pwd=123', 'QUERY', 'pwd'); -- 123
​
-- json解析函数:get_json_object(json_txt, path), 细节: 整个json字符串用单引号'包裹, json字符串中的键, 值用双引号"包裹.
-- json字符串的格式: {键:值, 键: 值}
-- json数组的格式: [{键:值, 键: 值}, {键:值, 键: 值}, {键:值, 键: 值}]      -- 索引从 0 开始.
select get_json_object('{"name":"杨过", "age":"18"}', '$.name');      -- 杨过, $表示json对象
select get_json_object('[{"name":"杨过", "ag
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值