首页 / 大数据 / 大数据之Hive之函数
大数据之Hive之函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了大数据之Hive之函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4991字,纯文字阅读大概需要8分钟。
内容图文
![大数据之Hive之函数](/upload/InfoBanner/zyjiaocheng/1030/6fb86977d3914315a0fe470c4792a8ad.jpg)
系统内置函数
1.查看系统自带的函数
show functions;
2.显示自带的函数的用法
desc function upper;
3.详细显示自带的函数的用法
desc function extended upper;
常用内置函数
1.空字符串赋值
(1)函数说明
nvl:给值为NULL的数据复制,
格式:NVL(value,default_value)
功能:如果value为NULL,则NVL函数返回default_value的值.否则返回value的值,如果两个参数都为NULL,则返回NULL.
2.行转列
1)相关函数说明(可以是一行转一列,多行转一列)
concat(string A/col, ASstring B/col…): 返回输入字符串连接后的结果,支持任意个输入字符串;
concat_ws(separator,str1,str2,…): 它是一个特殊形式的concat().第一个参数 剩余参数间的分隔符.分隔符可以是与剩余参数一样的字符串.如果分隔符是null,返回值也将为null,这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;
注意:concat_ws must be “string or array”
collect_set(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段.
collect_list(col):函数只接受基本数据类型,它的主要作用是将某阻断的值进行不去重汇总,=产生array类型字段.
3.列转行(一列转多行)
1)函数说明
Split(str,separator):将字符串按照后面的分隔符切割,转换成字符array.
explode(col):将hive一列中复杂的array或者map结构拆分成多行.
LATERAL VIEW
用法:LATERAL VIEW udtf(expression) tableAlias As columnAlias
解释:lateral view用于和split,explode 等UDTF一起使用,它能够将一行数据拆成多行数据,再次基础上可以对拆分后的数据进行聚合.
lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表
4.窗口函数(开窗函数)
一:什么是窗口函数
窗口函数是一个高阶函数,比较好用 但是很吃资源
一下函数才能被称用作窗口函数
1.窗口函数
1.1 lead(col,n,default_val): 往后第n行数据 n 和 default_val都有默认值1 和null
1.2 lag(col,n,default_val): 往前第n行数据 n 和 default_val都有默认值1 和null
1.3 first_value(col,true/false) 当前窗口下的第一个值,第二个参数为true,跳过空值 第二个参数默认是false
1.4 last_value(col,true/false) 当前窗口下的最后一个值,第二个参数为true,跳过空值 第二个参数默认是false
2.聚合函数
2.1 count
2.2 sum
2.3 min
2.4 max
2.5 avg
3.排名分析函数
3.1 RANK
3.2 ROW_NUMBER
3.3 DENSE_RANK
3.4 NTILE
二.窗口函数定义 窗口+函数
窗口表示能够限定函数的计算范围
窗口函数是一行一行的走的
三.窗口函数语法
窗口函数()+over([partition by 字段…] [order by 字段…] [窗口字句])
窗口函数本身的执行顺序
1.over表示开窗 但是over表示开一个最大的窗口
2.partition by 表示在over的前提下 再开一个细窗口 并且各窗口之间相互独立(窗口字句对每个窗口独立生效)
当partition by 的字段相同时会进入同一个窗口里面
3.order by 表示窗口内按什么排序 当有over没有partition by的时候,按照最大的窗口进行排序,当有over有partition by 的时候 按partition by 后的细窗口 每个窗口内部排序
4.窗口函数
窗口字句
(ROWS | RANGE) BETWEEN (UNBOUNDED | [NUM]) PRECEDING AND ([NUM] PRECEDING | CURRENT ROW | (UNBOUNDED | [NUM]) FOLLOWING)
-- 上无边界到下无边界
(ROWS | RANGE) BETWEEN CURRENT ROW AND (CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
-- 上无边界到当前行
(ROWS | RANGE) BETWEEN [num] FOLLOWING AND (UNBOUNDED | [num]) FOLLOWING
-- 上一行到下一行
并不是所有的窗口函数都支持窗口字句
rank dense_rank row_number ntile lag lead ----- 不支持窗口函数
有 order by 窗口字句的默认范围是–上无边界到当前行
没有order by 窗口字句的默认范围—上无边界到下无边界
5.Rank
函数说明:
1.rank()拍讯相同时会重复,总数不会变
2.dense_rank() 拍讯相同时会重复,总数会减少
3.row_number() 会根据顺序计算
6.常用的hive函数
常用日期函数
unix_timestamp:返回当前或指定时间的时间戳
from_unixtime:将时间戳转为日期格式
current_date:当前日期
current_timestamp:当前的日期加时间
to_date:抽取日期部分
year:获取年
month:获取月
day:获取日
hour:获取时
minute:获取分
second:获取秒
weekofyear:当前时间是一年中的第几周
dayofmonth:当前时间是一个月中的第几天
months_between: 两个日期间的月份
add_months:日期加减月
datediff:两个日期相差的天数
date_add:日期加天数
date_sub:日期减天数
last_day:日期的当月的最后一天
date_format : 按指定格式返回日期
常用取整函数
round: 四舍五入
ceil: 向上取整
floor: 1
常用字符串操作函数
upper: 转大写
lower: 转小写
length: 长度
trim: 前后去空格
lpad: 向左补齐,到指定长度
rpad: 向右补齐,到指定长度
regexp_replace: SELECT regexp_replace(‘100-200’, ‘(\d+)’, ‘num’) ;
使用正则表达式匹配目标字符串,匹配成功后替换!
集合操作
size: 集合中元素的个数
map_keys: 返回map中的key
map_values: 返回map中的value
array_contains: 判断array中是否包含某个元素
sort_array: 将array中的元素排序
自定义函数
1)Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。
2)当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。
3)根据用户自定义函数类别分为以下三种:
(1)UDF(User-Defined-Function)
一进一出
(2)UDAF(User-Defined Aggregation Function)
用户自定义聚合函数,多进一出
类似于:count/max/min
(3)UDTF(User-Defined Table-Generating Functions)
用户自定义表生成函数,一进多出
如lateral view explode()
4)官方文档地址
https://cwiki.apache.org/confluence/display/Hive/HivePlugins
5)编程步骤:
(1) 继承Hive提供的类
(2)实现类中的抽象方法
(3)在hive的命令行窗口创建函数
(4)在hive的命令窗口删除函数
内容总结
以上是互联网集市为您收集整理的大数据之Hive之函数全部内容,希望文章能够帮你解决大数据之Hive之函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。